2015-11-23 38 views
0

接收機在manifest.xml的定義:我的廣播接收器無法接收器的手機狀態變化

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

和接收器很簡單:

public class PhoneStateBroadcastReceiver extends BroadcastReceiver{ 
      ... 
      public void onReceive(){ 
       Log.d("receiver","called"); 
      } 
    } 

我更換意向過濾器的我自己定義的自定義過濾器,並使用「sendbroadcast()」發送廣播,它運行良好,但無法接收電話狀態廣播,問題在哪裏? 感謝

PS:

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> 
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" /> 

這是我的許可,並且測試是在兩個仿真器在Android 6.0。

+0

,我還增加了讀取手機狀態權限: –

回答

0

下面是一個例子,如何做到這一點:

public class PhoneStatReceiver extends BroadcastReceiver{   

     private static final String TAG = "PhoneStatReceiver"; 

     private static boolean incomingFlag = false; 

     private static String incoming_number = null; 

     @Override 
     public void onReceive(Context context, Intent intent) { 
      if(intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL)){       

      incomingFlag = false; 

      String phoneNumber = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);   

      Log.i(TAG, "call OUT:"+phoneNumber);       

      } 
      else{       
       TelephonyManager tm =(TelephonyManager)context.getSystemService(Service.TELEPHONY_SERVICE);             

       switch (tm.getCallState()) { 

         case TelephonyManager.CALL_STATE_RINGING: 

           incomingFlag = true; 

           incoming_number = intent.getStringExtra("incoming_number"); 

           Log.i(TAG, "RINGING :"+ incoming_number); 

           break; 

         case TelephonyManager.CALL_STATE_OFFHOOK:         

           if(incomingFlag){ 

             Log.i(TAG, "incoming ACCEPT :"+ incoming_number); 

           } 

           break; 
         case TelephonyManager.CALL_STATE_IDLE:         

           if(incomingFlag){ 

             Log.i(TAG, "incoming IDLE");         

           } 

           break; 

         } 

       } 

     } 

} 

註冊在你AndroidManifest.xml

<receiver android:name=".filter.PhoneStatReceiver"> 

      <intent-filter> 

       <action android:name="android.intent.action.PHONE_STATE"/>   

       <action android:name="android.intent.action.NEW_OUTGOING_CALL" /> 

      </intent-filter> 

</receiver> 

<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission> 

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

我用你的代碼,但仍不能得到onReceiver()被調用,似乎系統無法發送手機狀態變化的廣播,我猜@Archit Goel –