即使用户单击主页按钮,也可以从报警广播接收器启动活动



我一整天都在寻找如何完成我认为简单的任务。。。我的应用程序中有一个闹钟,当它熄灭时,我想把我的应用软件放在用户屏幕前,这样他就可以关掉闹钟。。。在我的活动中,我已经设定了一个意向,称接收者为。。。

registerReceiver(mReceiver, new IntentFilter("sample") );
PendingIntent pendingIntent = PendingIntent.getBroadcast( MapActivity.this, 0, new Intent("sample"),0 );
AlarmManager alarmManager = (AlarmManager)(MapActivity.this.getSystemService( Context.ALARM_SERVICE ));

这是我的onRecieve方法

@Override
  public void onReceive(Context context, Intent intent) {
    Toast.makeText(context, "Alarm time has been reached", Toast.LENGTH_LONG).show();
    Uri notifikacijaAlarma = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE);
    final Ringtone r = RingtoneManager.getRingtone(getApplicationContext(), notifikacijaAlarma);
    r.play();
    PowerManager pm = (PowerManager)context.getSystemService(Context.POWER_SERVICE);
    WakeLock wl = pm.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.FULL_WAKE_LOCK, "TRAININGCOUNDOWN");
    wl.acquire();
    Intent i = new Intent(getBaseContext(), GlavniIzbornik.class);
    i.setAction(Intent.ACTION_MAIN);
    i.addCategory(Intent.CATEGORY_LAUNCHER);
    i.setFlags(Intent.FLAG_FROM_BACKGROUND | Intent.FLAG_ACTIVITY_REORDER_TO_FRONT | Intent.FLAG_ACTIVITY_NEW_TASK| Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY);
    startActivity(i);
    wl.release();
}               

所以即使我转到另一个应用程序或在电话上做任何其他事情,我的闹钟也会响。。。它显示Toast并播放铃声,但它不会将我的应用程序放在最前面,当我手动转到应用程序时,它会启动活动,但我就是无法获得它,所以它会将我的程序放在前面。

有人对此有什么建议吗?

PS我知道我应该播放闹钟活动的铃声。。。我只是想看看整个代码是否被执行。。。

您通过显式Intent启动Activity。删除第i.setAction(...)行和第i.setCategory(...)行。这些在清单中用于在启动器中显示此Activity

接下来,根据文档,您自己不设置Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY

请勿使用getBaseContext(),在BroadcastReceiver.onReceive(...)中使用context,如同在new Intent(context, GlavniIzbornik.class);context.startActivity(i)中一样。在ActivityService中,使用this

最新更新