关于多语言获取手机正在运行应用信息失败

时间:2021-08-30 23:15:21

问题描述 读取正在运行程序失败阿拉伯语言

// 应用程序包管理器
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;
}