我如何使用非官方的Android Market API?

我想从here的示例代码。 但我的应用程序正在崩溃。

我添加日志logging,发现它在session.flush();崩溃session.flush(); 所以我删除了这一行,它不会崩溃了。

但是它没有达到onResultcallback。

 package com.mytest.app; import com.gc.android.market.api.MarketSession; import com.gc.android.market.api.MarketSession.Callback; import com.gc.android.market.api.model.Market.AppsRequest; import com.gc.android.market.api.model.Market.AppsResponse; import com.gc.android.market.api.model.Market.ResponseContext; import android.app.Activity; import android.os.Bundle; import android.provider.Settings.Secure; import android.util.Log; public class MarketAPITestActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Log.d("Market API", "Started"); String email = "somebody@gmail.com"; String pass = "mypass"; String AndroidId = Secure.getString(this.getContentResolver(), Secure.ANDROID_ID); MarketSession session = new MarketSession(); session.login(email,pass); session.getContext().setAndroidId(AndroidId); String query = "maps"; AppsRequest appsRequest = AppsRequest.newBuilder() .setQuery(query) .setStartIndex(0).setEntriesCount(10) .setWithExtendedInfo(true) .build(); session.append(appsRequest, new Callback<AppsResponse>() { @Override public void onResult(ResponseContext context, AppsResponse response) { Log.d("Market API", "Got response"); } }); session.flush(); } } 

Related of "我如何使用非官方的Android Market API?"

androidId有问题。 代替:

 String AndroidId = Secure.getString(this.getContentResolver(), Secure.ANDROID_ID); 

用这个:

 String AndroidId = "dead000beef"; 

有用。

我强烈build议浏览一下https://groups.google.com/forum/#!forum/android-market-api (我唯一知道的关于Android Market API的地方)。

请注意,身份validation方法(login / pwd)现在已经过时(而不是安全),并且可能不再受当前市场协议的支持。

另外一个有效的android id不再像以前那样简单了,请参阅这个组。

这不是Secure.ANDROID_ID,它是Gtalk服务设备ID。

您可以使用下面的代码:

 public String getDeviceId(Context context) { String[] params = { GSERVICES_ID_KEY }; Cursor c = context.getContentResolver() .query(GSERVICES_URI, null, null, params, null); if (!c.moveToFirst() || c.getColumnCount() < 2) return null; try { return Long.toHexString(Long.parseLong(c.getString(1))).toUpperCase(); } catch (NumberFormatException e) { return null; } } 

并添加读取Gservice的权限

 <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>