2011-05-13 67 views
2

我正在android中構建一個應用程序,當任何電話打入我的手機時它將執行一個操作。我曾嘗試過使用廣播接收器和電話狀態監聽器。但它不起作用。如果我使用活動,那麼電話狀態監聽器運行良好,但它不適用於廣播接收器。我做錯了什麼?請任何機構幫助....如何在android中檢測電話廣播接收機

感謝&問候

+0

發表您的廣播 – ingsaurabh 2011-05-13 10:38:50

+0

我不知道你的代碼的代碼,但我剛纔用這個:http://androidexample.com/Incomming_Phone_Call_Broadcast_Receiver__-_Android_Example/index.php?view=article_discription&aid=61&aaid=86 它使用廣播接收器。注意:我剛剛在Android 4.4.2上試了一下(我知道這是一個老問題,但這可能有助於某人某天) – OmarBizreh 2014-04-15 16:51:53

回答

1

希望這將成爲你的目的,

請檢查了這一點。

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

如果您覺得它有用,請不要忘記將其標記爲答案 – 2011-05-13 10:40:15

+1

沒有任何動作.ANSWER – 2013-05-13 16:48:55

3
<receiver android:name="ClassName"> 
    <intent-filter>    
<action android:name="android.intent.action.PHONE_STATE">/action> 
    </intent-filter> 
</receiver> 

它的工作!

3

以下是來自a Chinese BBS的示例。

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> 
+0

這適用於Pixel XL上的Android 7.1.1。謝謝。 – Billy 2017-02-01 17:15:54

0

我最初經歷了同樣的事情,但後來我將以下權限添加到我的清單中。

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

當然在我的代碼中,我只是在接到電話時顯示烤麪包。 因此,您可能需要添加與您的需求相對應的其他權限。