`
kalogen
  • 浏览: 878170 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

安装apk包时怎么判断这个apk是不是已经安装了呢?

 
阅读更多
这个相关的帖子比较多
PackageManager packageManager = this.getPackageManager();
List<PackageInfo> packageInfoList = packageManager.getInstalledPackages(0);

通过以上方法,可以得到手机中安装的所有应用程序,既包括了手动安装的apk包的信息,也包括了系统预装的应用软件的信息,要区分这两类软件可使用以下方法:

a.从packageInfoList获取的packageInfo,再通过packageInfo.applicationInfo获取applicationInfo。

b.判断(applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM)的值,该值大于0时,表示获取的应用为系统预装的应用,反之则为手动安装的应用。

大家可以看下代码,说明已经写在注释中。

获取应用的代码:



/**
  * 查询手机内非系统应用
  * @param context
  * @return
  */
public static List<PackageInfo> getAllApps(Context context) {
  List<PackageInfo> apps = new ArrayList<PackageInfo>();
  PackageManager pManager = context.getPackageManager();
  //获取手机内所有应用
  List<PackageInfo> paklist = pManager.getInstalledPackages(0);
  for (int i = 0; i < paklist.size(); i++) {
   PackageInfo pak = (PackageInfo) paklist.get(i);
   //判断是否为非系统预装的应用程序
   if ((pak.applicationInfo.flags & pak.applicationInfo.FLAG_SYSTEM) <= 0) {
    // customs applications
    apps.add(pak);
   }
  }
  return apps;
}



获取图片、应用名、包名:

                      PackageManager pManager = MessageSendActivity.this.getPackageManager();
                     List<PackageInfo> appList  = Utils.getAllApps(MessageSendActivity.this);
                    
                     for(int i=0;i<appList.size();i++) {
                      PackageInfo pinfo = appList.get(i);
                      ShareItemInfo shareItem = new ShareItemInfo();
                      //set Icon
                      shareItem.setIcon(pManager.getApplicationIcon(pinfo.applicationInfo));
                      //set Application Name
                      shareItem.setLabel(pManager.getApplicationLabel(pinfo.applicationInfo).toString());
                      //set Package Name
                      shareItem.setPackageName(pinfo.applicationInfo.packageName);
                     
                     }



其中 ShareItemInfo 类是我本地自定义的,各位可以忽略!

另为,有人可能在找 分享应用列表,在此一并说下吧。

获取支持分享的应用的代码:

  /**
  * 查询手机内所有支持分享的应用
  * @param context
  * @return
  */
public static List<ResolveInfo> getShareApps(Context context){
     List<ResolveInfo> mApps = new ArrayList<ResolveInfo>();
     Intent intent=new Intent(Intent.ACTION_SEND,null);
     intent.addCategory(Intent.CATEGORY_DEFAULT);
     intent.setType("text/plain");
     PackageManager pManager = context.getPackageManager();
     mApps = pManager.queryIntentActivities(intent,PackageManager.COMPONENT_ENABLED_STATE_DEFAULT);
   
     return mApps;
}

由于该方法,返回的并不是 PackageInfo 对象。而是 ResolveInfo。因此获取图片、应用名、包名的方法不一样,如下:

                      PackageManager pManager = MessageSendActivity.this.getPackageManager();
                    
                     /*********************查询手机内所有支持分享的应用*********************/
                     List<ResolveInfo> resolveList  = Utils.getShareApps(MessageSendActivity.this);
                    
                     for(int i=0;i<resolveList.size();i++) {
                      ResolveInfo resolve = resolveList.get(i);
                      ShareItemInfo shareItem = new ShareItemInfo();
                      //set Icon
                      shareItem.setIcon(resolve.loadIcon(pManager));
                      //set Application Name
                      shareItem.setLabel(resolve.loadLabel(pManager).toString());
                      //set Package Name
                      shareItem.setPackageName(resolve.activityInfo.packageName);
                     
                     }

总结:

通过 PackageInfo  获取具体信息方法:


包名获取方法:packageInfo.packageName

icon获取获取方法:packageManager.getApplicationIcon(applicationInfo)

应用名称获取方法:packageManager.getApplicationLabel(applicationInfo)

使用权限获取方法:packageManager.getPackageInfo(packageName,PackageManager.GET_PERMISSIONS)

.requestedPermissions


通过 ResolveInfo 获取具体信息方法:


包名获取方法:resolve.activityInfo.packageName

icon获取获取方法:resolve.loadIcon(packageManager)

应用名称获取方法:resolve.loadLabel(packageManager).toString()
分享到:
评论

相关推荐

    1个apk安装另一个apk,安装多个apk

    这样,当你在一个APK中调用这段代码时,它会尝试安装指定的APK文件。 4. **安装多个APK** 要安装多个APK,你可以循环执行上述步骤,每次更换不同的APK文件路径。确保在每个安装流程之间给予足够的时间,因为安装...

    多台手机批量安装apk

    把要安装的apk放入一个文件夹,选中这个文件夹,插上电脑,就自动安装,只要你有多少个U口,就能同时安装多少台手机。 我500台note2,半小时装好了。哈哈。 若你会修改原厂rom,可以给我发邮件,我想把apk打包到rom里...

    利用BundleTool从aab包获取apk安装大小以及安装apk到手机

    本篇文章将详细介绍如何利用`BundleTool`从AAB包获取APK的安装大小,并实现在手机上的安装步骤。 首先,我们需要理解AAB(Android App Bundle)与传统的APK的区别。AAB是一种新的发布格式,它允许Google Play Store...

    Android 更新下载apk 安装apk 打开apk

    3. **签名验证**:每个APK在构建时都会被签名,安装时系统会验证签名以确保APK未被篡改。签名也有助于确认应用的发布者。 4. **权限请求**:在Android 6.0及以上版本,部分权限在运行时动态请求,而非安装时一次性...

    APK文件的安装方法

    - **apkInstaller.exe**: 这是一个Windows系统的工具,用于在电脑上安装APK文件到连接的Android设备。首先,确保手机通过USB连接到电脑,并开启USB调试模式。然后运行apkInstaller.exe,选择要安装的APK文件,点击...

    Apk.1安装器 1.9版本

    然而,在某些情况下,如通过微信分享APK文件时,可能会遇到"apk.1"这样的文件,这是由于微信内置的安全机制所导致的一个常见问题。 标题"Apk.1安装器 1.9版本"表明这是一个专门解决"apk.1"问题的工具。通常,微信在...

    Android 7.0下载安装APK

    本文将详细讲解如何在Android 7.0设备上下载并安装APK应用,以及在这个版本中与APK安装相关的知识点。 1. **APK 文件**:APK 是 Android 应用程序的安装包,类似于 Windows 上的 .exe 文件。它包含了应用的代码、...

    adb 命令安装 apk 到多个 devices

    在标题“adb命令安装apk到多个devices”中,重点是利用adb批量安装APK文件到多个Android设备或模拟器上,这对于开发者进行测试或分发应用非常方便。 首先,了解adb的基本用法。在命令行中,我们通常使用`adb ...

    Android 下载APK 安装APK 打开APK

    2. 构建启动Intent:创建一个ACTION_MAIN和CATEGORY_LAUNCHER类型的Intent,设置数据URI为新安装应用的包名。 3. 启动应用:调用startActivity()启动目标应用。 在实际开发中,为了实现上述功能,开发者需要对...

    Unity中安装APK

    这段代码通过Intent启动了一个用于查看APK文件的操作,从而触发安装过程。 #### 3. 构建原生库 使用Android NDK构建上述Java代码,生成.so文件,并将其放置在Unity项目的`Plugins/Android`目录下。 #### 4. 编写C#...

    APK包名查看器(APK信息查看器)

    标题中的“APK包名查看器”是一款专用于查看Android应用程序(APK)包名的工具,它允许用户在电脑上无需安装额外的管理软件就能获取APK的相关信息。描述中提到,用户通常可能需要这样的工具来快速查看APK的包名,而...

    unity调用安卓安装apk文件(支持安卓9)

    unity调用安卓方法实现apk文件的安装。亲测支持安卓7,8,9。附有安卓源码在MyApplication目录下面。请用unity2018.2.13以上版本打开。直接在unity打包安卓即可测试。如果出现打包失败的报错可能是你把项目解压到了...

    apk静默安装apk

    在APK项目中,`assets`目录是一个可以存放任意文件的地方,开发者可以将需要静默安装的其他APK文件放在这个目录下。在应用程序运行时,可以通过读取`assets`目录中的APK文件,然后调用相应的API进行安装。 为了实现...

    Hyper-V系列:windows11开启系统自带安卓虚拟机并安装apk包

    Hyper-V系列:windows11开启系统自带安卓虚拟机并安装apk包

    为Deepin/UOS上的UEngine安卓运行环境安装自定义APK软件包,并能发送安装的APK包启动菜单到桌面或系统菜单

    可以在应用商店安装部分官方已适配的安卓应用,对爱好者来说,不能自己安装APK软件包始终差点意思,本程序可以为Deepin/UOS上的Uengine安卓运行环境安装/卸载/打包自定义APK软件包,并能发送安装的APK包启动菜单到...

    查看apk包名

    这个包名在Android系统中起到区分不同应用的作用,同时在安装和更新时也至关重要。 标题“查看apk包名”指的是一种能够快速获取APK文件包名的方法。在这种情况下,描述中提到的应用程序提供了一个便捷的方式,只需...

    APK包名查看软件工具

    APK包名查看软件工具是一种专门针对Android应用的实用程序,它的主要功能是帮助用户获取APK安装包的包名信息。在Android开发过程中,包名(Package Name)扮演着至关重要的角色,它是应用程序的唯一标识,类似于...

    Genymotion安装Apk库

    在使用Genymotion时,理解Apk库的管理和安装流程是至关重要的,这有助于提升开发效率,特别是在进行多应用集成测试或对不常见设备配置进行兼容性验证时。同时,确保始终从可靠来源获取Apk,以避免潜在的安全风险。

    apk安装器android

    5. **权限管理**:安装APK时,系统会提示需要的权限列表,用户需谨慎评估后再决定是否继续。了解每个权限的含义可以帮助用户避免不必要的隐私泄露。 6. **兼容性问题**:并非所有APK都适用于所有版本的Android系统...

    apk打包解包工具

    这个过程通常由Android Studio完成,包括编译源码、生成Dalvik字节码(DEX文件)、资源压缩和打包成APK。打包过程中还会对应用进行签名,确保其来源的可信性。 2. **APK解包**:解包APK是为了查看或修改内部内容,...

Global site tag (gtag.js) - Google Analytics