gpt4 book ai didi

android - AlarmManager 从不运行

转载 作者:行者123 更新时间:2023-11-29 20:26:17 25 4
gpt4 key购买 nike

我对 Android 非常缺乏经验,并且在尝试让 AlarmManager 基本上运行一个每小时生成一个通知的小 Activity 时遇到了麻烦(出于测试目的,我将其降低为每 10 秒一次。

但是, Activity 似乎根本没有被调用。 Logcat 不显示任何内容,也没有出现 Toast,更不用说正在创建的通知了。

Context 可能是问题所在,我没有完全理解我要传递到那里的意思,所以我可能错误地传递了 MainActivity.this但是当我尝试用谷歌搜索时,我无法弄清楚什么更合适。

此代码包含在我的MainActivityOnCreate 方法中

button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
task = enterTask.getText().toString();
if (!task.equals("Enter task here...") &&
!task.equals("")) {
Toast.makeText(getApplicationContext(),
"Saved task " + task,
Toast.LENGTH_LONG).show();

SharedPreferences.Editor editor = prefs.edit();
editor.putString("Current_Task", task);
editor.commit();

Context context = MainActivity.this;
AlarmManager mgr = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);

Intent i = new Intent(context, Notify.class);
PendingIntent pi=PendingIntent.getBroadcast(context, 0, i, 0);

mgr.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
SystemClock.elapsedRealtime(),
//AlarmManager.INTERVAL_HOUR,
10000,
pi);
}
}
});

这是我的Notify Activity :

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.activity_notify);

Toast.makeText(getApplicationContext(),
"Notifying",
Toast.LENGTH_LONG).show();

prefs = PreferenceManager.getDefaultSharedPreferences(this);
try {
task = prefs.getString("Current_Task", "");
} catch (Exception e) {
e.printStackTrace();
}

if (!task.equals("")){
mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

mBuilder = new NotificationCompat.Builder(this)
.setSmallIcon(R.mipmap.ic_launcher)
.setContentTitle("Current task")
.setContentText("Hey! Have you " + task + "?");

mNotificationManager.notify(1, mBuilder.build());
}
}

谁能帮助我理解我的错误?

最佳答案

for testing purposes I lowered it to every 10 seconds

请注意,根据您的 Android 版本,它可能不会经常发生。从 Android 5.1 开始,最短时间为一分钟。

However it doesn't seem like the activity gets called at all.

通过 AlarmManager 定期启动 Activity 类似于用霰弹枪射击用户的脸:是的,它引起了他们的注意,但不是一个很好的方式。

事实上,您设置警报的代码是正确的:您正在为 PendingIntent 使用 getBroadcast()。这将触发 BroadcastReceiver,而不是 Activity。使用 BroadcastReceiver 是引发 Notification 的更好解决方案,因为 BroadcastReceiver 本身没有任何 UI,因此不会打扰用户通过接管前台。

我建议您设置 list 注册的 BroadcastReceiver 并将您的代码从 onCreate()(从首选项开始)放入 onReceive()BroadcastReceiver

如果您真的想要定期开始一项 Activity ,并且您不介意您的用户威胁要对您做不幸的事情,请使用 getActivity() 而不是 getBroadcast() 在创建您的 PendingIntent 时。

关于android - AlarmManager 从不运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32490954/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com