2011-08-04 25 views
9

Tôi đang thử mã mẫu từ here. Nhưng ứng dụng của tôi đang gặp sự cố.Tôi làm cách nào để sử dụng API Android Market không chính thức?

Tôi đã thêm nhật ký và phát hiện ra rằng nó đang bị lỗi tại session.flush(); vì vậy tôi đã xóa dòng đó và nó không bị treo nữa.

Nhưng nó không đạt được gọi lại 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

Bạn có thể gửi mã của bạn? Và có ngoại lệ nào không? – Jack

+0

câu hỏi được cập nhật với mã. Tôi đã cố gắng để bắt ngoại lệ với một try/catch nhưng eclipse nói rằng nó không thể đạt được vì vậy tôi đã phải loại bỏ nó. Tôi không chắc chắn nơi để thêm try/catch. – mrburns

+0

Bạn có thể đăng ngoại lệ không? Nếu bạn nhìn vào logcat của bạn, nó sẽ hiển thị một ngoại lệ tại session.flush(); – Jack

Trả lời

1

Tôi khuyên bạn nên xem https://groups.google.com/forum/#!forum/android-market-api (nơi duy nhất tôi biết vẫn đang hoạt động về Android Market API).

Hãy lưu ý rằng phương thức xác thực (đăng nhập/pwd) hiện không được chấp nhận (và không an toàn) và có thể không còn được hỗ trợ bởi giao thức thị trường hiện tại.

Cũng là một id android hợp lệ không còn đơn giản như trước đây để truy xuất, xem các nhóm cho điều đó nữa.

4

Có sự cố với androidId. Thay vì:

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

Sử dụng này:

String AndroidId = "dead000beef"; 

Nó Works.

1

Đây không phải là Secure.ANDROID_ID, đó là ID thiết bị dịch vụ Gtalk.

Bạn có thể sử dụng đoạn mã sau:

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

Và thêm sự cho phép để đọc Gservice

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

giá trị của GSERVICES_ID_KEY và GSERVICES_URI là gì – Vamsi

Các vấn đề liên quan