应用关闭时,BroadcastReceiver不会启动活动

时间:2017-03-15 14:16:53

标签: android broadcastreceiver alarmmanager android-pendingintent intentservice

所以,我今天已经尝试实现这一目标至少五个小时,而且我已经尝试过在任何地方找到任何解决方案。

我正在编写一个小时钟应用程序,使用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}}

对于(非常)长篇帖子感到抱歉但是我很难解释我尝试过的任何内容。如果您能提供帮助,请提前致谢!

1 个答案:

答案 0 :(得分:0)

如果您的应用程序已关闭,则您无法触发BroadcastReceiver,因为它未注册,并且您无法使用Context方法,因为没有上下文。

如果要在应用程序关闭时执行任务,则必须使用服务创建另一个项目,并使用您的应用程序启动它。

服务在后台运行,直到有人杀死它,一旦启动,就不再需要主应用程序了。因此必须在此服务中实现环功能。

请记住,由于Doze Mode,AlarmManager.setExact与API 23不完全相同。