Приложение локальных уведомлений Xamarin Android не запущено

#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:

Итак, я пришел к такому выводу. Надеюсь, это поможет другим.

  1. Я не смог заставить локальные уведомления работать с убитым приложением и без службы переднего плана.

  2. Служба переднего плана работает нормально, но действительно раздражает конечных пользователей. (I.M.O.)

  3. Уведомления сервера (Firebase) — это то, как я закончил.

Комментарии:

1. Привет, галд, ты обновил его в качестве ответа. Кроме того, не забудьте отметить его, когда у вас будет время, это также будет полезно для других, которые сталкиваются с той же проблемой.