2012-04-14 1 views
4

Я хочу реализовать простой BroadcastReceiver, он запускается, когда есть входящий звонок. Тем не менее, кажется, что onReceive никогда не срабатывает (я очень тщательно проверил LogCat, не выводил туда), что было не так? Tks Мой класс:использовать широковещательный приемник для приема входящего вызова, 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

+0

привет Дэвиду, спасибо за ваше предложение, позвольте мне попробовать. Моя версия 4.0.3 –

+0

Надеюсь, ваш «MyPhoneReceiver» принадлежит к тому же пакету, что и «tung.le.android.receiver.phone». Если нет, вам нужно будет указать полное имя в манифесте. – Avinazz

ответ

5

может это руководство может решить вашу проблему http://www.tutorialforandroid.com/2009/01/get-phone-state-when-someone-is-calling_22.html

+0

Tks Ganesh, разница между тем, что в вашей ссылке есть, что есть активная деятельность, у меня нет никого. Во всяком случае, это действительно полезная ссылка, большие пальцы! –

+1

Ваш учебник добавляет нового слушателя каждый раз, когда кто-то звонит, поэтому после третьего вызова, например, onCallStateChanged вызывается 4 раза –

0

Вы регистрации вашего приемника внутри кода ??. Если нет, вам придется регистрировать получателя в файле manifest.xml.

2

Возможно, вам необходимо добавить android: enabled = "true" в ваш тег в манифесте, или вам нужно зарегистрировать его где-нибудь (например, пользовательский класс «YourApplication»).

1

проблема, с которой я столкнулся с этим решением BroadcastReceiver, заключается в том, что он не может вызывать вызовы, которые происходят во время активного вызова. когда я разговариваю с человеком по телефону, и кто-то называет меня на другой линии (и я принимаю этот второй звонок), на самом деле нет состояния, которое изменилось. телефон был отложен до этого, и он остается отлученным, когда я принимаю второй звонок.

Единственное решение, которое я нашел до сих пор, - зарегистрировать наблюдателя для android.provider.Calls, а затем получить самую новую запись после него после каждого изменения данных. если кто-то знает лучшее решение, пожалуйста, дайте мне знать.

0

В вашем проекте должно быть как минимум одно мероприятие. Даже если вы закончите его, как только начнется ваше приложение. Он не должен ничего делать, но он должен запускаться как минимум один раз после установки.