使用广播接收器捕获来电,但onReceive没有触发?

4

我希望实现一个简单的BroadcastReceiver,当有来电时触发。然而,似乎onReceive从未被触发(我仔细检查了LogCat,没有输出),怎么回事?谢谢。 我的类:

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>

你可以先使用自定义 Intent(可能是你的包名)来测试你的接收器。我认为那会有效果的。然后我们再找出为什么不能捕获 PHONE_STATE Intent 的原因。你正在测试哪个版本的 Android? - dcow
嗨David,谢谢你的建议,让我试试看。我的版本是4.0.3。 - EyeQ Tech
我希望你的“MyPhoneReceiver”属于“tung.le.android.receiver.phone”的相同包。如果不是,你将需要在清单中提供完全限定名称。 - Avinazz
4个回答

2

你可能需要在清单文件的标签中添加android:enabled="true",或者在某个地方(例如自定义的“YourApplication”类)注册它。


1
这个BroadcastReceiver解决方案存在的问题是,它不能触发在通话期间发生的任何呼叫。当我正在与某人通话时,有人给我打电话(我接受了第二个电话),实际上没有任何状态发生改变。电话在之前已经被摘机,并且在我接受第二个电话后仍然保持着摘机状态。
到目前为止,我找到的唯一解决方案是注册一个android.provider.Calls的观察者,然后在每次数据更改后从中获取最新的条目。如果有人知道更好的解决方案,请告诉我。

0

你的项目中至少应该有一个活动。即使你在应用程序启动后立即完成它。它不必做任何事情,但至少在安装后应该启动一次。


0

你是否在代码中注册了你的接收器?如果没有,你需要在manifest.xml文件中注册你的接收器。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接