1

I want to categorize installed android applications (Like Social, Entertainment, Games, News, Tools and etc). Can anyone suggest how can i programmatically arrange all the installed apps?

Pratik
  • 452
  • 4
  • 17

3 Answers3

2

Use the WhereDat API:

Create a raw JSON POST request, with an array of the packages you want to categorize:

{
  "packages": [
    "com.pixmix.mobileapp",
    "com.nextstagesearch"
  ]
}

Send it to:

http://api.wheredatapp.com/data

And here's the response:

{
"apps": [
    {
        "category": "Productivity",
        "rating": 4.5,
        "updated": 1436741473,
        "created": 1431028391,
        "icon_url": "https://lh3.googleusercontent.com/q5pFGfXKZejowwcmlJl7M1IXGHVM4Zq_IjPpYb7zgkUFXO3QnZ2LyeOUUhMPaKPkJ3gR=w300",
        "title": "WhereDat Beta",
        "package": "com.nextstagesearch",
        "ratings_count": 4,
        "short_description": "WhereDat lets you easily search your device for contacts, apps, and recently accessed webpages without leaving your home screen. With deep linking you can search the c..."
    },
    {
        "category": "Photography",
        "rating": 4.0519609451293945,
        "updated": 1435970764,
        "created": 1430868349,
        "icon_url": "https://lh3.ggpht.com/NgbwQzyo2mDR8su1Embio5jtHuPyScaMr0j4iub58YR5m19Ns0gVdeb9pYgNvMuFCcg=w300",
        "title": "PixMix - Photo sharing",
        "package": "com.pixmix.mobileapp",
        "ratings_count": 2040,
        "short_description": "Simple collage or photo sharing in just two clicks!★ See your photos in BEAUTIFUL albums★ Create beautiful album COLLAGE★ EASILY send albums to friends and family★ You..."
    }
]
}
Oded Breiner
  • 28,523
  • 10
  • 105
  • 71
2

try it, it works perfectly for me. these codes returns category of all app in recent device. Remember you have to put these code into a thread (AsyncTask...) (HttpParams is deprecated, we should use HttpUrlConnection instead).

private void getAppCategories() throws IOException, JSONException {

    BufferedReader bufferedReader = null;
    HttpURLConnection urlConnection = null;
    BufferedWriter bufferedWriter = null;

    StringBuilder result = new StringBuilder();

    //Create JSON object to send to webservice
    JSONObject jsonObjectSend = new JSONObject();
    JSONArray jsonArrayPakages = new JSONArray();
    PackageManager packageManager;
    List<ResolveInfo> listApps; //this list store all app in device

    try {
        packageManager = getPackageManager();
        Intent filterApp = new Intent(Intent.ACTION_MAIN);
        filterApp.addCategory(Intent.CATEGORY_LAUNCHER);
        listApps = packageManager.queryIntentActivities(filterApp,
                PackageManager.GET_META_DATA);

        for (ResolveInfo app : listApps) {
            jsonArrayPakages.put(app.activityInfo.packageName.trim());
        }

        jsonObjectSend.put("packages", jsonArrayPakages);

        Log.d("json", jsonObjectSend.toString());

        URL url = new URL("http://getdatafor.appspot.com/data?key=53972606b926d38191a5446fdff89e377873d767fabedf6d");
        urlConnection = (HttpURLConnection) url.openConnection();
        urlConnection.setConnectTimeout(10000); /* milliseconds */
        urlConnection.setReadTimeout(10000); /* milliseconds */
        urlConnection.setRequestMethod("POST");
        urlConnection.setRequestProperty("Content-Type", "application-json");
        urlConnection.setDoOutput(true); /* allow output to send data */
        urlConnection.connect();

        OutputStream outputStream = urlConnection.getOutputStream();
        bufferedWriter =  new BufferedWriter(new OutputStreamWriter(outputStream));
        bufferedWriter.write(jsonObjectSend.toString());
        bufferedWriter.flush();

        InputStream inputStream = urlConnection.getInputStream();
        bufferedReader = new BufferedReader(new InputStreamReader(inputStream));

        //Read data
        String line;
        while ((line = bufferedReader.readLine()) != null) {
            result.append(line);
        }

        /*Parse JSON**********************************************************************************/
        JSONObject jsonObjectResult = new JSONObject(result.toString().trim());
        JSONArray jsonArrayApps = jsonObjectResult.getJSONArray("apps");

        for (int j = 0; j < jsonArrayApps.length(); j++) {

            JSONObject jsonObjectApp = jsonArrayApps.getJSONObject(j);

            String packageName = jsonObjectApp.getString("package").trim();
            String cate = jsonObjectApp.getString("category").trim();

            Log.d("result", (j + 1) + "---> : " + packageName + "---" + cate);
        }
        /***********************************************************************************/

    } finally {
        if (bufferedReader != null) {
            bufferedReader.close();
        }
        if (bufferedWriter != null) {
            bufferedWriter.close();
        }
        if (urlConnection != null) {
            urlConnection.disconnect();
        }
    }
}

call this method under AsyncTask:

new AsyncTask<Void, Void, Void>() {

            @Override
            protected Void doInBackground(Void... voids) {

                try {
                    getAppCategories();
                } catch (IOException e) {
                    Log.d("tag", "Net work error: " + e.getMessage(), e);
                } catch (JSONException e) {
                    Log.d("tag", "JSON is not valid:  " + e.getMessage(), e);
                }
                return null;
            }
        }.execute();

and DO NOT forget INTERNET permission.

<uses-permission android:name="android.permission.INTERNET"></uses-permission>

Phong Nguyen
  • 6,897
  • 2
  • 26
  • 36
  • no its not working for me it always come in (JSONException e) because i always get "Get a valid API key: http://wheredatapp.com/dev/pricing" in response – Bhanu Sharma Apr 21 '16 at 07:35
  • @Bhanu Sharma they changed the rule, we need a key to use this API, access http://wheredatapp.com/dev/pricing and press GET API KEY, or you can use my key in my answer. ( I edited my answer). – Phong Nguyen Jul 07 '16 at 15:06
  • I tested carefully and it worked, actually I'm using it in my application. If you think it's useful, please give me an up-vote, I don't even enough reputation to up-vote others answers :( – Phong Nguyen Jul 07 '16 at 15:13
0
  1. Android or playstore not providing the direct APIs for accessing Application (Category) information from playstore programmatically. So there is no official APIs.

  2. http://wheredatapp.com/developers/ this API also not giving the 100% results. (these people are doing manually. Just visit playstore and know the category and package name, then those details stored into their own server).So that this API also not giving the all applications information from play store.

  3. This way we will also doing. there is no issue. but it takes some time.

Kona Suresh
  • 1,836
  • 1
  • 15
  • 25