【发布时间】:2018-11-19 07:23:58
【问题描述】:
我只能在 Oreo+ 设备上同步 2 个应用程序之间的实时数据,例如,如果不同的用户登录到该应用程序,那么它应该立即在其他应用程序中生效,并且它也应该在其他应用程序中发生变化。(例如 Facebook 和 Facebook Messenger。如果您从 Facebook 注销,它将自动从 FB Messenger 注销,或者如果您登录 Facebook,那么它将自动登录 FB Messenger,反之亦然)我在两个应用程序中创建了广播接收器,如果从一个应用程序更改登录,则发送广播到它将完成其余工作的其他应用程序。
我用谷歌搜索了一下,找到了一些方法。
我已阅读此文档
https://developer.android.com/about/versions/oreo/background
- 我们发布了不同签名的 APK,因此无法在接收者中提供相同的签名权限。
已经浏览了这个链接
Broadcast receiver not working in oreo
Oreo: Broadcast receiver Not working
Broadcast receiver registered in manifest not getting called in Android Oreo
Receiver stopped receiving in Oreo
想过以这种方式实现,但是..
1) 创建前台服务并将接收器注册到其中。 - 这样,我需要一个运行前台服务所需的通知。我不能那样做。我不能显示不必要的通知。
2) 预定作业: - 我无法使用它,因为我需要一直在后台运行服务。
到目前为止我所尝试的:
1) 在应用程序类中注册接收器:应用程序被杀死后这不起作用,因为上下文已被杀死。
2) 在FireBase Notification服务中注册receiver,但只有在通知到达时才初始化。
代码:
在应用程序类中注册接收器
ASampleActionReceiver mASampleActionReceiver = new ASampleActionReceiver();
IntentFilter filterAction = new IntentFilter();
filterAction.addAction("com.sample.example.receiver.operation");
registerReceiver(mASampleActionReceiver, filterAction);
在清单中
<receiver android:name=".receiver.ASampleActionReceiver">
<intent-filter>
<action android:name="com.sample.example.receiver.operation" />
</intent-filter>
</receiver>
Intent 服务将由接收者启动
<service
android:name="com.sample.example.services.SampleOperationService"
android:enabled="true"
android:exported="false" />
还有一个接收器 ASampleActionReceiver.java
public class ASampleActionReceiver extends BroadcastReceiver {
Context mContext;
@Override
public void onReceive(Context context, Intent intent) {
mContext = context;
AdoddleLog.d("LOG", intent.getExtras().getString("loginData"));
Intent mIntent = new Intent(mContext, SampleOperationService.class);
mIntent.putExtras(intent);
mContext.startService(mIntent);
}
}
有人可以提出更好的解决方案吗?
我可以使用 AIDL 进行应用通信吗?如果任何一个应用程序空闲或没有在后台运行,它会起作用吗?
【问题讨论】:
-
有什么解决办法吗?面临同样的问题....
-
@Erum,我已经发布了详细的答案。请调查一下。
标签: android broadcastreceiver android-service android-8.0-oreo android-intentservice