美文网首页
android之获取所有的app(getPackageManag

android之获取所有的app(getPackageManag

作者: Lee_5566 | 来源:发表于2020-12-11 10:02 被阅读0次
    image.png

    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: 应用的名字:通话设置
    
    

    相关文章

      网友评论

          本文标题:android之获取所有的app(getPackageManag

          本文链接:https://www.haomeiwen.com/subject/hmwrwktx.html