相关疑难解决方法(0)

带有广播接收器和隐式广播禁令的Android 8.0 Oreo AlarmManager

我有通过报警管理器设置的关键提醒(它的功能与闹钟应用程序相同).

以前我的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. 警报接收器将与上下文的生命周期相关联.当由于内存压力或设备重启而导致应用程序被杀死时,这会导致问题.我每次都需要触发警报,因为它们对用户的健康至关重要. …

android broadcastreceiver android-broadcast

14
推荐指数
1
解决办法
1万
查看次数

两种应用程序之间通信的最佳方式

我想为一套应用程序创建一个中央应用程序.这套应用程序由我们自己和第三方供应商开发.我们想知道实现以下功能的最佳方法

1)从中央应用程序启动子应用程序

子应用程序安装在设备中,子应用程序的包名称由供应商提供.我们考虑使用显式意图来调用子应用程序.从中央应用程序启动子应用程序的任何其他方法.

2)中央和子应用程序之间的通信.

子应用程序没有通信层.来自子应用程序的每个通信都应通过中央应用程序发送到服务器.通信包括GET,POST,PUT请求.我们考虑使用Broad Cast接收器将有效载荷发送到中央应用程序.中央应用程序将依次将有效负载发送到服务器.但广播接收器对Android Oreo的限制将使这种解决方案不可行.

3)当用户在中央应用程序中执行注销时,从中央应用程序启动关闭子应用程序.

我们正在考虑使用作为ActivityManager一部分提供的killBackgroundProcesses()API来终止进程.杀死进程的任何其他解决方案?使用此API杀死进程有任何负面影响吗?

4)将事件从中央应用程序发布到子应用程序以进行消费.

我们想到广播接收器将事件从中央发布到子应用程序.但如上所述,Android Oreo上的广播接收器限制将使这种解决方案不可行.任何替代方案?

android

9
推荐指数
1
解决办法
2426
查看次数