之前在项目里面做了一个系统弹窗,使用了
dialog.getWindow()
//.setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
但是在部分手机却抛异常,这和权限无关,即使申请了权限也是不可用,比如在华为手机上面可以使用,但是三星手机却报错,后来将其改成
dialog.getWindow() //.setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT); .setType(WindowManager.LayoutParams.TYPE_TOAST);便可以了,特意记录下来,方便下次遇坑
弹窗全部代码如下:
AlertDialog.Builder builder = new AlertDialog.Builder(getApplicationContext()); builder.setTitle(R.string.phone_authority); builder.setMessage(R.string.authority_message); builder.setPositiveButton(R.string.confirm, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface arg0, int arg1) { arg0.dismiss(); String[] AManger = new String [authorityList.size()]; for(int i =0;i<authorityList.size();i++){AManger[i] = authorityList.get(i); } ActivityCompat.requestPermissions(activity,AManger,REQUEST_CODE_ASK_CALL_PHONE );//开始申请权限 stopSelf(); } }); builder.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface arg0, int arg1) { arg0.dismiss(); stopSelf(); } }); Dialog dialog = builder.create(); dialog.setCancelable(false); dialog.getWindow() //.setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT); .setType(WindowManager.LayoutParams.TYPE_TOAST); dialog.show();