应用程序未运行时警报未触发

时间:2016-10-04 12:18:49

标签: android broadcastreceiver alarm

我设置了每日闹钟。如果应用程序在闹钟时运行,它可以正常工作,但如果应用程序没有运行则不起作用。 这是我在Manifest中声明接收器的方式:

<receiver android:name="com.myAppPackage.alarm.AlarmReceiver"
        android:enabled="true"
        android:exported="true"/>

Studio警告我:导出的接收器不需要许可。

是的,我没有向接收者添加android:permission和Intent,而应用程序部分没有任何权限标记。

这是广播接收者:

    package com.myAppPackage.alarm;

    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.Intent;

    import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;

    public class AlarmReceiver extends BroadcastReceiver {

    public AlarmReceiver(){}

    @Override
    public void onReceive(Context context, Intent intent) {

        final Intent syncIntent = new Intent(context, AlarmActivity.class);

        syncIntent.addFlags(FLAG_ACTIVITY_NEW_TASK);

        context.startActivity(syncIntent);

    }
}

警报按以下方法配置(在此示例中配置为在13:48设置每日不准确):

public static void configureDailySync(Context context) {

    AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);

    Intent alarmIntent = new Intent(context, AlarmReceiver.class);

    PendingIntent alarmPendingIntent = PendingIntent.getBroadcast(context, 0, alarmIntent, 0);

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

    final int hourOfDay = 13;
    final int minuteOfHour = 48;

    calendar.set(Calendar.HOUR_OF_DAY, hourOfDay);
    calendar.set(Calendar.MINUTE, minuteOfHour);

    alarmManager.setInexactRepeating(
            AlarmManager.RTC_WAKEUP,
            calendar.getTimeInMillis(),
            AlarmManager.INTERVAL_DAY,
            alarmPendingIntent);
}

非常欢迎任何帮助!谢谢!!

新闻:越来越近了......如果我在MainActivity onCreate()方法中复制闹钟设置代码就行了!这是我复制的代码:

    AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);

    Intent alarmIntent = new Intent(this, AlarmReceiver.class);

    PendingIntent alarmPendingIntent = PendingIntent.getBroadcast(this, 0, alarmIntent, 0);

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

    final int hourOfDay = 13;
    final int minuteOfHour = 48;

    calendar.set(Calendar.HOUR_OF_DAY, hourOfDay);
    calendar.set(Calendar.MINUTE, minuteOfHour);

    alarmManager.setInexactRepeating(
            AlarmManager.RTC_WAKEUP,
            calendar.getTimeInMillis(),
            AlarmManager.INTERVAL_DAY,
            alarmPendingIntent);

当如上所述在MainActivity的onCreate()中创建警报时,即使应用程序关闭,它也会触发... 但是,当我从MainActivity调用该方法时,就像这样:

MyAppAccount.configureDailySync(this);

它不起作用! MyAppAccount是一个普通的类,没有扩展任何东西...我已经尝试让MyAppAccount扩展AppCompatActivity,以防它重要但没有... 哦,好吧......似乎上面尝试在MainActivity的onCreate()方法中执行警报设置并不总是有效......最令人费解的是! : - (

1 个答案:

答案 0 :(得分:1)

解决:它与编码无关!!问题是我关闭应用程序的方式。使用Android Studio的停止按钮关闭应用程序时,不会设置警报。从手机关闭应用程序时,例如使用后退按钮和/或从应用程序列表中删除应用程序(使用方形按钮),然后警报就会起作用!

为什么呢?不知道......