所以,我今天已经尝试实现这一目标至少五个小时,而且我已经尝试过在任何地方找到任何解决方案。
我正在编写一个小时钟应用程序,使用AlarmManager使应用程序响铃。当我的应用程序打开或最小化时,它工作正常。我在应用程序关闭时尝试使其正常工作,这就是问题所在。因此,有一段代码可以设置AlarmManager:
public class AlarmService extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
/*Intent cust = new Intent(context, CustomIntent.class);
context.startService(cust);*/
Bundle extras = intent.getExtras();
Intent newIntent = new Intent(context, AlarmActivity.class);
newIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
newIntent.putExtra("AlarmName", extras.getString("AlarmName"));
context.startActivity(newIntent);
}
}
(这里,ctxt是上下文,我已尝试过getApplicationContext()和getBaseContext(),而nextRing.getTime()是一个代表日期的long)
然后,我有了我的AlarmService类(曾经是一个服务,解释了这个名字,但现在是一个BroadcastReceiver,我现在不想重命名)
public class CustomIntent extends IntentService {
public CustomIntent() {
super("CustomIntent");
}
@Override
protected void onHandleIntent(Intent intent) {
Intent newIntent = new Intent(getBaseContext(), AlarmActivity.class);
newIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
getApplication().startActivity(newIntent);
}
}
所以这是仅使用BroadcastReceiver的尝试,显然不起作用,所以我尝试添加一个IntentService(顶部注释掉的代码),其中包含以下代码
<application>
[Here goes stuff that have nothing to do with my bug]
<receiver android:name=".custom_classes.AlarmService"/>
<service
android:name="com.group9.abclock.custom_classes.CustomIntent"
android:enabled="true" >
<intent-filter>
<action android:name="com.group9.abclock.custom_classes.CustomIntent" />
</intent-filter>
</service>
</application>
......那也没有用!最后,这是我使用的清单:
{{1}}
对于(非常)长篇帖子感到抱歉但是我很难解释我尝试过的任何内容。如果您能提供帮助,请提前致谢!
答案 0 :(得分:0)
如果您的应用程序已关闭,则您无法触发BroadcastReceiver,因为它未注册,并且您无法使用Context方法,因为没有上下文。
如果要在应用程序关闭时执行任务,则必须使用服务创建另一个项目,并使用您的应用程序启动它。
服务在后台运行,直到有人杀死它,一旦启动,就不再需要主应用程序了。因此必须在此服务中实现环功能。
请记住,由于Doze Mode,AlarmManager.setExact与API 23不完全相同。