Я застрял на синхронизации данных в реальном времени между двумя приложениями только на устройствах Oreo +, как если бы другой пользователь входил в приложение, то это должно быть немедленно произведено в другом приложении и также должно измениться в другом приложении (например, Facebook и FacebookMessenger. Если вы выходите из Facebook, он автоматически выходит из FB Messenger или если вы входите в Facebook, то он автоматически входит в FB Messenger и наоборот) Я создал широковещательный приемник в обоих приложениях, и если логин меняется из одного приложения, то отправляю широковещательные сообщения.в другое приложение, где оно будет выполнять остальную часть работы.
Я нашел его в Google и нашел несколько способов.
Я прочитал этот документ
https://developer.android.com/about/versions/oreo/background
- Мы опубликовали APK с разной подписью, поэтому не можем предоставить одно и то же разрешение на подпись получателю.
Уже прошли по этим ссылкам
Приемник вещания не работает в oreo
Oreo: Приемник вещания не работает
Зарегистрированный в манифесте широковещательный приемник не вызывается в Android Oreo
Приемник прекратил прием в Oreo
Мысль реализовать этоно ..
1) Создать службу переднего плана и зарегистрировать в ней получателя.- Таким образом, мне нужно одно уведомление, которое требуется для запуска службы переднего плана.и я не могу этого сделать. Я не могу показать ненужные уведомления.
2) Запланированное задание: - Я не могу использовать его, так как мне нужно постоянно запускать службу в фоновом режиме.
То, что я пробовал до сих пор:
1) Регистрация получателя в классе приложения: это не работает после того, как приложение уничтожено, потому что контекст был убит.
2)Регистрация получателя в службе уведомлений FireBase, но он инициализируется только при получении уведомления.
Код:
Регистрация получателя в классе приложений
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>
Служба намерений будет запущена получателем
<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 для связи с приложением?это работает, если какое-либо приложение бездействует или не работает в фоновом режиме?