广播接收器运行一段时间后就停止工作

6
我正在开发一款Android应用程序,它可以响应来电。我已经设置了广播接收器,在清单文件中设置了权限和意图过滤器,大部分时间它都能正常工作。即使我杀掉所有应用程序、重启手机,它仍然可以正常工作。
但是,有时它不会作出反应,而在这种情况下,即使重新启动也不会再次响应。
我已经为此苦苦挣扎一个月了,非常苦恼。我真的需要我的应用程序每次接收到来电时都能作出反应。
我尝试删除所有的代码,只在收到或结束电话时显示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)
        {
        }
    }
  }
}

它在其他设备上也可以重现吗? - AADProgramming
抱歉,我没有其他设备来测试它...在发布之前希望它能正常工作。 - David McEleney
我认为你的代码没有问题。我在我的两个应用程序中完全做同样的事情,它几乎一直工作得很好。你应该注意的一件事是 TelephonyManager.EXTRA_STATE 可能不会总是返回一个值,并且有些设备可能需要在 Intent 过滤器中使用 android:priority,就像这篇帖子中讨论的那样:https://dev59.com/81bUa4cB1Zd3GeqPAqYx - Mike Laren
谢谢,伙计,我会研究一下的...感谢你的帮助! - David McEleney
2个回答

5
我认为我可能解决了这个问题——虽然我是新手,甚至没有使用过安卓手机......
在我的华为手机中,我有一个“受保护的应用程序”选项——这些应用程序不会被关闭。
我查看了几个朋友的安卓手机,但未能找到相同的设置——所以我是否正确地说这是华为特有的功能,弥补了电池不足的缺陷?
有人能确认这是华为特有的问题吗?
David

是的,遇到了同样的问题。 - agamov

0

你可以尝试设置优先级,像这样:

<intent-filter android:priority="1000">

嗨,感谢您的建议...我尝试了那个方法,但仍然没有成功。仍然出现相同的问题... :( - David McEleney

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