本文共 4307 字,大约阅读时间需要 14 分钟。
前面,我们花了相当多的篇幅把PackageManager的公开API分门别类,并按版本顺序讲解了发展的过程。
有的同学问了,既然installer相关的API在Android 5.0才引入,那么Android 4.4及之前的应用安装的程序是怎么写出来的呢?
答案是,还有未公开的内部API啊。这些API有些在未来的版本中就被转正了。Android 4.4的不公开API大致分为以下几类:
这个API我们上节讲过,直到Android 7.0才公开。
原型:
int getPackageUid(String packageName, int userHandle) throws NameNotFoundException;
根据sharedUserNanme来获取对应的uid
原型:
int getUidForSharedUser(String sharedUserName) throws NameNotFoundException;
比起公开的API,可以指定userId.
原型:
ListgetInstalledPackages(int flags, int userId);
支持userId的resolveActivity
原型:
ResolveInfo resolveActivityAsUser(Intent intent, int flags, int userId);
支持userId的queryIntentActivities
原型:
ListqueryIntentActivitiesAsUser(Intent intent, int flags, int userId);
支持userID的queryIntentServices
原型:
ListqueryIntentServicesAsUser(Intent intent, int flags, int userId);
支持UserID的queryIntentContentProviders
原型:
ListqueryIntentContentProvidersAsUser( Intent intent, int flags, int userId);
虽然没有叫AsUser,但是还是一个增加了userId的版本。
原型:
ListqueryBroadcastReceivers(Intent intent, int flags, int userId);
生成权限操作的Intent
原型:
Intent buildPermissionRequestIntent(String... permissions);
为某个包授权
原型:
void grantPermission(String packageName, String permissionName);
回收grantPermission授予的权限
原型:
void revokePermission(String packageName, String permissionName);
公开的install相关的API要Android 5.0才有。所以Android 4.4的应用只能使用隐藏的系统API来进行install相关的操作。
安装一个包
原型:
void installPackage( Uri packageURI, IPackageInstallObserver observer, int flags, String installerPackageName);
安装一个包,同时带校验
原型:
void installPackageWithVerification(Uri packageURI, IPackageInstallObserver observer, int flags, String installerPackageName, Uri verificationURI, ManifestDigest manifestDigest, ContainerEncryptionParams encryptionParams);
不仅带校验,而且还加密。
原型:
void installPackageWithVerificationAndEncryption(Uri packageURI, IPackageInstallObserver observer, int flags, String installerPackageName, VerificationParams verificationParams, ContainerEncryptionParams encryptionParams);
安装一个已经存在的包
原型:
int installExistingPackage(String packageName) throws NameNotFoundException;
uninstall一个应用
原型:
void deletePackage( String packageName, IPackageDeleteObserver observer, int flags);
清理应用数据
原型:
void clearApplicationUserData(String packageName,IPackageDataObserver observer);
清理应用缓存
原型:
public void deleteApplicationCacheFiles(String packageName, IPackageDataObserver observer);
清理存储
原型:
void freeStorageAndNotify(long freeStorageSize, IPackageDataObserver observer);
清理存储的另一个版本
原型:
void freeStorage(long freeStorageSize, IntentSender pi);
获取包的大小
原型:
void getPackageSizeInfo(String packageName, int userHandle, IPackageStatsObserver observer);
多用户版:
原型:void getPackageSizeInfo(String packageName, IPackageStatsObserver observer);
原型:
ComponentName getHomeActivities(ListoutActivities);
虽然不uninstall,但是使应用进入不可用的状态。
设置blocking
原型:
boolean setApplicationBlockedSettingAsUser(String packageName, boolean blocked,UserHandle userHandle);
读取blocking
boolean getApplicationBlockedSettingAsUser(String packageName,UserHandle userHandle);
原型:
void movePackage(String packageName, IPackageMoveObserver observer, int flags);
原型:
VerifierDeviceIdentity getVerifierDeviceIdentity();
原型:
static String getDataDirForUser(int userId, String packageName);
转载地址:http://tdsao.baihongyu.com/