android 重新启动应用程序,android – 从“最近的应用程序”启动时,PopUp Activity再次启动...

我有一个在AlarmManager收到警报时启动的PopUp活动.

AlarmReceiver扩展了WakefulBroadcastReceiver:

@Override

public void onReceive(Context context, Intent intent) {

Intent service = new Intent(context, AlarmService.class);

service.putExtras(intent);

// Start the service, keeping the device awake while it is launching.

startWakefulService(context, service);

}

AlarmService扩展了IntentService:

@Override

protected void onHandleIntent(Intent intent) {

Intent i = new Intent();

i.setClass(this, PopUpActivity.class);

startActivity(i);

AlarmReceiver.completeWakefulIntent(intent);

}

PopUpActivity:

@Override

protected void onCreate(final Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

getWindow().setFlags(LayoutParams.FLAG_NOT_TOUCH_MODAL, LayoutParams.FLAG_NOT_TOUCH_MODAL);

getWindow().setFlags(LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH, LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH);

setContentView(R.layout.layout_dialog);

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);

PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, ClientConstants.WAKE_LOCK_NOTIFICATION);

// Acquire the lock

wl.acquire();

if (canVibrate){

vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);

vibrator.vibrate(new long[]{ 0, 200, 500 },0);

}

if (canRing){

mediaPlayer = new MediaPlayer();

try {

mediaPlayer.setDataSource(this, getAlarmUri());

final AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);

if (audioManager.getStreamVolume(AudioManager.STREAM_ALARM) != 0) {

mediaPlayer.setAudioStreamType(AudioManager.STREAM_ALARM);

mediaPlayer.prepare();

mediaPlayer.start();

}

} catch (IOException e) {

}

}

findViewById(R.id.dialog_ok_button).setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

stopRinging();

finish();

}

});

// Release the lock

wl.release();

}

private void stopRinging(){

if (canRing && mediaPlayer.isPlaying())

mediaPlayer.stop();

if (canVibrate){

vibrator.cancel();

}

}

PopUpActivity从警报管理器启动.如果在应用程序不是活动应用程序时启动PopUpActivity,并且如果用户按下“确定”按钮,则活动将消失.到目前为止,没有什么是错的.问题是,如果用户打开最近的应用程序屏幕并选择活动,则会再次启动新的PopUpActivity.我怎样摆脱这个问题?

解决方法:

当您在清单中声明PopupActivity时,请确保包含android:noHistory =“true”.这意味着只要您打开“最近”,弹出活动就会被忘记,您将在重新打开应用程序时返回到之前的位置.

标签:android,broadcastreceiver,alarmmanager

来源: https://codeday.me/bug/20190612/1225841.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值