Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 不适用于API 23的通知_Android_Alarmmanager_Android Notifications_Android 6.0 Marshmallow - Fatal编程技术网

Android 不适用于API 23的通知

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

我的通知不适用于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, 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)开始,用户在应用程序运行时授予应用程序权限,而不是在安装应用程序时

  • 正常权限包括应用程序需要访问应用程序沙箱之外的数据或资源,但对用户隐私或其他应用程序的操作风险很小的区域。例如,设置时区的权限是正常权限。如果应用程序声明它需要正常权限,系统会自动将该权限授予该应用程序。有关当前正常权限的完整列表,请参阅正常权限

  • 危险权限包括应用程序需要涉及用户私人信息的数据或资源的区域,或可能影响用户存储的数据或其他应用程序的操作的区域。例如,读取用户联系人的能力是一种危险的权限。如果应用程序声明它需要危险权限,则用户必须显式授予该应用程序权限

表1。危险的权限和权限组。


alarmManager调用和BootBroadcastReceiver之间的相关性在哪里?您的问题不清楚。alarmManager调用和BootBroadcastReceiver之间的相关性对此问题重要吗?我希望在API23中有所改变,但我在其他API中找不到…我的应用程序运行良好。当然!您发布的代码没有描述情况。如果您无法描述它们是如何连接的,则无法回答此问题。引导接收器用于重新启动后的通知。Notification没有此功能,重新启动后无法工作。非常感谢。:)我将尝试使用exact:
alarmManager.setExactAndAllowHileId(alarmManager.RTC_WAKEUP,targetCal.getTimeInMillis(),PendingContent)
SetExactAndAllowHileIDLE:我们可以使用此方法在特定时间段(如1分钟)重复报警吗?