• Android菜鸟笔记- 获取未安装的APK图标、版本号、包名、名称、是否安装、安装、打开


    周末闲来无事,把Android的基础知识拿出来复习复习,今天主题是《获取未安装的APK图标、版本号、包名、名称、是否安装、跳转安装、打开》

    一、获取APK图标

    通常读取APK的图标能够用,PackageManager里面的getApplicationIcon(ApplicationInfo)来得到一个drawable。但实际使用的时候常常仅仅能得到一个默认的图标。根本不是APK的图标。

    參考小米开源文件管理器,结合实践,代码例如以下:

    /*
         * 採用了新的办法获取APK图标。之前的失败是由于android中存在的一个BUG,通过
         * appInfo.publicSourceDir = apkPath;来修正这个问题,详情參见:
         * http://code.google.com/p/android/issues/detail?id=9151
         */
        public static Drawable getApkIcon(Context context, String apkPath) {
            PackageManager pm = context.getPackageManager();
            PackageInfo info = pm.getPackageArchiveInfo(apkPath,
                    PackageManager.GET_ACTIVITIES);
            if (info != null) {
                ApplicationInfo appInfo = info.applicationInfo;
                appInfo.sourceDir = apkPath;
                appInfo.publicSourceDir = apkPath;
                try {
                    return appInfo.loadIcon(pm);
                } catch (OutOfMemoryError e) {
                    Log.e("ApkIconLoader", e.toString());
                }
            }
            return null;
        }

    下面代码段中PackageManager、PackageInfo、ApplicationInfo均同上面一致。

    二、获取APK名称

    String label = appInfo.loadLabel(mPackManager).toString();


    三、获取APK包名

    String packageName = appInfo.packageName;


    四、获取APK版本号

    String version = info.versionName==null?

    "0":info.versionName


    五、推断APK是否安装

    private boolean isApkInstalled(String packagename)
    	  {
    	    PackageManager localPackageManager = getPackageManager();
    	    try
    	    {
    	      PackageInfo localPackageInfo = localPackageManager.getPackageInfo(packagename, PackageManager.GET_UNINSTALLED_PACKAGES);
    	      return true;
    	    }
    	    catch (PackageManager.NameNotFoundException localNameNotFoundException)
    	    {
    	     return false;
    	    }
    	    
    	  }


    六、安装APK

     private void installAPK(String apkPath)
    	 {
    		 Intent intent = new Intent();
    		 intent.setAction(Intent.ACTION_VIEW);
    		 intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    		 intent.setDataAndType(Uri.parse("file://" + apkPath),
    					"application/vnd.android.package-archive");
    		 mContext.startActivity(intent);
    	 }

    七、打开APK

    </pre><pre name="code" class="java"> private void openAPK(String packagename)
    	 {
    		   PackageManager packageManager = mContext.getPackageManager(); 
    		   Intent intent=new Intent(); 
    		   intent =packageManager.getLaunchIntentForPackage(packagename); 
    		   mContext.startActivity(intent);
    	 }

    Ps.关于APK的静默安装还在研究中...



  • 相关阅读:
    scrapy-redis使用以及剖析
    框架----Django之ModelForm组件
    框架----Django内置Admin
    django2.0集成xadmin0.6报错集锦
    为什么有些编程语言的数组要从零开始算
    Ubuntu安装Python3 和卸载
    安装MariaDB和简单配置
    ubuntu配置Python-Django Nginx+uwsgi 安装配置
    windows通过ssh连接虚拟机中的ubuntu步骤
    mysql数据库的相关练习题及答案
  • 原文地址:https://www.cnblogs.com/lytwajue/p/7079927.html
Copyright © 2020-2023  润新知