问题
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?
回答1:
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..."
}
]
}
回答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>
回答3:
Android or playstore not providing the direct APIs for accessing Application (Category) information from playstore programmatically. So there is no official APIs.
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.
This way we will also doing. there is no issue. but it takes some time.
来源:https://stackoverflow.com/questions/27962324/android-categorize-installed-applications