Android 不适用于API 23的通知
我的通知不适用于API 23 从API 16到22,我的通知工作成功 calstd/calmin的100是默认数字Android 不适用于API 23的通知,android,alarmmanager,android-notifications,android-6.0-marshmallow,Android,Alarmmanager,Android Notifications,Android 6.0 Marshmallow,我的通知不适用于API 23 从API 16到22,我的通知工作成功 calstd/calmin的100是默认数字 if ("android.intent.action.BOOT_COMPLETED".equals(intent.getAction())) { if(calstd==100||calmin==100){ cancelAlarm(); } else { onTimeSet(calstd
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);
}
舱单:
<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>
它在关闭应用程序后不工作。我找不到问题。对于
API 23
及以上版本,您可以使用setandallowhileidle()
所以把你的代码改成
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);
检查文档
希望这有帮助。23的区别在于运行时权限。您需要查看应用程序的危险权限。因为新的api意味着,如果运行时权限未得到管理,应用程序将不会运行许多任务,而是会自动忽略需要该权限的代码,或者崩溃 从Android 6.0(API级别23)开始,用户在应用程序运行时授予应用程序权限,而不是在安装应用程序时
- 正常权限包括应用程序需要访问应用程序沙箱之外的数据或资源,但对用户隐私或其他应用程序的操作风险很小的区域。例如,设置时区的权限是正常权限。如果应用程序声明它需要正常权限,系统会自动将该权限授予该应用程序。有关当前正常权限的完整列表,请参阅正常权限
- 危险权限包括应用程序需要涉及用户私人信息的数据或资源的区域,或可能影响用户存储的数据或其他应用程序的操作的区域。例如,读取用户联系人的能力是一种危险的权限。如果应用程序声明它需要危险权限,则用户必须显式授予该应用程序权限
alarmManager调用和BootBroadcastReceiver之间的相关性在哪里?您的问题不清楚。alarmManager调用和BootBroadcastReceiver之间的相关性对此问题重要吗?我希望在API23中有所改变,但我在其他API中找不到…我的应用程序运行良好。当然!您发布的代码没有描述情况。如果您无法描述它们是如何连接的,则无法回答此问题。引导接收器用于重新启动后的通知。Notification没有此功能,重新启动后无法工作。非常感谢。:)我将尝试使用exact:
alarmManager.setExactAndAllowHileId(alarmManager.RTC_WAKEUP,targetCal.getTimeInMillis(),PendingContent)
SetExactAndAllowHileIDLE:我们可以使用此方法在特定时间段(如1分钟)重复报警吗?