完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
Android的framework里有相关默认权限的操作,主要针对预装的情况
frameworksbaseservicescorejavacomandroidserverpmDefaultPermissionGrantPolicy.java private void grantDefaultSystemHandlerPermissions(int userId) { Log.i(TAG, "Granting permissions to default platform handlers for user " + userId); .......... synchronized (mService.mPackages) { // Installer PackageParser.Package installerPackage = getSystemPackageLPr( mService.mRequiredInstallerPackage); if (installerPackage != null && doesPackageSupportRuntimePermissions(installerPackage)) { grantRuntimePermissionsLPw(installerPackage, STORAGE_PERMISSIONS, true, userId); } // Camera Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); PackageParser.Package cameraPackage = getDefaultSystemHandlerActivityPackageLPr( cameraIntent, userId); if (cameraPackage != null && doesPackageSupportRuntimePermissions(cameraPackage)) { grantRuntimePermissionsLPw(cameraPackage, CAMERA_PERMISSIONS, userId); grantRuntimePermissionsLPw(cameraPackage, MICROPHONE_PERMISSIONS, userId); grantRuntimePermissionsLPw(cameraPackage, STORAGE_PERMISSIONS, userId); } // Maps Intent mapsIntent = new Intent(Intent.ACTION_MAIN); mapsIntent.addCategory(Intent.CATEGORY_APP_MAPS); PackageParser.Package mapsPackage = getDefaultSystemHandlerActivityPackageLPr( mapsIntent, userId); if (mapsPackage != null && doesPackageSupportRuntimePermissions(mapsPackage)) { grantRuntimePermissionsLPw(mapsPackage, LOCATION_PERMISSIONS, userId); } // Gallery Intent galleryIntent = new Intent(Intent.ACTION_MAIN); galleryIntent.addCategory(Intent.CATEGORY_APP_GALLERY); PackageParser.Package galleryPackage = getDefaultSystemHandlerActivityPackageLPr( galleryIntent, userId); if (galleryPackage != null && doesPackageSupportRuntimePermissions(galleryPackage)) { grantRuntimePermissionsLPw(galleryPackage, STORAGE_PERMISSIONS, userId); } Intent emailIntent = new Intent(Intent.ACTION_MAIN); emailIntent.addCategory(Intent.CATEGORY_APP_EMAIL); PackageParser.Package emailPackage = getDefaultSystemHandlerActivityPackageLPr( emailIntent, userId); if (emailPackage != null && doesPackageSupportRuntimePermissions(emailPackage)) { grantRuntimePermissionsLPw(emailPackage, CONTACTS_PERMISSIONS, userId); grantRuntimePermissionsLPw(emailPackage, CALENDAR_PERMISSIONS, userId); } // Browser PackageParser.Package browserPackage = null; String defaultBrowserPackage = mService.getDefaultBrowserPackageName(userId); if (defaultBrowserPackage != null) { browserPackage = getPackageLPr(defaultBrowserPackage); } if (browserPackage == null) { Intent browserIntent = new Intent(Intent.ACTION_MAIN); browserIntent.addCategory(Intent.CATEGORY_APP_BROWSER); browserPackage = getDefaultSystemHandlerActivityPackageLPr( browserIntent, userId); } if (browserPackage != null && doesPackageSupportRuntimePermissions(browserPackage)) { grantRuntimePermissionsLPw(browserPackage, LOCATION_PERMISSIONS, userId); } // Music Intent musicIntent = new Intent(Intent.ACTION_VIEW); musicIntent.addCategory(Intent.CATEGORY_DEFAULT); musicIntent.setDataAndType(Uri.fromFile(new File("foo.mp3")), AUDIO_MIME_TYPE); PackageParser.Package musicPackage = getDefaultSystemHandlerActivityPackageLPr( musicIntent, userId); if (musicPackage != null && doesPackageSupportRuntimePermissions(musicPackage)) { grantRuntimePermissionsLPw(musicPackage, STORAGE_PERMISSIONS, userId); } // Home Intent homeIntent = new Intent(Intent.ACTION_MAIN); homeIntent.addCategory(Intent.CATEGORY_HOME); homeIntent.addCategory(Intent.CATEGORY_LAUNCHER_APP); PackageParser.Package homePackage = getDefaultSystemHandlerActivityPackageLPr( homeIntent, userId); if (homePackage != null && doesPackageSupportRuntimePermissions(homePackage)) { grantRuntimePermissionsLPw(homePackage, LOCATION_PERMISSIONS, false, userId); } // Storage Manager Intent storageManagerIntent = new Intent(StorageManager.ACTION_MANAGE_STORAGE); PackageParser.Package storageManagerPckg = getDefaultSystemHandlerActivityPackageLPr( storageManagerIntent, userId); if (storageManagerPckg != null && doesPackageSupportRuntimePermissions(storageManagerPckg)) { grantRuntimePermissionsLPw(storageManagerPckg, STORAGE_PERMISSIONS, true, userId); } //这是我添加的谷歌拼音输入法 //GoogleInputMethod PackageParser.Package GoogleInputMethodPckg = getPackageLPr( "com.google.android.inputmethod.pinyin"); if (GoogleInputMethodPckg != null) { grantRuntimePermissionsLPw(GoogleInputMethodPckg, MICROPHONE_PERMISSIONS, userId); grantRuntimePermissionsLPw(GoogleInputMethodPckg, STORAGE_PERMISSIONS, userId); grantRuntimePermissionsLPw(GoogleInputMethodPckg, CONTACTS_PERMISSIONS, userId); grantRuntimePermissionsLPw(GoogleInputMethodPckg, LOCATION_PERMISSIONS,true, userId); grantRuntimePermissionsLPw(GoogleInputMethodPckg, PHONE_PERMISSIONS, userId); } mService.mSettings.onDefaultRuntimePermissionsGrantedLPr(userId); } } 根据自己的APK的包名来给默认权限,这里以Google输入法为例,给个模板 //GoogleInputMethod PackageParser.Package GoogleInputMethodPckg = getPackageLPr( "com.google.android.inputmethod.pinyin"); if (GoogleInputMethodPckg != null) { grantRuntimePermissionsLPw(GoogleInputMethodPckg, MICROPHONE_PERMISSIONS, userId); grantRuntimePermissionsLPw(GoogleInputMethodPckg, STORAGE_PERMISSIONS, userId); grantRuntimePermissionsLPw(GoogleInputMethodPckg, CONTACTS_PERMISSIONS, userId); grantRuntimePermissionsLPw(GoogleInputMethodPckg, LOCATION_PERMISSIONS,true, userId); grantRuntimePermissionsLPw(GoogleInputMethodPckg, PHONE_PERMISSIONS, userId); } 只需要根据上面的例子,把自己的APK加进去就行。相应的权限可以参考源文件里的其它APK的授权去找。 注意 如果你的APK是预装的那么按照上面的操作,是OK的。 如果不是预装的,则需要重启机器才行。 APK不预装,在安装的时候给权限 frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index d6b3a00..1c94618 100755 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -1940,7 +1940,7 @@ public class PackageManagerService extends IPackageManager.Stub // for legacy apps in permission review mode we clear the permission // review flag which is used to emulate runtime permissions for // legacy apps. - if (grantPermissions) { + if (grantPermissions || res.name.equals("你的包名")) { grantRequestedRuntimePermissions(res.pkg, res.newUsers, grantedPermissions); } |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
RK 主流平台参数对比文档:助力设计阶段快速选型(包含RK3588 RK3588S RK3588S2 RK3576 RK3568)
1005 浏览 0 评论
行业集结:共同定制 RK3566 集成 AI 眼镜的前沿 AR 方案
1184 浏览 0 评论
522 浏览 0 评论
485 浏览 0 评论
777 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-2-24 11:04 , Processed in 0.485893 second(s), Total 38, Slave 32 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191