1.在工程的MainActivity.java中动态申请权限:
//动态申请权限 //1.检测是否有读写的权限 if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) { int permission = checkSelfPermission("android.permission.WRITE_EXTERNAL_STORAGE"); //没权限弹出是否允许权限弹窗 if (permission != PackageManager.PERMISSION_GRANTED) { requestPermissions(new String[] {"android.permission.READ_EXTERNAL_STORAGE", "android.permission.WRITE_EXTERNAL_STORAGE" }, 1); }else { //更新APK new Thread(new UpdateApk(MainActivity.this)).start(); } //定位权限 if(checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED){//未开启定位权限 //开启定位权限,200是标识码 requestPermissions(new String[]{Manifest.permission.ACCESS_FINE_LOCATION},200); } }
2.复写onRequestPermissionsResult方法
@Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); if (requestCode==1){ if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { //权限成功 new Thread(new UpdateApk(this)).start(); } else { ToastUtil.showToast(this,"获取文件读写权限失败!"); //权限失败 } } }
3.在UpdateApk线程中添加update方法:
void update() { try { Intent intent =new Intent(Intent.ACTION_VIEW); //判断是否是AndroidN以及更高的版本 if(Build.VERSION.SDK_INT>= Build.VERSION_CODES.N) { Uri contentUri = FileProvider.getUriForFile(activity,"com.example.lsf.innerapp(自己的包名).fileProvider",new File(Environment.getExternalStorageDirectory(), "ChangleUser.apk"));"ChangleUser.apk" 改为自己的名称 intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); intent.setDataAn