我有通过报警管理器设置的关键提醒(它的功能与闹钟应用程序相同).
以前我的Android Manifest中有以下内容:
<receiver android:name="com.example.app.AlarmReceiver" >
<intent-filter>
<action android:name="${packageName}.alarm.action.trigger"/>
</intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)
广播接收器:
public class AlarmReceiver extends BroadcastReceiver {
@Override public void onReceive(
final Context context,
final Intent intent) {
// WAKE LOCK
// BUILD NOTIFICATION etc...
}
}
Run Code Online (Sandbox Code Playgroud)
如何设置警报:
final PendingIntent operation = PendingIntent.getBroadcast(
mContext,
requestCode,
intent,
PendingIntent.FLAG_CANCEL_CURRENT);
if (PlatformUtils.hasMarshmallow()) {
alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, triggerAtMillis, operation);
} else {
alarmManager.setExact(AlarmManager.RTC_WAKEUP, triggerAtMillis, operation);
}
}
Run Code Online (Sandbox Code Playgroud)
使用Android 8.0,我不能再使用Manifest中定义的隐式广播.那很好,给出的替代方法是手动注册它,如下所示:
final BroadcastReceiver receiver = new AlarmReceiver();
final IntentFilter intentFilter = new IntentFilter(ALARM_RECEIVER_INTENT_TRIGGER);
context.registerReceiver(receiver, intentFilter);
Run Code Online (Sandbox Code Playgroud)
这对我来说似乎不合逻辑.
警报接收器将与上下文的生命周期相关联.当由于内存压力或设备重启而导致应用程序被杀死时,这会导致问题.我每次都需要触发警报,因为它们对用户的健康至关重要. …
我想为一套应用程序创建一个中央应用程序.这套应用程序由我们自己和第三方供应商开发.我们想知道实现以下功能的最佳方法
1)从中央应用程序启动子应用程序
子应用程序安装在设备中,子应用程序的包名称由供应商提供.我们考虑使用显式意图来调用子应用程序.从中央应用程序启动子应用程序的任何其他方法.
2)中央和子应用程序之间的通信.
子应用程序没有通信层.来自子应用程序的每个通信都应通过中央应用程序发送到服务器.通信包括GET,POST,PUT请求.我们考虑使用Broad Cast接收器将有效载荷发送到中央应用程序.中央应用程序将依次将有效负载发送到服务器.但广播接收器对Android Oreo的限制将使这种解决方案不可行.
3)当用户在中央应用程序中执行注销时,从中央应用程序启动关闭子应用程序.
我们正在考虑使用作为ActivityManager一部分提供的killBackgroundProcesses()API来终止进程.杀死进程的任何其他解决方案?使用此API杀死进程有任何负面影响吗?
4)将事件从中央应用程序发布到子应用程序以进行消费.
我们想到广播接收器将事件从中央发布到子应用程序.但如上所述,Android Oreo上的广播接收器限制将使这种解决方案不可行.任何替代方案?