2

мое уведомление не работает на API 23.Уведомление не работает на API 23

Мой Notfication работает с API успешным 16 до 22

100 для calstd/calmin является номером по умолчанию.

if ("android.intent.action.BOOT_COMPLETED".equals(intent.getAction())) { 
     if(calstd==100||calmin==100){ 
      cancelAlarm(); 
     } 
     else { 
      onTimeSet(calstd, calmin); 
     } 

     pendingIntent = PendingIntent.getActivity(context, 0, new Intent(context, mainsite.class), 0); 
     nm1 = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 
     notif = new Notification.Builder(context); 
     uri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 

     notif.setContentTitle("Remind Me"); 
     notif.setContentText("Vergiss deine Pille nicht :)"); 
     notif.setSmallIcon(R.drawable.ic_launcher); 
     notif.setSound(uri); 
     notif.setAutoCancel(true); 
     notif.setContentIntent(pendingIntent); 
     nm1.notify(15, notif.build()); 

... 
} 

public void setAlarm(Calendar targetCal) { 

    intent = new Intent(contexta, AlarmReceiver.class); 
    pendingIntent = PendingIntent.getBroadcast(contexta, RQS_1, intent, 0); 
    alarmManager = (AlarmManager) contexta.getSystemService(Context.ALARM_SERVICE); 

    if (Build.VERSION.SDK_INT >= 19) 
     alarmManager.setExact(AlarmManager.RTC_WAKEUP, targetCal.getTimeInMillis(), pendingIntent); 
    else if (Build.VERSION.SDK_INT >= 16) 
     alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, targetCal.getTimeInMillis(), 1 * 1000 * 60 * 60 * 24, pendingIntent); 
} 

Manifest:

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 
<receiver android:process=":remote" android:name=".Alarm"/> 

    <receiver android:name="com.victoriaremindme.AlarmReceiver"> 
     <intent-filter> 
      <action android:name="android.intent.action.BOOT_COMPLETED" /> 
     </intent-filter> 
    </receiver> 

Ее не работает после закрытия приложения. Я не могу найти проблему.

+0

где корреляция между alarmManager вызовом и BootBroadcastReceiver? ваш вопрос неясен. – F43nd1r

+0

Является ли соотношение между вызовом alarmManager и BootBroadcastReceiver важным для этой проблемы? Я надеялся, что в API23 что-то изменилось, что я не могу найти ... – Lala20

+0

В других API-интерфейсах мое приложение работает нормально. – Lala20

ответ

2

Для API 23 и выше вы можете использовать setAndAllowWhileIdle()

Так изменить код

if (Build.VERSION.SDK_INT >= 23) 
      alarmManager. setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, targetCal.getTimeInMillis(), pendingIntent); 

    else if (Build.VERSION.SDK_INT >= 19) 
     alarmManager.setExact(AlarmManager.RTC_WAKEUP, targetCal.getTimeInMillis(), pendingIntent); 

    else if (Build.VERSION.SDK_INT >= 16) 
      alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, targetCal.getTimeInMillis(), 1 * 1000 * 60 * 60 * 24, pendingIntent); 

Проверьте документацию .

Надеюсь, это поможет.

+0

Большое спасибо. :) Я постараюсь с точным: 'alarmManager.setExactAndAllowWhileIdle (AlarmManager.RTC_WAKEUP, targetCal.getTimeInMillis(), pendingIntent);' – Lala20

+0

setExactAndAllowWhileIdle: можно ли использовать этот метод для повторного сигнала тревоги для определенного времени (например, 1 минута)? –

1

Разница с 23 - это разрешения времени выполнения. Вам необходимо просмотреть ваше приложение для опасных разрешений. Поскольку новое api означает, что приложение не будет запускать много задач, если разрешения времени выполнения не будут управляться, но либо молча игнорируют код, требующий разрешения, либо сбой.

Requesting Permissions at Run Time

Начиная с Android 6.0 (уровень API 23), пользователи предоставлять разрешение приложения в то время как приложение работает, не при установке приложения.

Normal and Dangerous Permissions

  • Нормальные разрешения охватывают области, где ваше приложение должно получить доступ к данным или ресурсам за пределами изолированной программной среды в приложения, но там, где есть очень мало риска для личной жизни пользователя или работа других приложений , Например, разрешение на установку часового пояса является нормальным разрешением. Если приложение заявляет, что ему требуется нормальное разрешение, система автоматически предоставляет разрешение на приложение. Полный список текущих нормальных разрешений см. В разделе «Нормальные разрешения».

  • Опасные разрешения охватывают области, где приложение хочет данные или ресурсы, которые связаны с личной информацией пользователя, или могут потенциально повлиять на сохраненные данные пользователя или на работу других приложений. Например, способность читать контакты пользователя является опасным разрешением. Если приложение заявляет, что ему требуется опасное разрешение, пользователь должен явно предоставить разрешение на приложение.

Таблица 1. Опасные разрешения и группы разрешений.

enter image description here

Смежные вопросы