我设置了每日闹钟。如果应用程序在闹钟时运行,它可以正常工作,但如果应用程序没有运行则不起作用。 这是我在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()方法中执行警报设置并不总是有效......最令人费解的是! : - (
答案 0 :(得分:1)
解决:它与编码无关!!问题是我关闭应用程序的方式。使用Android Studio的停止按钮关闭应用程序时,不会设置警报。从手机关闭应用程序时,例如使用后退按钮和/或从应用程序列表中删除应用程序(使用方形按钮),然后警报就会起作用!
为什么呢?不知道......