与Android的系统打交道

                            在Android中获取手机已经安装的apk文件信息
                    
                    -)
                        (PackageInfo,ResolvenInfo)
                        (eg:应用图片
                        应用名,包名等)
                       
        通过PackageManager 可以获取手机端已经安装的apk信息,
                            代码如下:
                            PackageManager packageManager  =
                            this.getPackagetManager();
                            List<PackageInfo> packageInfo = packagetManaget
                            .getInstallPackages(0);// 0 代表获取所有的
                           
            区分软件是系统预装 还是用户安装的:
                        a)从packageInfoList 获取的packageInfo,在通过
                        packageInfo.applicationInfo获取application
                       
                        b) 判断(application.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
                                        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); 
                                         
                                    } 
 ----------------
                 获取支持分享的应用的代码:
                                     **
                                     * 查询手机内所有支持分享的应用
                                     * @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); 
                                             
                                        } 
                                       
                                       
        获得程序的大小       
                                       
                                       
                                       
                                        //获取应用程序信息
                                            public void getpkginfo(String pkg){
                                             PackageManager pm = getPackageManager();
                                             try {
                                              Method getPackageSizeInfo = pm.getClass()
                                              .getMethod("getPackageSizeInfo", String.class,
                                                IPackageStatsObserver.class);
                                              getPackageSizeInfo.invoke(pm, pkg,
                                              new PkgSizeObserver());
                                             } catch (Exception e) {
                                              // TODO: handle exception
                                             }
                                            }
                                            class PkgSizeObserver extends IPackageStatsObserver.Stub {
                                                public void onGetStatsCompleted(PackageStats pStats, boolean succeeded) {
                                                     System.out.println("应用程序大小: "+pStats.codeSize);
                                                   
                                                 }
                                             }

                                       
                                       
          安装:
                                            //将服务器返回的byte[]形式的apk文件,保存到SD卡上
                                            String str = "/CanavaCancel.apk";
                                            String fileName = Environment.getExternalStorageDirectory() + str;
                                            Intent intent = new Intent(Intent.ACTION_VIEW);
                                            intent.setDataAndType(Uri.fromFile(new File(fileName)), "application/vnd.android.package-archive");
                                            startActivity(intent);



    卸载:
                                                Uri packageURI = Uri.parse("package:com.demo.CanavaCancel");  
                                                Intent uninstallIntent = new Intent(Intent.ACTION_DELETE, packageURI);  
                                                startActivity(uninstallIntent);
                                                Environment拥有一些可以获取环境变量的方法
                                                package:com.demo.CanavaCancel 这个形式是 package:程序完整的路径 (包名+程序名).
                                       
                           
                                       
                                       
                    总结:
                                     通过 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()

 

 
 
 
 
 
 
 
 
 
 
 

你可能感兴趣的:(Android系统,卸载程序,获取Android权限,获取Android的系统信息,远程安装APK)