我想实现一个简单的BroadcastReceiver,当有来电时它会被触发 . 但是,似乎onReceive永远不会被触发(我仔细检查了LogCat,没有输出),出了什么问题? Tks我的 class :
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>
5 回答
您是否在代码中注册了Receiver?如果不是,您将必须在manifest.xml中注册您的接收器 .
您应该至少在项目中有一个活动 . 即使你的应用程序启动就完成了它 . 它不需要做任何事情,但它应该在安装后至少启动一次 .
也许这个教程可以解决你的问题http://www.tutorialforandroid.com/2009/01/get-phone-state-when-someone-is-calling_22.html
您可能需要将 android:enabled="true" 添加到清单中的标记,或者您必须在某处注册它(例如自定义"YourApplication"类) .
我使用此BroadcastReceiver解决方案遇到的问题是,它无法触发在活动呼叫期间发生的任何呼叫 . 当我和一个人在电话上交谈而有人在另一条线路上打电话给我时(我接受第二次电话),实际上没有任何状态发生变化 . 之前电话被摘机了,当我接到第二个电话时它仍然被摘机 .
到目前为止我找到的唯一解决方案是注册android.provider.Calls的观察者,然后在每次数据更改后从中获取最新的条目 . 如果有人知道更好的解决方案,请告诉我 .