java - AlarmManager 在指定时间未显示 toast 消息
问题描述
我希望我的应用程序在每天晚上 9 点运行特定任务。我已经阅读了多个在 Android 应用程序中实现它的示例,并且我几乎尝试了每一个,但似乎没有任何效果。为了测试代码,我尝试在某个时间显示一条 toast 消息,但没有出现 toast 消息,即使在设定时间后几分钟也是如此,因为我在某些网站上读到警报时间可能不准确。请帮我弄清楚我的代码有什么问题。
MainActivity.java:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
Intent intent = new Intent(this, MyBroadcastReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 101, intent, PendingIntent.FLAG_UPDATE_CURRENT);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, 21);
calendar.set(Calendar.MINUTE, 00);
if (alarmManager != null) {
alarmManager.setExact(AlarmManager.RTC, calendar.getTimeInMillis(), pendingIntent);
}
}
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(MainActivity.this, "Alarm...", Toast.LENGTH_SHORT).show();
}
}
AndroidManifest.xml:
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="com.android.alarm.permission.SET_ALARM"/>
非常感谢任何帮助。我已经被这个问题困扰了几个小时。谢谢你。
解决方案
推荐阅读
- hyperledger-fabric - 在 Hyperledger Fabric CA 中注册和注册证书有什么区别
- cluster-computing - slurm集群管理器中如何知道一个job的每个进程的状态?
- javascript - 在 Camunda 进程中,如何使用 JavaScript 和 Spin 从 JSON 中检索布尔值?
- ios - 在 textViewDidChange 中检测粘贴 UITextView
- r - r data.table 使用具有多列集的 .SD 来获得 RMSPE
- javascript - 立即动态更改图像 Vanila javascript
- asp.net-core - 多租户 .Net Core Web API
- angular - 在打字稿的另一个私有方法中解析函数内私有方法调用的范围
- java - 防止 Vuejs 应用程序重写 URL
- python - 从 spyder 在 GPU 上实现 python 代码