【发布时间】:2019-11-28 03:50:21
【问题描述】:
我正在尝试使用 SQLite 数据库构建离线提醒 Android 应用程序。对于通知,我使用警报管理器调用广播接收器,但不幸的是,接收器未触发,因此我无法在更高版本 6.0 及更高版本中获得提醒通知
我的清单包括:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.VIBRATE" />
还有
enter code here
<receiver
android:name=".Util.BroadcastManager"
android:exported="false">
<intent-filter>
<action android:name="android.intent.action.NOTIFY" />
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.INPUT_METHOD_CHANGED" />
<!--
<action android:name="ALARM" />
<action android:name = "android.hardware.usb.action.USB_STATE" />
<category android:name="android.intent.category.APP_CALENDAR" />
-->
</intent-filter>
</receiver>
报警管理器调用为:
if (alarm) {
Intent itAlarm = new Intent("ALARM");
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, itAlarm, 0);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.add(Calendar.SECOND, 3);
AlarmManager alarme = (AlarmManager) getSystemService(ALARM_SERVICE);
int interval = 60000;
alarme.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), interval, pendingIntent);
}else {
Intent alarmIntent = new Intent(MainActivity.this, BroadcastManager.class);
alarmIntent.setAction(Intent.ACTION_MAIN);
alarmIntent.addCategory(Intent.CATEGORY_LAUNCHER);
PendingIntent pendingIntent = PendingIntent.getBroadcast(MainActivity.this, 0, alarmIntent, 0);
AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
int interval = 60000;
manager.setInexactRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), interval, pendingIntent);
}
br = new BroadcastManager();
IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
filter.addAction(Intent.ACTION_AIRPLANE_MODE_CHANGED);
this.registerReceiver(br, filter);
【问题讨论】:
-
我不确定您的
alarm变量表示什么,但在这两种情况下您都应该使用明确的Intent;即,new Intent(MainActivity.this, BroadcastManager.class)在第一种情况下也是如此,而不是new Intent("ALARM")。 -
这条线没有用,虽然没有调用广播管理器。
-
我不知道那是什么意思。无论如何,关于警报或接收器,Android 6 没有任何变化。 Android 8 对清单注册的接收器引入了隐式广播的限制,但无论如何,您应该一直使用显式广播。 6 中的主要变化是运行时权限,因此如果您的 Receiver 中有需要危险权限的内容,则可能是失败的原因。您需要edit 您的问题,以提供证明问题的minimal reproducible example。
标签: java android notifications broadcastreceiver android-version