博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android应用生死轮回的那些事儿(7) - PackageManager的不公开API
阅读量:6686 次
发布时间:2019-06-25

本文共 4307 字,大约阅读时间需要 14 分钟。

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
getInstalledPackages(int flags, int userId);

resolveActivityAsUser

支持userId的resolveActivity

原型:

ResolveInfo resolveActivityAsUser(Intent intent, int flags, int userId);

queryIntentActivitiesAsUser

支持userId的queryIntentActivities

原型:

List
queryIntentActivitiesAsUser(Intent intent, int flags, int userId);

queryIntentServicesAsUser

支持userID的queryIntentServices

原型:

List
queryIntentServicesAsUser(Intent intent, int flags, int userId);

queryIntentContentProvidersAsUser

支持UserID的queryIntentContentProviders

原型:

List
queryIntentContentProvidersAsUser( Intent intent, int flags, int userId);

queryBroadcastReceivers

虽然没有叫AsUser,但是还是一个增加了userId的版本。

原型:

List
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
outActivities);

Block应用相关

虽然不uninstall,但是使应用进入不可用的状态。

setApplicationBlockedSettingAsUser

设置blocking

原型:

boolean setApplicationBlockedSettingAsUser(String packageName, boolean blocked,UserHandle userHandle);

getApplicationBlockedSettingAsUser

读取blocking

boolean 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);

转载地址:http://tdsao.baihongyu.com/

你可能感兴趣的文章
在网站建设过程中主要在哪几个方面为后期的网站优打好根基?
查看>>
【MOS】RAC 环境中最常见的 5 个数据库和/或实例性能问题 (文档 ID 1602076.1)
查看>>
新年图书整理和相关的产品
查看>>
Struts2的核心文件
查看>>
Spring Boot集成Jasypt安全框架
查看>>
GIS基础软件及操作(十)
查看>>
HDOJ 2041 超级楼梯
查看>>
1108File Space Bitmap Block损坏能修复吗2
查看>>
遭遇DBD::mysql::dr::imp_data_size unexpectedly
查看>>
人人都会设计模式:03-策略模式--Strategy
查看>>
被忽视但很实用的那部分SQL
查看>>
解读阿里云oss-android/ios-sdk 断点续传(多线程)
查看>>
ML之监督学习算法之分类算法一 ——— 决策树算法
查看>>
骡夫电商地址
查看>>
亚信安全火力全开猎捕“坏兔子”,全歼详解
查看>>
智能家居——IoT零基础入门篇
查看>>
《Linux From Scratch》第一部分:介绍 第一章:介绍-1.3. 更新日志
查看>>
阿里将在雄安新区设3家子公司:涉AI、蚂蚁金服和菜鸟;北航设立全国首个人工智能专业,与百度合作办学...
查看>>
Powershell指令集_2
查看>>
归并排序算法
查看>>