代码经过博主亲测,可以实现在BroadcastReceiver中弹出dialog的需求。
废话不多说,直接上码。
1.悬浮窗权限申请
AndroidManifest中加入:
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
代码中加入:
/**
* 监测悬浮窗权限
*/
@TargetApi(23)
private void requestSettingCanDrawOverlays() {
if (!Settings.canDrawOverlays(mContext)) {
permissionDialog = DialogUtil.showHintDialogForCommonVersion(mContext, "某些重要通知的展示需要悬浮窗权限,请开启悬浮窗权限,以免错过重要通知~",
"去开启", "下次再说", new View.OnClickListener() {
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.tv_positive:
int sdkInt = Build.VERSION.SDK_INT;
if (sdkInt >= Build.VERSION_CODES.O) {//8.0以上
Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
startActivityForResult(intent, REQUEST_DIALOG_PERMISSION);
} else if (sdkInt >= Build.VERSION_CODES.M) {//6.0-8.0
Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
LogUtil.d(TAG + " packageName = " + mContext.getPackageName());
intent.setData(Uri.parse("package:" + mContext.getPackageName()));
startActivityForResult(intent, REQUEST_DIALOG_PERMISSION);
}
permissionDialog.dismiss();
break;
case R.id.tv_negative:
permissionDialog.dismiss();
break;
}
}
});
}
}
在适当位置调用此方法进行权限申请,DialogUtil是博主自己的一个弹窗工具类,弹窗样式请自定义,或者在文末的链接处下载。
2.BroadcastReceiver弹出Dialog
在需要的位置调用弹出dialog代码:
passDialog = DialogUtil.showHintDialogForBroadcastReceiver(mContext,
"审核通过,快召唤好友投票获取最终大奖吧~", "去查看", "稍后", new View.OnClickListener() {
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.tv_positive:
Session.getSession().put(Constant.INTENT_EVENT,Constant.ACTIVITIES_FRAGMENT);
Intent intent = new Intent(mContext,HomePageActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
mContext.startActivity(intent);
passDialog.dismiss();
break;
case R.id.tv_negative:
passDialog.dismiss();
break;
}
}
});
封装的dialog代码:(重点)
public static Dialog showHintDialogForBroadcastReceiver(Context context, String msg, String positiveBtnText,
String negativeBtnText, View.OnClickListener onClickListener) {
Dialog dialog = new Dialog(context);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.hint_dialog_for_common_version);
TextView tv_hint_content = dialog.findViewById(R.id.tv_hint_content);
tv_hint_content.setText(msg);
TextView tv_positive = dialog.findViewById(R.id.tv_positive);
tv_positive.setText(positiveBtnText);
TextView tv_negative = dialog.findViewById(R.id.tv_negative);
tv_negative.setText(negativeBtnText);
tv_positive.setOnClickListener(onClickListener);
tv_negative.setOnClickListener(onClickListener);
Window window = dialog.getWindow();
if (window != null) {
WindowManager.LayoutParams layoutParams = window.getAttributes();
layoutParams.width = ScreenUtils.getScreenWidth() - SizeUtils.dp2px(30);
window.setAttributes(layoutParams);
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){
window.setType(WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY);
}else{
window.setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
}
}
dialog.setCanceledOnTouchOutside(true);
dialog.show();
return dialog;
}
博主项目亲测可以正常弹出dialog,如果遇到问题可以在下方留言。
DialogUtil下载链接:https://download.csdn.net/download/yonghuming_jesse/11645754
另,附上博主自己的淘宝客项目下载码(可查淘宝商品优惠券,使用优惠券购物后可加微信客服返现,返现额度全网最高,客服微信android_jesse):