zoukankan      html  css  js  c++  java
  • 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的静默安装还在研究中...



  • 相关阅读:
    Grid++Report 报表开发工具
    docker(1):virtualbox 安装CoreOS系统,配置registry-mirror
    [Network]Introduction and Basic concepts
    Java进程堆外内存(off heap)大小
    可设置指定时间自己主动消失的 MessageBox实现
    《iOS Human Interface Guidelines》——Wallet
    什么是OpenStack
    Filters.h各种信号恢复滤波器头文件
    Android时间轴效果,直接使用在你的项目中
    浅析C++多重继承
  • 原文地址:https://www.cnblogs.com/lytwajue/p/7079927.html
Copyright © 2011-2022 走看看