마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

마켓 버전체크 관련 질문드립니다. 에러가 발생해서

0 추천

구글링해서 아래와 같은 소스코드를 찾았는데요

 

    static String getAndroidId(Context context) {
    	Log.i("fureun", "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("fureun", "getAndroidId() : " + Long.toHexString(Long.parseLong(c.getString(1))));
            return Long.toHexString(Long.parseLong(c.getString(1)));
        } catch (NumberFormatException e) {
            return null;
        }
    }
	
    public void mMarketVersionCheck() {
    	MarketSession session = new MarketSession();
	    session.login("@gmail.com","password");
	    session.getContext().setAndroidId(getAndroidId(mContext));
	    String query = "package";
	    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
	              Log.d("fureun", "앱갯수 : "+response.getAppCount());
	              
	              for(int i = 0 ; i < response.getAppCount(); i++){
	            	  Log.d("fureun",i+"  "+response.getApp(i).getTitle());
	            	  Log.d("fureun",i+"  "+response.getApp(i).getCreator());
	            	  Log.d("fureun",i+"  "+response.getApp(i).getPackageName());
	            	  Log.d("fureun",i+"  "+response.getApp(i).getVersion());
	            	  Log.d("fureun",i+"  "+response.getApp(i).getVersionCode());
	              }
	            }
	    });
	    session.flush();
    }

 

이렇게하니까 getAndroidIId에서 계속 걸리네요 .. 에러 로그를 봐도 짐작이 안가서 도움을 구합니다

 

퍼미션에 기본적인것들 외에 추가로 마켓버전체크를 위해

 

android.permission.READ_GSERVICE 추가한 상태이며

로그캣 보고 WRITE_GSERVICE 를 추가하였지만 매니페스트에서 x표시가 떠서(이제 미지원하는 권한인듯합니다)

제외시켜놓은 상태입니다.

 

도움 부탁드리겠습니다 ..

음무 (17,820 포인트) 님이 2014년 5월 15일 질문

3개의 답변

+1 추천
 
채택된 답변
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
<uses-permission android:name="com.google.android.providers.gsf.permission.WRITE_GSERVICES"/>

이렇게 추가하셨나요?
초보개발자ㅠ (33,870 포인트) 님이 2014년 5월 15일 답변
음무님이 2014년 5월 15일 채택됨
네 추가했습니다.. 혹시 getAndroidId 에서
private static final Uri URI = Uri.parse("content://com.google.android.gsf.gservices");
    private static final String ID_KEY = "android_id";
위에 이부분이 있거든요 ..
ID_KEY 여기에 들어가야하는 값이 "android_id" 가 아니라
특정 값이 들어가야하는건가요 ??
말씀하신것으로 퍼미션 바꾸니 에러가 안나네요 그전에는 위에 썻던 android.permission 으로 했었는데 그것때문에 에러가 난것같습니다.

그런데 지금은 앱 검색 갯수가 0개로 나오네요 ㅠㅠ 분명 마켓에 어플 등록돼있는데요 ㅠㅠ
저도 이쪽 관련해서는 해본적이 없지만 '-'
그대로 사용해도 무방할 것 같네요
아래를 참고하세요
http://diyall.tistory.com/846
+2 추천

http://developer.android.com/reference/android/Manifest.permission.html#WRITE_GSERVICES

public static final String WRITE_GSERVICES

Added in API level 1

Allows an application to modify the Google service map.

Not for use by third-party applications.

Constant Value: "android.permission.WRITE_GSERVICES"

아직 미지원한다는 말이 없는데요..

인연 (31,880 포인트) 님이 2014년 5월 15일 답변
그런데 왜 적고나서 저장하면 에러가 생기고 클리어하면 에러가 사라지고. .
다시 수정이 일어나면 또 에러가나타납니다. 클리어 한 다음 실행하면 실행 되고있는건지싶기도하고 ㅠㅠ
또 추가해도 똑같은 에러가 발생합니다 ..
해당 권한을 보시면 다른 앱에서는 사용할 수 없다고 하는데요. 그 부분때문에 미리 알려주는것이 아닌가 싶습니다. 즉.. 구글 전용 권한이 아닌가싶네요;
혹시 "android_id" 대신 특정 인자가 들어가는건가요 ?? android ID 구할때요 ..
0 추천
ID_KEY 여기에 들어가야하는 값이 "android_id" 가 아니라
특정 값이 들어가야하는건가요 ??

 

네.
한림의별 (600 포인트) 님이 2014년 5월 15일 답변
"android_id"
가 맞네요
해결했습니다. 마켓등록을하긴했는데 정식등록이 아니라 테스트등록이라 안됐네요
...