强制关闭应用程序时,AlarmManager不起作用

问题描述

该应用程序应该很简单。您可以设置带有任务和时间的列表项。它应在给定时间向您发送通知。 当应用程序运行时,一切正常,但是当我关闭它时,我没有收到通知。我尝试使用API​​ 23和APIR。我在看其他文章,但找不到任何解决方案。

接收器类别:

public class AlertReceiver extends broadcastReceiver {
     notificationmanagerCompat notificationmanager;
    @Override
    public void onReceive(Context context,Intent intent) {

        Calendar calendar = Calendar.getInstance();
        calendar.setTimeInMillis(System.currentTimeMillis());



        boolean is24HourFormat = android.text.format.DateFormat.is24HourFormat(context);
        CharSequence setTime;
        if (is24HourFormat) {

            setTime = DateFormat.format("HH:mm",calendar);

        } else {

            setTime = DateFormat.format("hh:mm a",calendar);
        }
        String currentTime = setTime.toString();






        DataBaseHelper dataBaseHelper = new DataBaseHelper(context);

        Item itemForNotificationText = dataBaseHelper.GetNotificationContent(currentTime);




        notificationmanagerCompat notificationmanager = notificationmanagerCompat.from(context);
        Notification notification = new NotificationCompat.Builder(context,CHANNEL_1_ID)
                .setSmallIcon(R.drawable.ic_baseline_notifications_active_24)
                .setContentTitle(itemForNotificationText.getTask())
                .setPriority(NotificationCompat.PRIORITY_HIGH)
                .setCategory(NotificationCompat.CATEGORY_MESSAGE)
                .setContentText(itemForNotificationText.getTime())
                .build();
        notificationmanager.notify(dataBaseHelper.GetID(),notification);
    }
}

我厌倦了使用setExactAndAllowWhileIdle,但仍然无法正常工作。 启动警报:

 public void startAlarm (Calendar c){


        AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
        Intent intent = new Intent(this,AlertReceiver.class);
        PendingIntent pendingIntent = PendingIntent.getbroadcast(this,item.getNotification_id(),intent,0);
        if (c.before(Calendar.getInstance())) {
            c.add(Calendar.DATE,1);
        }

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            alarmManager.setExact(AlarmManager.RTC_WAKEUP,c.getTimeInMillis(),pendingIntent);

        }


        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            
        
     alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP,pendingIntent);
        }
    }

清单文件

 <application
        android:name=".App"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".InsertActivity"></activity>
        <activity
            android:name=".TodoList"
            android:parentActivityName=".MainActivity" />
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <receiver android:name=".AlertReceiver"/>
    </application>


APP类(在此处创建通知通道):

public class App extends Application {
    public static final String CHANNEL_1_ID = "Channel 1";
    @Override
    public void onCreate() {
        super.onCreate();
        CreateNotificationChannels();
    }
    private void CreateNotificationChannels () {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            NotificationChannel channel1 = new NotificationChannel(
                    CHANNEL_1_ID,"Channel 1",notificationmanager.IMPORTANCE_HIGH
            );
            channel1.setDescription("Notifies you when an event has started.");
            channel1.enableVibration(true);
            notificationmanager manager = getSystemService(notificationmanager.class);
            manager.createNotificationChannel(channel1);

        }
    }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)