Android对已安装的应用程序进

时间:2015-01-15 11:24:47

标签: launcher android-package-managers android-applicationinfo

我想对已安装的Android应用程序进行分类(如社交,娱乐,游戏,新闻,工具等)。谁能建议我如何以编程方式安排所有已安装的应用程序?

3 个答案:

答案 0 :(得分:2)

使用WhereDat API:

创建原始 JSON POST请求,其中包含您要分类的数据包数组:

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

发送至:

http://api.wheredatapp.com/data

以下是回复:

{
"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..."
    }
]
}

答案 1 :(得分:2)

尝试一下,它对我来说非常适合。这些代码返回最近设备中所有应用的类别。记住你必须将这些代码放入一个线程(AsyncTask ...) (不推荐使用HttpParams,我们应该使用HttpUrlConnection)。

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();
        }
    }
}

在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();

并且不要忘记INTERNET许可。

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

答案 2 :(得分:0)

  1. Android或Playstore未提供直接API,以编程方式从Playstore访问应用程序(类别)信息。所以没有正式的API。

  2. http://wheredatapp.com/developers/此API也未给出100%的结果。 (这些人正在手动操作。只需访问playstore并了解类别和包名称,然后将这些详细信息存储到自己的服务器中。)因此该API也不会从Play商店提供所有应用程序信息。

  3. 这样我们也会这样做。没有问题。但这需要一些时间。