これらのライブラリを使用して、一部のアプリのカテゴリを収集する AsyncTask を実現しました。
このリンクでそれらを見つけることができます:
https://code.google.com/archive/p/android-market-api/downloads
http://mvnrepository.com/artifact/com.google.protobuf/protobuf-java
doInBackground() メソッドのコードは次のとおりです。
final ArrayList<MarketApplication> results = new ArrayList<>();
AccountManager am = AccountManager.get(MainActivity.this.getBaseContext());
Account[] accounts = am.getAccountsByType("com.google");
if (accounts.length > 0) {
try {
AccountManagerFuture<Bundle> accountManagerFuture =
am.getAuthToken(accounts[0], "android", null, MainActivity.this, null,
null);
Bundle authTokenBundle = accountManagerFuture.getResult();
String authToken =
authTokenBundle.getString(AccountManager.KEY_AUTHTOKEN).toString();
MarketSession session = new MarketSession();
session.setAuthSubToken(authToken);
Market.AppsRequest appsRequest = Market.AppsRequest.newBuilder()
.setQuery(params[0])
.setStartIndex(0).setEntriesCount(10)
.setWithExtendedInfo(true)
.build();
session.append(appsRequest, new MarketSession.Callback<Market.AppsResponse>() {
public void onResult(Market.ResponseContext context, Market.AppsResponse
response) {
for (int i = 0; i < response.getEntriesCount(); i++) {
MarketApplication marketApplication = new MarketApplication();
Market.App app = response.getApp(i);
marketApplication.setName(app.getTitle());
Market.App.ExtendedInfo extendedInfo = app.getExtendedInfo();
marketApplication.setCategory(extendedInfo.getCategory());
results.add(marketApplication);
}
}
});
session.flush();
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
return results;
ExtendedInfo から取得したカテゴリ情報とアプリケーションの名前をカスタム クラスに追加しますMarketApplication
。params[0]
対象のアプリ名などのクエリ文字列です。開発者が特定のクエリを作成するのに役立つ wiki ページがあります。
https://code.google.com/archive/p/android-market-api/wikis/HowToSearchApps.wiki
このサービスでは、Android マニフェストに次のアクセス許可を追加する必要があることに注意してください。
<uses-permission android:name="android.permission.GET_ACCOUNTS"></uses-permission>
<uses-permission android:name="android.permission.USE_CREDENTIALS"></uses-permission>
<uses-permission android:name="android.permission.INTERNET"></uses-permission>