Android 8.0系统以上手机启动白屏-因为权限问题的解决方案

同样的代码在8.0以下手机上运行无误,但是8.1以及9.0的用户反馈启动白屏。这就奇怪了,我首先断点调试没有发现问题,最后多打了几个断点发现在获取设备信息时抛异常了,断点卡在下面两行。

String device_type = android.os.Build.MODEL; // 手机型号
String release = android.os.Build.VERSION.RELEASE; // android系统版本号

首先,我查询6.0以上危险权限组中有READ_PHONE_STATE,确实出问题的代码中我没有动态授权,但是奇怪的是

CALL_PHONE是我动态给过的,显然并不是给一个就把整组权限都拿到了。

添加了READ_PHONE_STATE之后,经测试无误了。最终代码如下:

(1)实现接口 implements OnRequestPermissionsResultCallback

(2)授权

    private void checkPermissioin(){
        int checkStorage = ContextCompat.checkSelfPermission(LoginActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE);
        int checkCallPhone = ContextCompat.checkSelfPermission(LoginActivity.this, Manifest.permission.CALL_PHONE);
        int checkPhoneState = ContextCompat.checkSelfPermission(LoginActivity.this, Manifest.permission.READ_PHONE_STATE);
        if (checkStorage == PackageManager.PERMISSION_GRANTED  && checkCallPhone == PackageManager.PERMISSION_GRANTED && checkPhoneState == PackageManager.PERMISSION_GRANTED) {
           //已经授权
        	showAlerDialog();
        	Log.i("---wwy", "检测权限 已授权");
        } else {//没有权限
            ActivityCompat.requestPermissions(LoginActivity.this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.CALL_PHONE,Manifest.permission.READ_PHONE_STATE}, 1);//申请授权
        	Log.i("---wwy", "检测权限 未授权");
        }
    }

(3)回调

    @SuppressLint("Override")
	@Override
	public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
	    if (requestCode == 1) {
	    	for(int i=0;i<3;i++){
	    		
		        if (grantResults.length > 0 && grantResults[i] == PackageManager.PERMISSION_GRANTED) {
		        	Log.i("---wwy", "回调权限 已授权1");
		        } else {
		        	Log.i("---wwy", "回调权限  未授权1");
		        	Toast.makeText(this, "请到系统设置页面手动授予权限", Toast.LENGTH_SHORT).show();
		            finish();
		        }
		            
	    	}
	    	showAlerDialog();
    	}

	}

最后提醒大家,如果涉及到限制手机最低版本为6.0以上的或者某一功能需要新的权限,一定要确认是否为危险权限,在清单文件和需要授权的地方都要加上,否则会出现一些功能异常还不好定位。

猜你喜欢

转载自blog.csdn.net/Wang_WY/article/details/93596645