getPackageManager
Android的应用管理主要是通过PackageManagerService来完成的。
PackageManagerService服务负责各种APK包的安装、卸载、优化和查询。
PackageManagerService在启动时会扫描所有的APK文件和Jar包,然后把他们的信息读取出来,保存在内存中,这样系统在运行时就能迅速找到各种应用和组件的信息。
扫描过程中如果遇到没有优化的文件,还要执行转换工作,将app文件从dex格式转换为oat格式(Android5.0之前是转换为odex格式)。
packageInfo
PackageInfo用于描述mainfest中所有描述信息。
字段 | 含义 |
---|---|
public String packageName | 包名 |
public String[] splitNames | |
public int versionCode | 版本号 |
public String versionName | 版本名称 |
public ApplicationInfo applicationInfo | |
public long firstInstallTime | 第一次安装时间 |
public long lastUpdateTime | 上次更新时间 |
public ActivityInfo[] activities | 所有的Activity信息 |
public ActivityInfo[] receivers | 所有的广播接收者 |
public ServiceInfo[] services | 所有的服务信息 |
public ProviderInfo[] providers | 获取ContentProvide |
public PermissionInfo[] permissions | 所有的权限信息 |
接口:
PackageInfo packageInfo = packageManager.getPackageInfo(
context.getApplicationInfo().packageName, 0);
applicationInfo
ApplicationInfo描述应用程序的基本信息
字段 | 含义 |
---|---|
public String taskAffinity | |
public String permission | 权限 |
public String processName | 名字 |
public String className | 类名 |
public int descriptionRes | |
public static final int FLAG_SYSTEM = 1<<0 | 系统应用 |
public static final int FLAG_EXTERNAL_STORAGE = 1<<18 | 安装在外部存储卡 |
public static final int FLAG_LARGE_HEAP = 1<<20 | 支持大内存 |
实战
package com.exmple.packgetest;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Context;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.util.Log;
import java.util.List;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getAllAppNames();
}
public void getAllAppNames(){
PackageManager pm=getPackageManager();
////获取到所有安装了的应用程序的信息,包括那些卸载了的,但没有清除数据的应用程序
List<PackageInfo> list2=pm.getInstalledPackages(PackageManager.GET_UNINSTALLED_PACKAGES);
int j=0;
for (PackageInfo packageInfo : list2) {
//得到手机上已经安装的应用的名字,即在AndriodMainfest.xml中的app_name。
String appName=packageInfo.applicationInfo.loadLabel(getPackageManager()).toString();
//得到手机上已经安装的应用的图标,即在AndriodMainfest.xml中的icon。
Drawable drawable = packageInfo.applicationInfo.loadIcon(getPackageManager());
//得到应用所在包的名字,即在AndriodMainfest.xml中的package的值。
String packageName=packageInfo.packageName;
Log.e("=======aaa", "应用的名字:"+appName);
Log.e("=======bbbb", "应用的包名字:"+packageName);
j++;
}
Log.e("========cccccc", "应用的总个数:"+j);
}
}
执行结果:
log截取:
2020-11-30 14:59:36.186 29953-29953/com.exmple.packgetest E/=======aaa: 应用的名字:信息
2020-11-30 14:59:36.186 29953-29953/com.exmple.packgetest E/=======bbbb: 应用的包名字:com.samsung.android.messaging
2020-11-30 14:59:36.191 29953-29953/com.exmple.packgetest E/=======aaa: 应用的名字:融合定位
2020-11-30 14:59:36.191 29953-29953/com.exmple.packgetest E/=======bbbb: 应用的包名字:com.baidu.location.fused
2020-11-30 14:59:36.191 29953-29953/com.exmple.packgetest E/=======aaa: 应用的名字:com.android.backupconfirm
2020-11-30 14:59:36.191 29953-29953/com.exmple.packgetest E/=======bbbb: 应用的包名字:com.android.backupconfirm
2020-11-30 14:59:36.198 29953-29953/com.exmple.packgetest E/=======aaa: 应用的名字:KLMS Agent
2020-11-30 14:59:36.198 29953-29953/com.exmple.packgetest E/=======bbbb: 应用的包名字:com.samsung.klmsagent
2020-11-30 14:59:36.202 29953-29953/com.exmple.packgetest E/=======aaa: 应用的名字:提示
2020-11-30 14:59:36.202 29953-29953/com.exmple.packgetest E/=======bbbb: 应用的包名字:com.samsung.android.app.tips
2020-11-30 14:59:36.207 29953-29953/com.exmple.packgetest E/=======aaa: 应用的名字:SmartFittingService
2020-11-30 14:59:36.207 29953-29953/com.exmple.packgetest E/=======bbbb: 应用的包名字:com.samsung.android.smartfitting
2020-11-30 14:59:36.220 29953-29953/com.exmple.packgetest E/=======aaa: 应用的名字:三星安装向导
2020-11-30 14:59:36.220 29953-29953/com.exmple.packgetest E/=======bbbb: 应用的包名字:com.sec.android.app.SecSetupWizard
2020-11-30 14:59:36.228 29953-29953/com.exmple.packgetest E/=======aaa: 应用的名字:分享至电脑
2020-11-30 14:59:36.228 29953-29953/com.exmple.packgetest E/=======bbbb: 应用的包名字:com.samsung.android.mtpshareapp
2020-11-30 14:59:36.233 29953-29953/com.exmple.packgetest E/=======aaa: 应用的名字:BstSpamCallService
2020-11-30 14:59:36.233 29953-29953/com.exmple.packgetest E/=======bbbb: 应用的包名字:com.bst.spamcall
2020-11-30 14:59:36.236 29953-29953/com.exmple.packgetest E/=======aaa: 应用的名字:Activation
2020-11-30 14:59:36.236 29953-29953/com.exmple.packgetest E/=======bbbb: 应用的包名字:com.samsung.android.activation
2020-11-30 14:59:36.288 29953-29953/com.exmple.packgetest E/=======aaa: 应用的名字:通话设置
网友评论