尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

Android开发 预装应用默认授予运行时权限和AppOps权限,不出现授权弹窗

Android开发 预装应用默认授予运行时权限和AppOps权限,不出现授权弹窗 Android开发 预装应用默认授予运行时权限和AppOps权限不出现授权弹窗文件修改路径wrelease/frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java#finishBootingfinalvoidfinishBooting(){TimingsTraceAndSlogtnewTimingsTraceAndSlog(TAGTiming,Trace.TRACE_TAG_ACTIVITY_MANAGER);t.traceBegin(FinishBooting);......t.traceEnd();//预装应用默认授予运行时权限和AppOps权限不出现授权弹窗//以文件极客为例grantDefaultPermission(UserHandle.USER_SYSTEM);}voidgrantDefaultPermission(intuserId){// Grant runtime permissions to com.google.android.apps.nbu.files (contacts, phone, etc.)grantRuntimePermissions(com.google.android.apps.nbu.files,newString[]{android.Manifest.permission.READ_CONTACTS,android.Manifest.permission.WRITE_CONTACTS,android.Manifest.permission.CALL_PHONE,android.Manifest.permission.READ_PHONE_STATE,android.Manifest.permission.READ_PHONE_NUMBERS,android.Manifest.permission.ANSWER_PHONE_CALLS,android.Manifest.permission.ADD_VOICEMAIL,android.Manifest.permission.PROCESS_OUTGOING_CALLS,android.Manifest.permission.ACCESS_FINE_LOCATION,android.Manifest.permission.ACCESS_COARSE_LOCATION,android.Manifest.permission.ACCESS_BACKGROUND_LOCATION,android.Manifest.permission.RECORD_AUDIO,android.Manifest.permission.CAMERA,android.Manifest.permission.WRITE_EXTERNAL_STORAGE,android.Manifest.permission.READ_EXTERNAL_STORAGE,android.Manifest.permission.POST_NOTIFICATIONS,android.Manifest.permission.GET_ACCOUNTS},userId);// Grant REQUEST_INSTALL_PACKAGES app op to com.google.android.apps.nbu.filesgrantAppOpsPermission(com.google.android.apps.nbu.files,AppOpsManager.OPSTR_REQUEST_INSTALL_PACKAGES,userId);// Grant SYSTEM_ALERT_WINDOW app op to com.google.android.apps.nbu.filesgrantAppOpsPermission(com.google.android.apps.nbu.files,AppOpsManager.OPSTR_SYSTEM_ALERT_WINDOW,userId);// Grant WRITE_SETTINGS app op to com.google.android.apps.nbu.filesgrantAppOpsPermission(com.google.android.apps.nbu.files,AppOpsManager.OPSTR_WRITE_SETTINGS,userId);// Grant GET_USAGE_STATS app op to com.google.android.apps.nbu.filesgrantAppOpsPermission(com.google.android.apps.nbu.files,AppOpsManager.OPSTR_GET_USAGE_STATS,userId);// Grant MANAGE_EXTERNAL_STORAGE app op to com.google.android.apps.nbu.filesgrantAppOpsPermission(com.google.android.apps.nbu.files,AppOpsManager.OPSTR_MANAGE_EXTERNAL_STORAGE,userId);}//默认授予运行时权限privatevoidgrantRuntimePermissions(StringtargetPkg,String[]permissions,intuserId){try{PackageManagerpmmContext.getPackageManager();UserHandleuserUserHandle.of(userId);intgranted0;for(Stringpermission:permissions){try{pm.grantRuntimePermission(targetPkg,permission,user);pm.updatePermissionFlags(permission,targetPkg,PackageManager.FLAG_PERMISSION_GRANTED_BY_DEFAULT|PackageManager.FLAG_PERMISSION_SYSTEM_FIXED,PackageManager.FLAG_PERMISSION_GRANTED_BY_DEFAULT|PackageManager.FLAG_PERMISSION_SYSTEM_FIXED,user);granted;}catch(Exceptione){Slog.w(TAG,DefaultGrant: Failed to grant permission to targetPkg user userId: e.getMessage());}}if(granted0){Slog.i(TAG,DefaultGrant: Granted granted runtime permissions to targetPkg user userId);}}catch(Exceptione){Slog.w(TAG,DefaultGrant: Failed to grant runtime permissions to targetPkg user userId: e.getMessage());}}//默认授予AppOps权限privatevoidgrantAppOpsPermission(StringtargetPkg,StringopStr,intuserId){try{android.content.pm.PackageManagerpmmContext.getPackageManager();android.content.pm.ApplicationInfoinfopm.getApplicationInfoAsUser(targetPkg,0,userId);AppOpsManagerappOpsmContext.getSystemService(AppOpsManager.class);intcurrentModeappOps.unsafeCheckOpNoThrow(opStr,info.uid,info.packageName);Slog.i(TAG,DefaultGrant: pkgtargetPkg opopStr currentModecurrentMode useruserId);if(currentModeAppOpsManager.MODE_DEFAULT){appOps.setMode(opStr,info.uid,info.packageName,AppOpsManager.MODE_ALLOWED);Slog.i(TAG,DefaultGrant: Successfully granted opStr to targetPkg user userId);}}catch(Exceptione){Slog.w(TAG,DefaultGrant: Failed to grant opStr to targetPkg user userId: e.getMessage());}}如果对你有帮助就一键三连呗关注点赞收藏我会持续更新更多干货~~
返回列表