應用程序退出后Dialog彈出

FreeMusic新增功能

1.按住Home鍵,back鍵,或recent鍵 彈出提示框

難點:

1.當應用程序退出的時候,dialog 依賴所在Activity的context,而應用程序退出的時候 Activity銷毀,所以context隨之銷毀

解決方案:開啟服務或廣播,在其中開啟系統級別的對話框

2.關于Home鍵,Recent鍵退出時監聽事件 位置,需求是要對所有的Activity生效

解決方案:

1.在Application的on Create方法進行注冊,在onTerminal方法里進行反注

存在的問題:因為項目采取的是多進程,所以onCreate方法會被調用多次

會多次注冊,產生錯亂問題,故此方法舍棄

2.在BaseActivity里onResume方法里進行注冊,onPause里進行反注冊

下面貼代碼:

1.對話框代碼

public classPolicyReminderDialog {

public static voidshow(Context context) {

finalBooleanPrefField notShowPolicyAgainPref =newFreeMusicSharePreferences_(context).notShowPolicyAgain();

if(notShowPolicyAgainPref.get()) {

return;

}

finalandroid.app.AlertDialog.Builder builder;

builder =newandroid.app.AlertDialog.Builder(context);

builder.setTitle(R.string.policy_reminder_dialog_title)

.setMessage(R.string.policy_reminder_dialog_desc)

.setNegativeButton(R.string.policy_reminder_dialog_button_cancel, newDialogInterface.OnClickListener() {

@Override

public voidonClick(DialogInterface dialog, intwhich) {

}

})

.setNeutralButton(R.string.policy_reminder_dialog_button_dontshow, newDialogInterface.OnClickListener() {

@Override

public voidonClick(DialogInterface dialog, intwhich) {

notShowPolicyAgainPref.put(true);

}

});

android.app.AlertDialog dialog = builder.create();

dialog.setCanceledOnTouchOutside(false);

dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);//需要添加的語句

dialog.show();

}

}

在廣播或服務中調用

public classDialogReceiverextendsBroadcastReceiver {

@Override

public voidonReceive(Context context,Intent intent) {

PolicyReminderDialog.show(context);

}

}

back 鍵

@Override

public voidonBackPressed() {

super.onBackPressed();

Intent intents =newIntent("com.classiclistening.freemusic.PolicyDialog");

sendBroadcast(intents);

}

Home鍵

privateBroadcastReceiverhomeKeyReceiver=newBroadcastReceiver() {

@Override

public voidonReceive(Context context,Intent intent) {


Intent intents =newIntent("com.classiclistening.freemusic.PolicyDialog");

sendBroadcast(intents);


};

@Override

protected voidonResume() {

super.onResume();

IntentFilter homeFilter =newIntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);

registerReceiver(homeKeyReceiver,homeFilter);

}

@Override

protected voidonPause() {

super.onPause();

unregisterReceiver(homeKeyReceiver);

}


注意:服務的時候recent鍵殺死后會重啟 (故不建議用服務)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容