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鍵殺死后會重啟 (故不建議用服務)