問題描述 讀取正在運行程序失敗阿拉伯語言
// 應用程序包管理器
PackageManager pm = context.getPackageManager();
每個國家對文字的表示方式都不同 比如阿拉伯語言的數字 不是以數字表示的 而linux 系統內部對數據的存儲id 是以 數字的形式存儲的
這樣如果要用手機程序的id 獲取信息就會獲取失敗
那我們在讀取之前將其設置成英文 讀取完成之後在轉換成默認語言
//多語言設置有的國家非數字展示 將其轉換爲英文讀取 結束之後 在Local.setDefault(Local.default)恢復默認即可
//開始設置
Locale defaultLocale = Locale.getDefault();
Locale.setDefault(Locale.US);
//結束之後 在Local.setDefault(Local.default)恢復默認即可
Locale.setDefault(defaultLocale);
這樣就能完美解決問題了
貼一段代碼吧
public static List<ProcessInfo> getTaskInfos1(Context context) {
//ProcessWhiteDao filterdao = ProcessWhiteDao.getInstance(context);
//List<String> whiteprocess = filterdao.findAll();
// 應用程序管理器
ActivityManager am = (ActivityManager) context.getSystemService(context.ACTIVITY_SERVICE);
// 應用程序包管理器
PackageManager pm = context.getPackageManager();
//多語言設置有的國家非數字展示 將其轉換爲英文讀取 結束之後 在Local.setDefault(Local.default)恢復默認即可
Locale defaultLocale = Locale.getDefault();
Locale.setDefault(Locale.US);
// 獲取正在運行的程序信息, 就是以下粗體的這句代碼,獲取系統運行的進程 要使用這個方法,需要加載
List<AndroidAppProcess> processInfos = getRunningAppProcesses();
List<ProcessInfo> taskinfos = new ArrayList<ProcessInfo>();
// 遍歷運行的程序,並且獲取其中的信息
if (processInfos!=null) {
loop:for (AndroidAppProcess processInfo : processInfos) {
ProcessInfo taskinfo = new ProcessInfo();
// 應用程序的包名
String packname = processInfo.name;
taskinfo.setChecked(true);
// 獲取應用程序的內存 信息
android.os.Debug.MemoryInfo[] memoryInfos = am.getProcessMemoryInfo(new int[] { processInfo.pid });
long memsize = memoryInfos[0].getTotalPrivateDirty() * 1024L;
if(memsize<1048576L){
continue;
}
taskinfo.setMemSize(memsize);
if(packname.contains(":")){
packname =packname.split(":")[0];
}
// if(whiteprocess.contains(packname)){
// continue;
// }
if(packname.contains("com.android") || packname.contains("cm.security") ||packname.contains("android") ||
packname.contains("launcher") ||packname.contains("input")||
packname.contains("home") ||packname.contains(THIS_APP_PACKAGE_NAME)){
continue;
}
taskinfo.setPackName(packname);
try {
// 獲取應用程序信息
ApplicationInfo applicationInfo = pm.getApplicationInfo(packname, 0);
Drawable icon = applicationInfo.loadIcon(pm);
taskinfo.setAppIcon(icon);
String appname = applicationInfo.loadLabel(pm).toString();
taskinfo.setAppName(appname);
} catch (NameNotFoundException e) {
e.printStackTrace();
// 系統內核進程 沒有名稱
taskinfo.setAppName(packname);
Drawable icon = context.getResources().getDrawable(R.drawable.ic_launcher);
taskinfo.setAppIcon(icon);
}
if(taskinfos!= null && taskinfos.size()>0){
for (ProcessInfo beforeinfo : taskinfos) {
if(beforeinfo.getAppName().equals(taskinfo.getAppName())){
beforeinfo.setMemSize(beforeinfo.getMemSize()+memsize);
continue loop;
}
}
}
if (taskinfo != null) {
taskinfos.add(taskinfo);
}
}
}
//結束之後 在Local.setDefault(Local.default)恢復默認即可
Locale.setDefault(defaultLocale);
return taskinfos;
}