您好,我一定很累,因为我似乎无法完成这项工作,在我看来,这是有道理的。我有一个String[]
完整的Android应用程序的名字,我想筛选出来之前,我将结果写入一个JSONArray
。
public static JSONArray appInfo = new JSONArray();
public static String[] ignoreList = {"Google", "Maps", "Settings", "Phone", "Chrome", "Photos", "Duo", "YouTube", "Gmail", "Contacts", "Drive", "Clock", "Messages", "Files", "Calculator", "File manager", "Samsung", "Gallery", "LastPass", "OnePlus", "Weather"};
public void listApps(Context c) {
PackageManager pm = c.getPackageManager();
Intent main = new Intent(Intent.ACTION_MAIN, null);
main.addCategory(Intent.CATEGORY_LAUNCHER);
List<ResolveInfo> packages = pm.queryIntentActivities(main, 0);
for (ResolveInfo resolve_info : packages) {
try {
String package_name = resolve_info.activityInfo.packageName;
String app = (String) pm.getApplicationLabel(pm.getApplicationInfo(package_name, PackageManager.GET_META_DATA));
for (String tempStr : ignoreList) {
if (!app.contains(tempStr)) {
JSONObject json = new JSONObject(); // Create temp json object with app info.
json.put("app", app);
appInfo.put(json);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
try {
Log.d("Debug", appInfo.toString(4));
} catch (JSONException e) {
e.printStackTrace();
}
}
如果我要检查;
if (!app.contains("Google")) {
然后,我JSONArray
将不包含带有“ Google”的应用名称,但是当我遍历时,ignoreList
我得到了以下信息JSON
,即不是来自ignoreList
不在?中的其余项目ignorList
?还不断重复对象吗?任何帮助将非常欢迎。
{
"app": "Chrome"
},
{
"app": "Chrome"
},
{
"app": "Chrome"
},
{
"app": "Chrome"
},
{
"app": "Chrome"
},
{
"app": "Chrome"
},
{
"app": "Chrome"
},
{
"app": "Chrome"
},
{
"app": "Chrome"
},
{
"app": "Chrome"
},
{
"app": "Chrome"
},
{
"app": "Chrome"
},
{
"app": "Chrome"
},
{
"app": "Chrome"
},
{
"app": "Chrome"
},
{
"app": "Chrome"
},
{
"app": "Chrome"
},
{
"app": "Chrome"
},
{
"app": "Chrome"
},
{
"app": "Chrome"
},
{
"app": "Phone"
},
{
"app": "Phone"
},
{
"app": "Phone"
},
{
"app": "Phone"
},
{
"app": "Phone"
},
{
"app": "Phone"
},
{
"app": "Phone"
},
{
"app": "Phone"
},
{
"app": "Phone"
},
{
"app": "Phone"
},
{
"app": "Phone"
},
{
"app": "Phone"
},
{
"app": "Phone"
},
{
"app": "Phone"
},
{
"app": "Phone"
},
{
"app": "Phone"
},
{
"app": "Phone"
},
{
"app": "Phone"
},
{
"app": "Phone"
},
{
"app": "Phone"
},
{
"app": "Settings"
},
{
"app": "Settings"
},
{
"app": "Settings"
},
{
"app": "Settings"
},
{
"app": "Settings"
},
{
"app": "Settings"
},
{
"app": "Settings"
},
{
"app": "Settings"
},
{
"app": "Settings"
},
{
"app": "Settings"
},
{
"app": "Settings"
},
{
"app": "Settings"
},
{
"app": "Settings"
},
{
"app": "Settings"
},
{
"app": "Settings"
},
{
"app": "Settings"
},
{
"app": "Settings"
},
{
"app": "Settings"
},
{
"app": "Settings"
},
{
"app": "Settings"
},
{
"app": "Google Play Store"
},
{
"app": "Google Play Store"
},
{
"app": "Google Play Store"
},
{
"app": "Google Play Store"
},
{
"app": "Google Play Store"
},
{
"app": "Google Play Store"
},
{
"app": "Google Play Store"
},
{
"app": "Google Play Store"
},
{
"app": "Google Play Store"
},
{
"app": "Google Play Store"
},
{
"app": "Google Play Store"
},
{
"app": "Google Play Store"
},
{
"app": "Google Play Store"
},
{
"app": "Google Play Store"
},
{
"app": "Google Play Store"
},
{
"app": "Google Play Store"
},
{
"app": "Google Play Store"
},
{
"app": "Google Play Store"
},
{
"app": "Google Play Store"
},
{
"app": "Google Play Store"
},
{
"app": "Drive"
},
{
"app": "Drive"
},
{
"app": "Drive"
},
{
"app": "Drive"
},
{
"app": "Drive"
},
{
"app": "Drive"
},
{
"app": "Drive"
},
{
"app": "Drive"
},
{
"app": "Drive"
},
{
"app": "Drive"
},
{
"app": "Drive"
},
{
"app": "Drive"
},
{
"app": "Drive"
},
{
"app": "Drive"
},
{
"app": "Drive"
},
{
"app": "Drive"
},
{
"app": "Drive"
},
{
"app": "Drive"
},
{
"app": "Drive"
},
{
"app": "Drive"
},
{
"app": "Maps"
},
{
"app": "Maps"
},
{
"app": "Maps"
},
{
"app": "Maps"
}
现在您有两个问题:
重复性问题:因为每次添加app
到JSON列表时都不会中断for循环,所以您将继续迭代ignoreList
并将更多实例添加app
到JSON列表中。为了避免您需要添加一条break
语句。
并称,应该被忽略的应用程序:这是因为你所添加的app
每一个实例从比较之前的JSON列表中ignoreList
的app
..它看起来模糊不清,也给我:),所以我会用例子来解释。
例:
考虑您的应用=“ 设置 ”,现在您正在使用for循环将其与列表进行比较,因此首先将其与“ Google ” 进行比较,它不等于它,因此将其添加到中JSON list
,当您将其应用于将其与“ 地图 ” 进行比较,依此类推,直到将其与“ 设置 ” 进行比较,这一次它不会被添加到中JSON list
,但是在到达“设置”之前您已经将其添加了多次,因此需要等到您完成整个迭代,再将添加app
到中JSON list
。我用来boolean
实现这一目标。
public void listApps(Context c) {
PackageManager pm = c.getPackageManager();
Intent main = new Intent(Intent.ACTION_MAIN, null);
main.addCategory(Intent.CATEGORY_LAUNCHER);
List<ResolveInfo> packages = pm.queryIntentActivities(main, 0);
for (ResolveInfo resolve_info : packages) {
try {
String package_name = resolve_info.activityInfo.packageName;
String app = (String) pm.getApplicationLabel(pm.getApplicationInfo(package_name, PackageManager.GET_META_DATA));
boolean isIgnored = false;
for (String tempStr : ignoreList) {
if (app.toLowerCase().contains(tempStr.toLowerCase())) {
isIgnored = true;
break; // to avoid unneeded iterations
}
}
if (!isIgnored) {
JSONObject json = new JSONObject(); // Create temp json object with app info.
json.put("app", app);
appInfo.put(json);
}
} catch (Exception e) {
e.printStackTrace();
}
}
try {
Log.d("Debug", appInfo.toString(4));
} catch (JSONException e) {
e.printStackTrace();
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句