#android #xamarin #service #broadcastreceiver #alarmmanager
#Android #xamarin #Обслуживание #broadcastreceiver #alarmmanager
Вопрос:
Локальное уведомление не работает, когда приложение не запущено (т.Е. Не на переднем плане / в фоновом режиме)
Мое приложение создаст кучу «напоминаний». Для простоты каждое напоминание запланировано на определенное время каждый день.
Это Xamarin Android (НЕ ФОРМЫ).
Если приложение находится на переднем плане, я просто показываю предупреждение. (РАБОТАЕТ) Если приложение работает в фоновом режиме, я создаю локальное уведомление. (РАБОТАЕТ)
В приложении закрыто (т.Е. Не запущено, удалено!) Я не получаю «напоминания». (НЕ РАБОТАЕТ) Если устройство перезагружено, я хочу, чтобы напоминания все равно приходили, даже если приложение еще не запущено.
Я прочитал несколько сообщений, в которых говорится о необходимости редактирования манифеста, но это не помогло Я прочитал несколько сообщений, в которых предлагается использовать сервис, но я не могу понять, как запланировать / перенести «напоминания».
Поток приложений. Из пользовательского интерфейса, когда напоминания сохраняются.
Intent intent101 = new Intent(MainActivity.getInstance(), typeof(NotifcationReceiver));
intent101.SetAction($"{_notifcationCount}");
PendingIntent op101 = PendingIntent.GetBroadcast(MainActivity.getInstance(), intent101, PendingIntentFlags.UpdateCurrent);
AlarmManager alarmManager = (AlarmManager)MainActivity.getInstance().GetSystemService(Android.Content.Context.AlarmService);
alarmManager.SetRepeating(AlarmType.RtcWakeup, time101, AlarmManager.IntervalDay, op101);
Мой BroadcastReceiver (NotifcationReceiver)
[BroadcastReceiver(Name = "com.attendbehavior.attendpc.NotifcationReceiver", Enabled = true)]
[IntentFilter(new[] { Intent.ActionBootCompleted })]
public class NotifcationReceiver : BroadcastReceiver
{
public override void OnReceive(Context context, Intent intent)
{
// If the app is in foreground show an alert
// Else send a local notification.
}
}
И мой AndroidManifest.xml есть
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="101" android:versionName="1.01" package="com.attendbehavior.attendpc" android:installLocation="auto">
<uses-sdk android:minSdkVersion="26" android:targetSdkVersion="28" />
<application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme">
<receiver android:name="com.attendbehavior.attendpc.NotifcationReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
</application>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="com.android.alarm.permission.SET_ALARM" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
</manifest>
ПРИМЕЧАНИЕ. Я попытался добавить их комбинации в свой приемник, и, похоже, они заставляют то, что у меня работает, перестать работать.
android:process=":remote"
android:enabled="true"
android:exported="true"
Комментарии:
1. Привет, если приложение не запущено (т.Е. Не на переднем плане / в фоновом режиме), локальное уведомление не может быть вызвано. Вы можете использовать службы переднего плана для отображения локальных уведомлений, даже если приложение не запущено.
2. Спасибо. Действительно пришел к тому же выводу. В итоге я использовал уведомления на основе сервера (Firebase). Не идеально (автономная поддержка), но намного чище.
3. Хорошо, если вы решили эту проблему, вы можете обновить ее как новую. Тогда другие, у кого такая же проблема, узнают решение.
Ответ №1:
Итак, я пришел к такому выводу. Надеюсь, это поможет другим.
-
Я не смог заставить локальные уведомления работать с убитым приложением и без службы переднего плана.
-
Служба переднего плана работает нормально, но действительно раздражает конечных пользователей. (I.M.O.)
-
Уведомления сервера (Firebase) — это то, как я закончил.
Комментарии:
1. Привет, галд, ты обновил его в качестве ответа. Кроме того, не забудьте отметить его, когда у вас будет время, это также будет полезно для других, которые сталкиваются с той же проблемой.