我的应用使用AlarmManager和BroadcastReceiver类安排警报。
如果应用程序正在运行或后台运行,它会起作用,但如果它被完全杀死,则似乎事件未被触发。
接收器调用一个IntentService,它使用一些参数调用Maps REST API,然后在通知中显示格式化的输出。该服务在不使用AsyncTask的情况下执行此操作,因为它已经是后台线程。
此外,如果应用程序不在Debug中,是否有一种检查Receiver或Service是否被调用的好方法?
答案 0 :(得分:2)
如果您的BroadcastReceiver
必须收到意图,即使应用被杀,您也应该通过AndroidManifest.xml
注册到所需的意图。
这样,BroadcastReceiver
将独立于您的应用生活周期。
这样,只要某个应用广播了所需的意图,Android就会自动通知您BroadcastReceiver
<强>的AndroidManifest.xml 强>
<?xml version="1.0" encoding="utf-8"?>
<manifest>
...
<application>
....
<receiver android:name=".MyCustomBroadcastReceiver">
<intent-filter>
<action android:name="com.example.mytestapp.MY_CUSTOM_INTENT" />
</intent-filter>
</receiver>
</application>
</manifest>
<强> MyCustomBroadcastReceiver.java 强>
public class MyCustomBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if(intent != null) {
String action = intent.getAction();
if(action != null) {
if(action.equals("com.example.mytestapp.MY_CUSTOM_INTENT")) {
// DO YOUR STUFF
}
}
}
}
}
创建警报意图
然后,在创建闹钟管理器时,请使用以下代码:
Intent intentForAlarmManager = new Intent("com.example.mytestapp.MY_CUSTOM_INTENT");
PendingIntent.getBroadcast(/* CONTEXT */, /* ID */ , intentForAlarmManager, /* FLAGS */));