2011-03-31 39 views
25

Tôi có một yêu cầu trong đó tôi muốn phát hiện hai loại sự kiện liên quan đến các cuộc gọi trong AndroidPhát hiện cuộc gọi đi và gọi sự kiện gác máy trong android

  1. Bất cứ khi nào một cuộc gọi đi được thực hiện, ứng dụng của tôi sẽ nhận biết điều này cùng với việc gọi số
  2. Khi cuộc gọi được treo lên (do thành công/thất bại), ứng dụng của tôi sẽ nhận biết điều này cùng với các lý do của gác máy

đây có phải là có thể trong Android?

Trả lời

24

Bạn nên tạo một BroadcastReceiver:

public class CallReciever extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 

     if (intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(
       TelephonyManager.EXTRA_STATE_RINGING)) { 

       // Phone number 
       String incomingNumber = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER); 

       // Ringing state 
       // This code will execute when the phone has an incoming call 
     } else if (intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(
       TelephonyManager.EXTRA_STATE_IDLE) 
       || intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(
         TelephonyManager.EXTRA_STATE_OFFHOOK)) { 

      // This code will execute when the call is answered or disconnected 
     } 

    } 
} 

Bạn nên đăng ký cho bạn pplication để lắng nghe những ý đồ trong biểu hiện:

<receiver android:name=".CallReciever" > 
      <intent-filter> 
       <action android:name="android.intent.action.PHONE_STATE" /> 
      </intent-filter> 
</receiver> 
+0

Cảm ơn mã mẫu Có cách nào để chụp cuộc gọi đi cũng tương tự như cách cuộc gọi đến được chụp không? – user669231

+0

@ user669231 Có, bạn nên thay đổi séc trong trạng thái nếu. Bạn có thể xem chủ đề này: http://stackoverflow.com/questions/2668445/detect-outgoing-calls-and-problem-with-a-real-device – vendor

+1

Hoạt động như một sự quyến rũ. Ngoài ra, bạn phải khai báo quyền sau trong tệp manifest.xml: nếu không cách này sẽ không hoạt động. Xem API của TelephonyManager class: http://developer.android.com/reference/android/telephony/TelephonyManager.html – qupera

4

Bạn cần phải tạo một máy thu cho những hành động ý định sau đây:

  1. Outgoing cuộc gọi - ACTION_NEW_OUTGOING_CALL
  2. Gọi gác máy - ACTION_PHONE_STATE_CHANGED
+0

Bạn có thể cho tôi một ví dụ cho rằng, nhu cầu của tôi cho gọi tặng –

+0

Các giải pháp mô tả ở trên đã làm việc một cách hoàn hảo cho me.But người nhận đang nhận tình trạng tương tự nhiều lần. Làm thế nào chúng ta có thể giải quyết điều này ?. Có anyway để phát hiện id của nhận ý định hoặc một số cách khác? –

8

Có một giải pháp đơn giản chỉ sử dụng TelephonyManager và PhoneStateListener.You đừng thậm chí có đăng ký một BroadcastReceiver.

public class MyPhoneStateListener extends PhoneStateListener { 

    @Override 
    public void onCallStateChanged(int state, String incomingNumber) { 
     switch (state) { 
      //Hangup 
      case TelephonyManager.CALL_STATE_IDLE: 
       break; 
      //Outgoing 
      case TelephonyManager.CALL_STATE_OFFHOOK: 
       break; 
      //Incoming 
      case TelephonyManager.CALL_STATE_RINGING: 
       break; 
     } 
    } 
} 

Và để đăng ký nó:

public static void registerListener(Context context) { 
    ((TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE)).listen(new MyPhoneStateListener(), 
      PhoneStateListener.LISTEN_CALL_STATE); 
} 
+0

tính năng này không hoạt động đối với các cuộc gọi đi. – ralphgabb

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