1

インストールされている Android アプリケーション (ソーシャル、エンターテイメント、ゲーム、ニュース、ツールなど) を分類したいと考えています。インストールされているすべてのアプリをプログラムで配置する方法を誰かが提案できますか?

4

3 に答える 3

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>

于 2015-08-15T10:39:42.883 に答える
0
  1. Android またはプレイストアは、プレイストアからアプリケーション (カテゴリ) 情報にプログラムでアクセスするための直接 API を提供していません。したがって、公式の API はありません。

  2. http://wheredataapp.com/developers/ この API でも 100% の結果が得られません。(これらの人々は手動で行っています.playstoreにアクセスして、カテゴリとパッケージ名を知ってから、それらの詳細を独自のサーバーに保存してください).そのため、このAPIはplayストアからのすべてのアプリケーション情報も提供しません.

  3. このように私たちも行います。問題ありません。しかし、それには時間がかかります。

于 2016-09-23T13:31:50.933 に答える