获取android手机中已安装应用信息以及应用安装和卸载代码集合

清华大佬耗费三个月吐血整理的几百G的资源,免费分享!....>>>

很多APP都有推荐应用列表,但是我发现大量的app里的应用推荐没有显示本机是否已经安装了应用,

只要点击都会直接下载推荐的应用;

当然他们这么做显然是想换量来推广,但是这样用户体验就不好了,

本来用户手机上已经安装了该应用,正常情况下推荐应用列表那里应该显示已安装!

(随便选了一个应用如下图都是不显示用户是否已经安装)

那我们要做这种功能,就需要判断已安装应用和应用的已下载未安装,等等一些方法!

/** 
     * 是否已经安装该应用 
     * @param context 
     * @param apk_package 包名 
     * @return 
     */  
    public static boolean isInstallApp(Context context, String apk_package) {  
        PackageInfo packageInfo;  
        try {  
            packageInfo = context.getPackageManager().getPackageInfo(  
                    apk_package, 0);  
        } catch (NameNotFoundException e) {  
            packageInfo = null;  
            e.printStackTrace();  
        }  
        if(packageInfo !=null ){  
                return true;  
        }  
        return false;  
    }  
      
    /** 
     * 遍历一个路径下的文件夹内的指定文件 
     * @param Path 搜索目录 
     * @param Extension 扩展名(判断的文件类型的后缀名) 
     * @param IsIterative  是否进入子文件夹   
     * @return 
     */  
    public static final List<String> GetFiles(String Path, String Extension,boolean IsIterative)  {    
        List<String> apklist = new ArrayList<String>(); // 结果 List     
        try {  
            File[] files = new File(Path).listFiles();    
            for (int i = 0; i < files.length; i++) {    
                File f = files[i];    
                if (f.isFile()) {    
                    if (f.getPath() .substring(f.getPath().length() - Extension.length()) .equals(Extension)) // 判断扩展名     
                        apklist.add(f.getPath());    
                    if (!IsIterative)    
                        break;  //如果不进入子集目录则跳出     
                } else if (f.isDirectory() && f.getPath().indexOf("/.") == -1) // 忽略点文件(隐藏文件/文件夹)     
                    GetFiles(f.getPath(), Extension, IsIterative);  //这里就开始递归了     
            }    
        } catch (Exception e) {  
            // TODO: handle exception  
            e.printStackTrace();  
        }  
        return apklist;    
    }   
      
    /** 
     * 根据本地路径安装apk 
     * @param apk_url 
     */  
    public static void installApkFromLocalPath(Context context,String apk_url){   
        try {  
            Intent intent = new Intent(Intent.ACTION_VIEW);   
            intent.setDataAndType(Uri.fromFile(new File(apk_url)), "application/vnd.android.package-archive");   
            context.startActivity(intent);   
        } catch (Exception e) {  
            // TODO: handle exception  
            e.printStackTrace();  
        }  
    }   
    /** 
     * 卸载应用 
     * @param context 
     * @param apk_pkg 包名 
     */  
    public static void unInstallApkFromPackage(Context context,String apk_pkg){   
        try {  
            Intent intent = new Intent(Intent.ACTION_DELETE);   
            intent.setData(Uri.parse("package:"+apk_pkg));  
            context.startActivity(intent);   
        } catch (Exception e) {  
            // TODO: handle exception  
            e.printStackTrace();  
        }  
    }   
    /** 
     * 根据包名打开另外一个应用 
     * @param context 
     * @param apk_pkg 包名 
     */  
    public static void openApkFromPackage(Context context,String apk_pkg){   
        try {  
            Intent intent = new Intent(Intent.ACTION_VIEW);     
            intent.setComponent(new ComponentName(context, apk_pkg));     
            context.startActivity(intent);    
        } catch (Exception e) {  
            // TODO: handle exception  
            e.printStackTrace();  
        }  
    }