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