在高于6.0的Android版本中无法通过广播接收器获取通知

2019年5月21日 23点热度 0条评论

我正在尝试使用SQLite数据库构建脱机提醒Android应用程序。对于通知,我使用alaram管理器调用广播接收器,但是不幸的是,接收器未触发,因此在更高版本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);

解决方案如下:

尝试使用通知库来制作适用于每个API的自定义通知。

警报器通知

这是一个自定义库

implementation "com.tapadoo.android:alerter:5.0.0"

Here is the link

我在当前项目中正在使用它,并且运行良好。