2011-08-04 11 views
9

Estoy intentando el código de ejemplo de here. Pero mi aplicación se está cayendo.¿Cómo uso la API no oficial de Android Market?

Agregue el registro y descubrí que se está bloqueando en session.flush();, así que eliminé esa línea y ya no se cuelga.

Pero no llega a la devolución de 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();       
    } 
} 
+0

¿Se puede publicar su código? Y alguna excepción? – Jack

+0

pregunta actualizada con el código. Traté de atrapar la excepción con un try/catch pero eclipse dijo que no se podía alcanzar, así que tuve que eliminarlo. No estoy seguro de dónde agregar el try/catch. – mrburns

+0

¿Puedes publicar la excepción? Si busca en su logcat, debe mostrar una excepción en session.flush(); – Jack

Respuesta

1

me sugieren fuertemente a echar un vistazo a https://groups.google.com/forum/#!forum/android-market-api (el único lugar que conozco sigue siendo activo sobre el API de Android Market).

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

También una identificación de Android válida ya no es tan simple como antes de recuperar, vea los grupos para eso también.

4

Hay un problema con androidId. En lugar de:

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

Utilice esta:

String AndroidId = "dead000beef"; 

funciona.

1

Esto no es Secure.ANDROID_ID, es la identificación del dispositivo de servicio de Gtalk.

Usted puede utilizar el siguiente código:

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 añadir el permiso para leer Gservice

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

cuál es el valor de GSERVICES_ID_KEY y GSERVICES_URI – Vamsi

Cuestiones relacionadas