2011-08-04 7 views
9

Próbuję kod przykładowy z here. Ale moja aplikacja się zawiesza.Jak korzystać z nieoficjalnego interfejsu API Android Market?

Dodałem rejestrację i dowiedziałem się, że uległo awarii pod numerem session.flush();, więc usunąłem tę linię i nie ulega ona już awarii.

Ale nie dochodzi do oddzwaniania 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

można pisać kod? I jakiekolwiek wyjątki? – Jack

+0

zaktualizowane pytanie z kodem. Próbowałem złapać wyjątek próbując/złapałem, ale zaćmienie powiedział, że nie można go osiągnąć, więc musiałem go usunąć. Nie jestem pewien, gdzie dodać try/catch. – mrburns

+0

Czy możesz opublikować wyjątek? Jeśli spojrzysz na swój logcat, powinien pokazać wyjątek w session.flush(); – Jack

Odpowiedz

1

Sugeruję, aby przyjrzeć https://groups.google.com/forum/#!forum/android-market-api (jedyne miejsce wiem nadal są aktywne o Android Market API).

Należy wziąć pod uwagę, że metoda uwierzytelniania (login/pwd) jest teraz więcej niż przestarzała (i nie jest bezpieczna) i może nie być obsługiwana przez aktualny protokół rynkowy.

Również ważny identyfikator Androida nie jest już tak prosty jak poprzednio, aby zobaczyć, zobacz grupy również.

4

Występuje problem z androidId. Zamiast:

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

użyj:

String AndroidId = "dead000beef"; 

to działa.

1

To nie jest Secure.ANDROID_ID, to identyfikator urządzenia serwisowego Gtalk.

można użyć następującego kodu:

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

i dodać uprawnienia do odczytu Gservice

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

jaka jest wartość GSERVICES_ID_KEY i GSERVICES_URI – Vamsi