9 Stimmen

Wie verwende ich die inoffizielle Android Market API?

Ich versuche es mit dem Beispielcode aus here . Aber meine App stürzt ab.

Ich habe die Protokollierung hinzugefügt und herausgefunden, dass es bei folgenden Punkten abstürzt session.flush(); also habe ich diese Zeile entfernt und es stürzt nicht mehr ab.

Aber es reicht nicht bis zum onResult Rückruf.

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

4voto

i18n Punkte 130

Es gibt ein Problem mit androidId . Anstelle von:

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

Verwenden Sie dies:

String AndroidId = "dead000beef";

Es funktioniert.

2voto

Aladin Q Punkte 540

Ich empfehle dringend, einen Blick auf https://groups.google.com/forum/#!forum/Android-market-api (der einzige mir bekannte Ort, an dem die Android Market API noch aktiv ist).

Bitte beachten Sie, dass die Authentifizierungsmethode (login/pwd) inzwischen mehr als veraltet (und nicht sicher) ist und vom aktuellen Marktprotokoll möglicherweise nicht mehr unterstützt wird.

Auch eine gültige Android-ID ist nicht mehr so einfach zu erhalten wie früher, siehe dazu auch die Gruppen.

1voto

binhgreat Punkte 744

Dies ist nicht Secure.ANDROID_ID, sondern die Geräte-ID des Gtalk-Dienstes.

Sie können den folgenden Code verwenden:

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

Und fügen Sie die Berechtigung zum Lesen von Gservice hinzu

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X