没有应用程序时不会触发警报 运行
alarm not triggering when app is no running
我正在设置每日闹钟。如果应用程序在闹钟时间 运行,它会工作,但如果应用程序不是 运行,它就不会工作。
这就是我在清单中声明接收者的方式:
<receiver android:name="com.myAppPackage.alarm.AlarmReceiver"
android:enabled="true"
android:exported="true"/>
Studio 警告我:导出的接收器不需要权限。
是的,我没有向接收者添加 android:permission 和 Intent,并且 application 部分没有任何 permission 标签。
这是广播接收器:
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 是一个普通的 class 没有扩展任何东西......我试图让 MyAppAccount 扩展 AppCompatActivity 以防它重要但没有......
哦……好吧……上面的尝试在 MainActivity 的 onCreate() 方法中执行闹钟设置似乎并不总是有效……最令人费解的是! :-(
已解决:它与编码无关!!问题是我关闭应用程序的方式。使用 Android Studio 的停止按钮关闭应用程序时,未设置警报。当从 phone 关闭应用程序时,例如使用后退按钮和/或从应用程序列表中删除应用程序(使用方形按钮),然后闹钟会起作用!
为什么?不知道...
我正在设置每日闹钟。如果应用程序在闹钟时间 运行,它会工作,但如果应用程序不是 运行,它就不会工作。 这就是我在清单中声明接收者的方式:
<receiver android:name="com.myAppPackage.alarm.AlarmReceiver"
android:enabled="true"
android:exported="true"/>
Studio 警告我:导出的接收器不需要权限。
是的,我没有向接收者添加 android:permission 和 Intent,并且 application 部分没有任何 permission 标签。
这是广播接收器:
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 是一个普通的 class 没有扩展任何东西......我试图让 MyAppAccount 扩展 AppCompatActivity 以防它重要但没有...... 哦……好吧……上面的尝试在 MainActivity 的 onCreate() 方法中执行闹钟设置似乎并不总是有效……最令人费解的是! :-(
已解决:它与编码无关!!问题是我关闭应用程序的方式。使用 Android Studio 的停止按钮关闭应用程序时,未设置警报。当从 phone 关闭应用程序时,例如使用后退按钮和/或从应用程序列表中删除应用程序(使用方形按钮),然后闹钟会起作用!
为什么?不知道...