हैलो मैं थक गया होगा क्योंकि मैं अभी यह काम नहीं कर सकता, मेरे दिमाग में यह समझ में आता है। मेरे पास एक 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"
    }
2
D4rkC00d3r 9 अगस्त 2020, 01:21

1 उत्तर

सबसे बढ़िया उत्तर

अब आपके पास दो मुद्दे हैं:

  1. पुनरावृत्ति समस्या: क्योंकि जब भी आप अपने app को JSON सूची में जोड़ते हैं तो आप लूप के लिए नहीं टूटते हैं, इसलिए आप पुनरावृति जारी रखते हैं ignoreList और JSON में app के और इंस्टेंस जोड़ें सूची। इससे बचने के लिए आपको एक break स्टेटमेंट जोड़ना होगा।

  2. ऐसे ऐप्स जोड़ना जिन्हें अनदेखा किया जाना चाहिए: ऐसा इसलिए है क्योंकि आप प्रत्येक की तुलना करने से पहले JSON सूची में app जोड़ रहे हैं उदाहरण ignoreList से app.. यह अस्पष्ट और भी दिखता है मेरे लिए :) तो मैं उदाहरण के साथ समझाऊंगा।

उदाहरण:

अपने ऐप = "सेटिंग" पर विचार करें, और अब आप लूप के लिए इसका उपयोग करके सूची से इसकी तुलना कर रहे हैं, इसलिए पहले आप इसकी तुलना "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();
    }

}
1
Zain 9 अगस्त 2020, 02:05