¿Cómo utilizo la API no oficial de Android Market?

Estoy probando el código de ejemplo desde here . Pero mi aplicación se está estrellando.

Añadí registro y descubrí que se está bloqueando en session.flush(); Así que quité esa línea y no se bloquea más.

Pero no llega a la onResult llamada onResult .

 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 = "[email protected]"; 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(); } } 

Hay un problema con androidId . En lugar de:

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

Utilizar esta:

 String AndroidId = "dead000beef"; 

Funciona.

Sugiero encarecidamente que eche un vistazo a https://groups.google.com/forum/#!forum/android-market-api (el único lugar que conozco que sigue siendo activo acerca de la API de Android Market).

Tenga en cuenta que el método de autenticación (login / pwd) es más que obsoleto ahora (y no seguro), y puede que ya no sea compatible con el protocolo de mercado actual.

También un id android válido ya no es tan simple como antes de recuperarse, ver los grupos para eso también.

Esto no es Secure.ANDROID_ID, es el ID del dispositivo de servicio Gtalk.

Puede utilizar el código siguiente:

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

Y agrega el permiso para leer Gservice

 <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/> 
  • ¿Por qué está el menú desplegable de desbordamiento encima de la barra de acción?
  • Eclipse ADT 22.6.2 todavía da el error "java.lang.NullPointerException"
  • la aplicación Android se bloquea antes de iniciar
  • No se puede cambiar la fuente predeterminada en la aplicación para Android
  • ¿Cómo cambiar de para a foreach en este caso?
  • Enfoque eficiente para comprobar continuamente si la conexión a Internet está disponible en Android
  • Reflexión de Java para el método estático privado con parámetros
  • Error de compilación de Maven para android Proyecto "error: paquete R no existe"
  • Recuperar android.os.Build ... propiedades del sistema mediante la aplicación puramente nativa de Android
  • Android: cajón de navegación sin xml
  • Sube fotos de la aplicación de Android a Google Cloud Storage / App Engine - carácter ilegal '_'
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.