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

时间:2014-10-19 18:51:37

标签: android android-intent alarmmanager start-activity

我整天都在搜索如何在我看来这个简单的任务...我在我的应用程序中发出警报,当它关闭时,我想将我的应用程序带到用户屏幕前,这样他就可以转动报警... 在我的活动中,我已经建立了打电话给接收者的意图......

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我知道我应该从我的闹钟活动中播放铃声...我只是想看看整个代码是否被执行......

1 个答案:

答案 0 :(得分:0)

您以明确的Activity开始Intent。删除第i.setAction(...)行和i.setCategory(...)行。这些在清单中用于在启动器中显示此Activity

根据documentation,您没有自己设置Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY

不要 EVER 使用getBaseContext()BroadcastReceiver.onReceive(...)使用contextnew Intent(context, GlavniIzbornik.class);context.startActivity(i)。在ActivityService中使用this