2010-05-20 36 views

Trả lời

1

Từ những gì tôi hiểu, bạn có thể phát hiện ra rằng một cuộc gọi đi đã được bắt đầu vì trạng thái điện thoại thay đổi từ chế độ chờ sang chế độ chờ. Tuy nhiên, từ đó, biết trạng thái của cuộc gọi đó - tức là biết nếu cuộc gọi bạn đang gọi đang đổ chuông, được chuyển sang thư thoại, thực sự được chọn hoặc chỉ hết thời gian có vẻ là thứ mà chúng tôi không thể phát hiện được. Bây giờ tôi không chắc chắn nếu nó chỉ là không thể phát hiện trong SDK, nhưng được truyền qua mạng và có thể phát hiện từ chính bộ thu radio, hoặc nếu thông tin đó chỉ đơn giản là không được truyền đi.

1

tối thiểu đó là cần phải làm là:

public class CallCounter extends PhoneStateListener { 

    public void onCallStateChanged(int state, String incomingNumber) { 
     switch(state) { 
      case TelephonyManager.CALL_STATE_IDLE: 
        Log.d("Tony","Outgoing Call finished"); 
        // Call Finished -> stop counter and store it. 
        callStop=new Date().getTime(); 
        context.stopService(new Intent(context,ListenerContainer.class)); 

       break; 
      case TelephonyManager.CALL_STATE_OFFHOOK: 
        Log.d("Tony","Outgoing Call Starting"); 
        // Call Started -> start counter. 
        // This is not precise, because it starts when calling, 
        // we can correct it later reading from call log 
        callStart=new Date().getTime(); 
       break; 
     } 
    } 


public class ListenerContainer extends Service { 
    public class LocalBinder extends Binder { 
     ListenerContainer getService() { 
      return ListenerContainer.this; 
     } 
    } 
    @Override 
    public void onStart(Intent intent, int startId) { 
     TelephonyManager tManager =(TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE); 
     CallCounter callCounter=new CallCounter(this); 
     tManager.listen(callCounter,PhoneStateListener.LISTEN_CALL_STATE); 
     Log.d("Tony","Call COUNTER Registered"); 
    } 
    @Override 
    public IBinder onBind(Intent intent) { 
     return mBinder; 
    } 
    // This is the object that receives interactions from clients. See 
    // RemoteService for a more complete example. 
    private final IBinder mBinder = new LocalBinder(); 

} 

public class myReceiver extends BroadcastReceiver { 
    public void onReceive(Context context, Intent intent) { 
     if (intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL)) { 
      context.startService(new Intent(context,ListenerContainer.class)); 
     } 
     } 
} 
+0

cách mã hoạt động ....? –

+0

Điều này sẽ không bao giờ hoạt động. CALL_STATE_OFFHOOK được gọi ngay lập tức khi điện thoại quay số đi. – AndroidDev

1

Tôi không biết nếu bạn có thể phát hiện một cuộc gọi theo thời gian, nhưng sự khác biệt khi cuộc gọi bắt đầu là có thể.

Bạn có thể làm điều đó như thế này, trong CALL_STATE_IDLE:

Uri allCalls = Uri.parse("content://call_log/calls"); 
String lastMinute = String.valueOf(new Date().getTime() - DAY_IN_MILISECONDS); 
//before the call started 
Cursor c = app.getContentResolver().query(allCalls, null, Calls.DATE + " > " 
      + lastMinute, null, Calls.DATE + " desc"); 
c.moveToFirst(); 

if (c.getCount() > 0) { 
    int duration = Integer.parseInt(c.getString(c.getColumnIndex(Calls.DURATION))); 
} 

nếu thời gian là> 0 thì sau đó nó gọi được trả lời.

Rõ ràng có các cờ khác mà bạn nên sử dụng để xác định rằng CALL_STATE_IDLE được gọi sau khi thực hiện cuộc gọi.

Hy vọng rằng sẽ giúp và đưa bạn theo cách sửa chữa cho những gì bạn đang cố gắng làm.

+0

Đừng lãng phí thời gian của bạn với giải pháp này. Thời lượng sẽ không bao giờ bằng không. Nó sẽ bao gồm thời gian chờ đợi cho đến khi người đó nhấc điện thoại lên. Cách dễ nhất để xác minh đó là chỉ cần quay số, không có người nhặt nó lên và sau đó chỉ để cho thời gian chờ điện thoại hoặc treo lên chính mình. Bạn sẽ nhận thấy thời lượng trong Nhật ký cuộc gọi sẽ không bằng 0. – AndroidDev

+1

@AndroidDev Vâng tôi đoán sau đó điều đó phụ thuộc vào kiểu điện thoại, bởi vì tôi đã thử nghiệm ở một số điện thoại và một cuộc gọi chưa được trả lời đã cung cấp nhật ký thời lượng 0 giây. – htafoya

Các vấn đề liên quan