我正在开发一款Android应用程序,它可以响应来电。我已经设置了广播接收器,在清单文件中设置了权限和意图过滤器,大部分时间它都能正常工作。即使我杀掉所有应用程序、重启手机,它仍然可以正常工作。
但是,有时它不会作出反应,而在这种情况下,即使重新启动也不会再次响应。
我已经为此苦苦挣扎一个月了,非常苦恼。我真的需要我的应用程序每次接收到来电时都能作出反应。
我尝试删除所有的代码,只在收到或结束电话时显示Toast消息。即使应用程序除此之外什么也不做,行为仍然相同。
我无法在模拟器上复制此问题,我正在使用我的HUAWEI ASCEND Y550进行设备测试。
非常感谢您提供任何帮助,
David
清单文件:
但是,有时它不会作出反应,而在这种情况下,即使重新启动也不会再次响应。
我已经为此苦苦挣扎一个月了,非常苦恼。我真的需要我的应用程序每次接收到来电时都能作出反应。
我尝试删除所有的代码,只在收到或结束电话时显示Toast消息。即使应用程序除此之外什么也不做,行为仍然相同。
我无法在模拟器上复制此问题,我正在使用我的HUAWEI ASCEND Y550进行设备测试。
非常感谢您提供任何帮助,
David
清单文件:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.test.app.receivertest" >
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver android:name=".CallReceiver" android:enabled="true">
<intent-filter>
<action android:name="android.intent.action.PHONE_STATE" />
</intent-filter>
</receiver>
</application>
</manifest>
我的接收器:
public class CallReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
try {
if (context == null && intent == null)
return;
String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE);
String action = intent.getAction();
Toast.makeText(context, action + " " + state, Toast.LENGTH_SHORT).show();
} catch (Exception ex) {
try {
Toast.makeText(context, "Error", Toast.LENGTH_SHORT).show();
}
catch (Exception e)
{
}
}
}
}
TelephonyManager.EXTRA_STATE
可能不会总是返回一个值,并且有些设备可能需要在 Intent 过滤器中使用android:priority
,就像这篇帖子中讨论的那样:https://dev59.com/81bUa4cB1Zd3GeqPAqYx - Mike Laren