2012-03-05 20 views
5

Tôi đang cố gắng xác định và chuyển sang hoạt động sau khi một cuộc gọi đi được bắt đầu. Tôi đã sử dụng ACTION_NEW_OUTGOING_CALL trong bộ lọc Mục đích. Tuy nhiên làm thế nào csn tôi xác định rằng cuộc gọi được gửi đi. Tôi đã làm điều này cho một cuộc gọi đến (như được thấy dưới đây) nhưng những gì tôi có thể sử dụng thay vì EXTRA_STATE_RINGING.Làm thế nào để bạn nhận được cuộc gọi đi trong Broadcastreceiver

public class OutgoingBroadcastReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE); 
     if (state.equals(TelephonyManager.EXTRA_STATE_RINGING)) 
     { 
      Intent i = new Intent(context, OutgoingCallScreenDisplay.class); 
      i.putExtras(intent); 
      i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      context.startActivity(i); 
     } 
    } 
} 

enter image description here

Trả lời

4
public class OutgoingBroadcastReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     if (intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL)) { 
      // If it is to call (outgoing) 
      Intent i = new Intent(context, OutgoingCallScreenDisplay.class); 
      i.putExtras(intent); 
      i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      context.startActivity(i); 
     } 
    } 
} 

ACTION_NEW_OUTGOING_CALL là một khai báo liên tục trong lớp Intent, không phải trong TelephonyManager. Khi một cuộc gọi đi xuất hiện, thì hệ thống sẽ phát sóng ý định với hằng số này. Nếu bạn thực sự muốn bắt một cuộc gọi đi bằng cách sử dụng TelephonyManager sau đó làm điều này:

TelephonyManager tm = (TelephonyManager)context.getSystemService(Service.TELEPHONY_SERVICE); 
tm.listen(listener, PhoneStateListener.LISTEN_CALL_STATE); 
PhoneStateListener listener = new PhoneStateListener() { 
    @Override 
    public void onCallStateChanged(int state, String incomingNumber) { 
     // TODO Auto-generated method stub 

     super.onCallStateChanged(state, incomingNumber); 
     switch(state) { 
      case TelephonyManager.CALL_STATE_IDLE: 
       break; 
      case TelephonyManager.CALL_STATE_OFFHOOK: 
       if(incomingNumber==null) { 
        //outgoing call 
       } else { 
        //incoming call 
       } 
       break; 
      case TelephonyManager.CALL_STATE_RINGING: 
       if(incomingNumber==null) { 
        //outgoing call 
       } else { 
        //incoming call 
       } 
       break; 
     } 
    } 
}; 
+0

Nhờ nó làm việc tốt! Nhưng bây giờ tôi nhận được màn hình mặc định từ hệ thống (xem ảnh chụp màn hình ở trên) và chỉ sau khi tôi nhận được hoạt động tùy chỉnh của mình. Làm cách nào để ẩn/ghi đè màn hình bằng hoạt động của tôi? – user1163234

+0

@ nếu bạn muốn thay thế màn hình này thì có thể chỉ bằng cách sử dụng tập tin điện thoại AIDL .. –

+0

OK Tanks một lần nữa! Bất kỳ ví dụ tốt? – user1163234

3

Phát hiện ra sự kiện cuộc gọi điện thoại

1. Tạo OutgoingCallBroadcastReceiver

public class OutgoingCallReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     Log.d(OutgoingCallReceiver.class.getSimpleName(), intent.toString()); 
     Toast.makeText(context, "Outgoing call catched!", Toast.LENGTH_LONG).show(); 
     //TODO: Handle outgoing call event here 
    } 
} 

2. Đăng ký OutgoingCallBroadcastNhận trong AndroidManifest.xml

<receiver android:name=".OutgoingCallReceiver" > 
    <intent-filter> 
     <action android:name="android.intent.action.NEW_OUTGOING_CALL" /> 
    </intent-filter> 
</receiver> 

3. Add phép trong AndroidManifest.xml

<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/> 
+0

sự cho phép là gì? Tôi đã tìm cách lấy lại cuộc gọi đi mà không có nó. –

+0

vui lòng xem bước 3. – Satya

+0

@Satya Nó không có tác dụng với tôi. Đã thử nghiệm trên ASUS Zenfone 2 với Android 6.0.1 –

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