Android应用生死轮回的那些事儿(7) - PackageManager的不公开API
2016-08-17 19:59
519 查看
Android应用生死轮回的那些事儿(7) - PackageManager的不公开API
前面,我们花了相当多的篇幅把PackageManager的公开API分门别类,并按版本顺序讲解了发展的过程。有的同学问了,既然installer相关的API在Android 5.0才引入,那么Android 4.4及之前的应用安装的程序是怎么写出来的呢?
答案是,还有未公开的内部API啊。
这些API有些在未来的版本中就被转正了。
Android 4.4时代的隐藏API
Android 4.4的不公开API大致分为以下几类:uid相关:uid相关查询没有公开
多用户相关:用户相关的可能不宜公开吧
权限相关:提供比公开版更高的权限
安装和清理相关:核心功能在这一版还没有公开
Uid相关
getPackageUid
这个API我们上节讲过,直到Android 7.0才公开。原型:
int getPackageUid(String packageName, int userHandle) throws NameNotFoundException;
getUidForSharedUser
根据sharedUserNanme来获取对应的uid原型:
int getUidForSharedUser(String sharedUserName) throws NameNotFoundException;
跟用户ID相关
getInstalledPackages(flags,userId)
比起公开的API,可以指定userId.原型:
List<PackageInfo> getInstalledPackages(int flags, int userId);
resolveActivityAsUser
支持userId的resolveActivity原型:
ResolveInfo resolveActivityAsUser(Intent intent, int flags, int userId);
queryIntentActivitiesAsUser
支持userId的queryIntentActivities原型:
List<ResolveInfo> queryIntentActivitiesAsUser(Intent intent, int flags, int userId);
queryIntentServicesAsUser
支持userID的queryIntentServices原型:
List<ResolveInfo> queryIntentServicesAsUser(Intent intent, int flags, int userId);
queryIntentContentProvidersAsUser
支持UserID的queryIntentContentProviders原型:
List<ResolveInfo> queryIntentContentProvidersAsUser( Intent intent, int flags, int userId);
queryBroadcastReceivers
虽然没有叫AsUser,但是还是一个增加了userId的版本。原型:
List<ResolveInfo> queryBroadcastReceivers(Intent intent, int flags, int userId);
权限相关
buildPermissionRequestIntent
生成权限操作的Intent原型:
Intent buildPermissionRequestIntent(String... permissions);
grantPermission
为某个包授权原型:
void grantPermission(String packageName, String permissionName);
revokePermission
回收grantPermission授予的权限原型:
void revokePermission(String packageName, String permissionName);
安装相关
公开的install相关的API要Android 5.0才有。所以Android 4.4的应用只能使用隐藏的系统API来进行install相关的操作。installPackage
安装一个包原型:
void installPackage( Uri packageURI, IPackageInstallObserver observer, int flags, String installerPackageName);
installPackageWithVerification
安装一个包,同时带校验原型:
void installPackageWithVerification(Uri packageURI, IPackageInstallObserver observer, int flags, String installerPackageName, Uri verificationURI, ManifestDigest manifestDigest, ContainerEncryptionParams encryptionParams);
installPackageWithVerificationAndEncryption
不仅带校验,而且还加密。原型:
void installPackageWithVerificationAndEncryption(Uri packageURI, IPackageInstallObserver observer, int flags, String installerPackageName, VerificationParams verificationParams, ContainerEncryptionParams encryptionParams);
installExistingPackage
安装一个已经存在的包原型:
int installExistingPackage(String packageName) throws NameNotFoundException;
deletePackage
uninstall一个应用原型:
void deletePackage( String packageName, IPackageDeleteObserver observer, int flags);
清理数据相关
clearApplicationUserData
清理应用数据原型:
void clearApplicationUserData(String packageName,IPackageDataObserver observer);
deleteApplicationCacheFiles
清理应用缓存原型:
public void deleteApplicationCacheFiles(String packageName, IPackageDataObserver observer);
freeStorageAndNotify
清理存储原型:
void freeStorageAndNotify(long freeStorageSize, IPackageDataObserver observer);
freeStorage
清理存储的另一个版本原型:
void freeStorage(long freeStorageSize, IntentSender pi);
getPackageSizeInfo
获取包的大小原型:
void getPackageSizeInfo(String packageName, int userHandle, IPackageStatsObserver observer);
多用户版:
原型:
void getPackageSizeInfo(String packageName, IPackageStatsObserver observer);
获取桌面应用名称
原型:ComponentName getHomeActivities(List<ResolveInfo> outActivities);
Block应用相关
虽然不uninstall,但是使应用进入不可用的状态。setApplicationBlockedSettingAsUser
设置blocking原型:
boolean setApplicationBlockedSettingAsUser(String packageName, boolean blocked, UserHandle userHandle);
getApplicationBlockedSettingAsUser
读取blockingboolean getApplicationBlockedSettingAsUser(String packageName, UserHandle userHandle);
应用在内置和外置存储中移动 - movePackage
原型:void movePackage(String packageName, IPackageMoveObserver observer, int flags);
杂项信息获取类
获取设备ID - getVerifierDeviceIdentify
原型:VerifierDeviceIdentity getVerifierDeviceIdentity();
获取用户的数据目录
原型:static String getDataDirForUser(int userId, String packageName);
相关文章推荐
- Android应用生死轮回的那些事儿(2) - PackageManager
- Android应用之信用卡管家源代码公开分享
- 使用Google Map Api在Android平台上开发地图应用1
- 忆龙2009:ANDROID应用《教你玩魔方》源代码公开了
- Android应用开发中如何使用隐藏API
- android应用警告:Application does not specify an API level requirement
- Android新增API之AudioEffect中文API与应用实例
- 【PackageManager】Android获取已安装应用信息(图标,名称,版本号,包)
- Android 原生应用使用@hide api
- Android Map API与Android Location API 开发应用
- Android开发之API应用指南
- 使用Google Map Api在Android平台上开发地图应用2
- 【NFC在android中的应用API】
- Android应用开发中如何使用隐藏API
- 【NFC在android中的应用API】
- android 使用MideaPlayer API来播放简单的应用
- Android应用开发中如何使用隐藏API(转)
- [置顶] Android应用开发中如何使用隐藏的API
- Android应用开发中如何使用隐藏API
- Android开发之API应用指南