【发布时间】:2019-09-27 08:59:49
【问题描述】:
我在来电时制作了弹出窗口。对于 Android 8.0 以上的版本,它会给出以下错误:
无法添加窗口 android.view.ViewRootImpl$W@e5b2272 -- 权限 拒绝窗口类型 2003
此链接描述了解决方案,但我使用 customdialog。 链接:Android: Unable to add window. Permission denied for this window type
if (!intent.getAction().equals("android.intent.action.PHONE_STATE"))
return;
// Popup
else {
this.context = context;
if(dialog == null){
dialog = new CustomDialog(context);
dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
dialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);
dialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON |
WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD |
WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
dialog.show();
}
telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
listener = new PhoneStateListener() {
@Override
public void onCallStateChanged(int state, String incomingNumber) {
String stateString = "N/A";
switch (state) {
case TelephonyManager.CALL_STATE_IDLE:
stateString = "Idle";
dialog.dismiss();
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
stateString = "Off Hook";
dialog.dismiss();
break;
case TelephonyManager.CALL_STATE_RINGING:
stateString = "Ringing";
dialog.show();
break;
}
}
};
【问题讨论】: