无网不进  
软硬件开发
                      Android 软件管理工具类Utils

  1 /**
  2  * Created by uilubo on 2015/9/30.
  3  * 工具类
  4  */
  5 public class Utils {
  6 
  7     public static List<AppInfo> getAppList(Context context){
  8         // 返回值集合
  9         List<AppInfo> list = new ArrayList<AppInfo>();
 10 
 11         // 实例化包管理器
 12         PackageManager pm = context.getPackageManager();
 13 
 14         // 获取所有已经安装的应用信息
 15         List<PackageInfo> pList = pm.getInstalledPackages(0);
 16 
 17         // 遍历集合
 18         for(int i = 0; i<pList.size(); i++){
 19             // 拿到元素
 20             PackageInfo packageInfo = pList.get(i);
 21             //判断是否是第三方应用 同时 不包含当前的应用的包名
 22             if(isThirdPartyApp(packageInfo.applicationInfo) &&
 23                     !packageInfo.packageName.equals(context.getPackageName())) {
 24                 // 填充实体类
 25                 AppInfo app = new AppInfo();
 26                 // 获取应用名
 27                 app.packageName = packageInfo.packageName;
 28                 app.versionName = packageInfo.versionName;
 29                 app.versionCode = packageInfo.versionCode;
 30                 app.insTime = packageInfo.firstInstallTime;
 31                 app.updTime = packageInfo.lastUpdateTime;
 32                 app.appName = (String) packageInfo.applicationInfo.loadLabel(pm);
 33                 // 获取图标
 34                 app.icon = packageInfo.applicationInfo.loadIcon(pm);
 35                 // 计算程序的大小
 36                 String dir = packageInfo.applicationInfo.publicSourceDir;
 37                 long byteSize = new File(dir).length();
 38                 // 实际大小
 39                 app.byteSize = byteSize;
 40                 // 格式化好的大小
 41                 app.size = getSize(byteSize);
 42                 list.add(app);
 43             }
 44         }
 45         return list;
 46     }
 47 
 48 
 49 
 50     /**
 51      * 判断应用是否是第三方应用
 52      * @param appInfo
 53      * @return
 54      */
 55     public static boolean isThirdPartyApp(ApplicationInfo appInfo) {
 56         boolean flag = false;
 57         if ((appInfo.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0) {
 58             // 可更新的系统应用
 59             flag = true;
 60         }
 61         else if ((appInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 0) {
 62             // 非系统应用
 63             flag = true;
 64         }
 65         return flag;
 66     }
 67 
 68 
 69 
 70     /*获取文件大小*/
 71     public static String getSize(long size){
 72         return new DecimalFormat("0.##").format(size * 1.0/(1024*1024));
 73     }
 74 
 75 
 76 
 77     /*获取时间*/
 78     public static String getTime(long millis){
 79         Date date = new Date(millis);
 80         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 81         return sdf.format(date);
 82     }
 83 
 84 
 85     /*
 86     *打开包文件
 87     */
 88     public static void openPackage(Context context, String packageName){
 89         Intent intent = context.getPackageManager().getLaunchIntentForPackage(packageName);
 90         intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
 91         context.startActivity(intent);
 92     }
 93 
 94 
 95     /*卸载APK安装包*/
 96     public static void uninstallApk(Activity context, String packageName, int requestCode){
 97         Uri uri= Uri.parse("package:"+packageName);
 98         Intent intent = new Intent(Intent.ACTION_DELETE,uri);
 99         context.startActivityForResult(intent,requestCode);
100 
101     }
102 
103 
104     public static List<AppInfo> getSearchResult(List<AppInfo> list,String key){
105         List<AppInfo> result = new ArrayList<AppInfo>();
106         for (int i= 0; i < list.size(); i++){
107             AppInfo app = list.get(i);
108             if (app.appName.toLowerCase().contains(key.toLowerCase())){
109                 result.add(app);
110             }
111         }
112         return result;
113     }
114 
115 
116 
117     public static SpannableStringBuilder highLightText(String str, String key){
118         int start = str.toLowerCase().indexOf(key.toLowerCase());// 不区分大小写
119         int end = start + key.length();
120 
121         SpannableStringBuilder sb = new SpannableStringBuilder(str);
122         sb.setSpan(
123                 new ForegroundColorSpan(Color.RED), // 前景颜色
124                 start,                              // 起始坐标
125                 end,                                // 终止坐标
126                 Spannable.SPAN_EXCLUSIVE_INCLUSIVE
127         );
128 
129         return sb;
130     }
131 
132 
133 
134 }

 

posted on 2017-12-21 17:41  无网不进  阅读(293)  评论(0编辑  收藏  举报