출처 : http://202psj.tistory.com/571


http://code.google.com/p/android-market-api/ 

 

개발자 입장에서 쌔가빠지게 업데이트 게속 해줘도

 

업데이트 하나도 안하는 사용자들이 너무 많다!!

 

주위에 보면 그런 사람 잇더라..

 

그렇다고 따로 서버 둬서 체크하자니까 그냥 앱혼자노는 어플은 부담스럽다

 

구글플레이에 돈주고 개발자 등록했는데 요정도 서비스는 해줘야하는거 아닌가~~

 

 

그렇다 해준다.

 

버전체크 api를 이용해서

 

정보를 가져와서 사용하자~

 

Build.VERSION.SDK_INT 일케 가져온담에 맞춰서 하자

 

 MarketSession session = new MarketSession();
   session.login("id","pw"); // 구글 아무 계정이나 되는듯..?
//   session.getContext.setAndroidId(myAndroidId);

   String query = "com.kwon.kwonyangsanbus"; // 앱 이름 또는 패키지 명 다 쿼리 되는듯.. 근데 내꺼 안뜨냐 ?
   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) {
                     // Your code here
                     // response.getApp(0).getCreator() ...
                     // see AppsResponse class definition for more infos
             Logger.error("앱갯수 : "+response.getAppCount());
             for(int i = 0 ; i < response.getAppCount(); i++){
              Logger.error(i+"  "+response.getApp(i).getTitle());
              Logger.error(i+"  "+response.getApp(i).getCreator());
              Logger.error(i+"  "+response.getApp(i).getPackageName());
              Logger.error(i+"  "+response.getApp(i).getVersion());
              Logger.error(i+"  "+response.getApp(i).getVersionCode());
             }
            }
   });
   session.flush();



////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

출처: http://diyall.tistory.com/846


[안드로이드] 안드로이드 APK 버전 체크하기

 

안드로이드의 APK 버전을 체크해서 요즘은 업데이트 여부를 알려주고 있습니다.

그래서 저도 시도해 볼려고 하니.. 여러가지 어렵더군요.

 

우선! 설치되어 있는 APK 의 버전은 쉽게 얻을 수 있습니다.

 

    public static String getVersionName(Context context) {
    	Log.i(TAG, "here in getVersionName");
        try {
            PackageInfo packageInfo = context.getPackageManager().getPackageInfo(context.getPackageName(), 0);
            return packageInfo.versionName;
        } catch (NameNotFoundException e) {
        	Log.i(TAG, "err NameNotFoundException -> " + e.toString());
            return null;
        }
    }

 

 

하지만 문제는 마켓에 올린 최신버전과 비교를 하는 문제였습니다.

 

방법은

1. 서버를 운영하여 서버에 최신버전 내용을 넣고 비교하는 방법

2. 마켓의 내용을 HTML 파싱하는 방법 등이 있는 것 같습니다.

하지만.. 아직 초보를 그것도 쉽지 않더군요.

 

그러다가 찾은 방법이 구글에서 제공하는 Google Market API 를 이용하는 방법입니다.

하지만 query 부분에 패키지명을 넣으면 해결될 줄 알았는데.. 계속 null 값을 반환합니다.

 

임의적으로 "maps" 등의 단어를 넣으면 데이타를 가져올 수는 있는데.. 뿌려주는 결과값이 왜 그렇게 나오는지를 알수가 없었습니다.

 

마켓에서 "maps" 로 검색한 것과는 다른 결과를 보여주기 때문입니다.

 

그러다가.. 문제를 해결 하였습니다.

 

저와 같은 고민을 하는 사람들이 많은 것 같아서.. 포스트 남깁니다.

 

AndroidId 값 가져오는 방법

 

    private static final Uri URI = Uri.parse("content://com.google.android.gsf.gservices");
    private static final String ID_KEY = "android_id";
     
    static String getAndroidId(Context context) {
    	Log.i(TAG, "here in getAndroidId");
        String[] params = { ID_KEY };
        Cursor c = context.getContentResolver()
                .query(URI, null, null, params, null);
     
        if (!c.moveToFirst() || c.getColumnCount() < 2)
            return null;
     
        try {
        	Log.i(TAG, "getAndroidId() : " + Long.toHexString(Long.parseLong(c.getString(1))));
            return Long.toHexString(Long.parseLong(c.getString(1)));
        } catch (NumberFormatException e) {
            return null;
        }
    }

AndroidManifest.xml 안에 권한을 넣어줘야 함

 

 

마켓의 정보 가져오기

 

    public static String getMarketVersionName(Context context) {
    	Log.i(TAG, "here in getMarketVersionName");
    	
    	try {
    		MarketSession session = new MarketSession();
        	session.login(email, pass);
        	//Log.i(TAG, "session : "+session.getAuthSubToken());
        	session.getContext().setAndroidId(getAndroidId(context));
        	String query = "패키지명";
        	
        	AppsRequest appsRequest = AppsRequest.newBuilder()
        			.setQuery(query)
        			.setStartIndex(0).setEntriesCount(1)
        			.setOrderType(AppsRequest.OrderType.NEWEST)
        			.setWithExtendedInfo(false)
        			.build();
        	
        	session.append(appsRequest, new Callback() {

    			@Override
    			public void onResult(ResponseContext context, AppsResponse response) {
    				//Log.i(TAG, "getAppCount() : " + response.getAppCount());
    				for (int i=0; i " + e.toString());
    	}
    	
    	return marketVersion;
    }

 

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

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;


위 마켓 api를 사용하기 위해 필요한 파일

파일에 최신버전은

http://code.google.com/p/android-market-api/

이쪽에서 왼쪽측 download 를 보면 받을수 있다.


 androidmarketapi-0.6.jar

 protobuf-java-2.2.0.jar

////////////////////////////////////////////////////////////////////////////////////////////////////////////////


출처: http://www.androidside.com/plugin/mobile/board.php?bo_table=B49&wr_id=75819

+ Recent posts