2012-04-14 85 views
4

我想實現一個簡單的BroadcastReceiver,當有來電時它會被觸發。然而,似乎onreceive從來沒有觸發(我非常仔細地檢查了LogCat,沒有輸出),什麼錯了? TKS 我的類:使用Broadcast Receiver來接聽來電,onReceive未觸發?

public class MyPhoneReceiver extends BroadcastReceiver { 
    private static final String TAG = "DEBUG"; 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     Log.e(TAG, "Test loggiiiiiiiiiiiiiiiiiiiiiiiiing!"); 

    } 

} 

我的清單文件:

<?xml version="1.0" encoding="utf-8"?> 
    <manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="tung.le.android.receiver.phone" 
    android:versionCode="1" 
    android:versionName="1.0" > 


    <application 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" > 
     <receiver android:name=".MyPhoneReceiver" > 
      <intent-filter> 
       <action android:name="android.intent.action.PHONE_STATE" > 
       </action> 

      </intent-filter> 
     </receiver> 

    </application> 
    <uses-sdk android:minSdkVersion="15" /> 
    <uses-permission android:name="android.permission.READ_PHONE_STATE" > 
    </uses-permission> 

</manifest> 
+0

您可能首先使用自定義意圖(也許是您的包名稱)測試您的接收器。我認爲這將起作用。然後,我們將弄清爲什麼PHONE_STATE意圖未被捕獲。你在測試什麼版本的Android? – dcow 2012-04-14 03:52:29

+0

嗨大衛,你的建議tks,讓我試試。我的版本是4.0.3 – 2012-04-14 13:12:03

+0

我希望你的「MyPhoneReceiver」與「tung.le.android.receiver.phone」屬於同一個包。如果沒有,您將不得不在清單中提及完全限定的名稱。 – Avinazz 2013-01-26 05:21:22

回答

5
+0

Tks Ganesh,你的鏈接中有什麼是有活動的活動之間的區別,在我的沒有。無論如何,這是一個非常有用的鏈接,豎起大拇指! – 2012-04-14 13:41:30

+1

您的教程每次有人打電話時都會添加一個新的偵聽器,因此例如在第三次調用之後,onCallStateChanged被調用4次 – 2014-10-25 22:18:20

0

你註冊代碼??裏面你的接收機。如果沒有,您將不得不在manifest.xml中註冊您的接收器。

2

您可能需要在清單中爲您的標記添加android:enabled =「true」,或者您必須在某個位置註冊它(例如自定義「YourApplication」類)。

1

這個BroadcastReceiver解決方案遇到的問題是,它無法觸發在通話過程中發生的任何呼叫。當我在電話上與某人通話時,有人打電話給我(而我接受第二個電話)時,實際上沒有任何狀態發生變化。該電話被摘機,當我接受第二個電話時,它仍然摘機。

我到目前爲止發現的唯一解決方案是註冊android.provider.Calls的觀察者,然後在每次數據更改後從它獲取最新的條目。如果有人知道更好的解決方案,請告訴我。

0

您的項目至少應該有一項活動。即使您的應用程序啓動後立即完成。它不需要做任何事情,但它應該在安裝後至少啓動一次。

相關問題