2012-09-11 2 views
0

Android 앱이 있으며 GCM을 사용했으며 기기 등록 ID 창을 표시하거나 앱을 테스트하기 위해 로그 고양이에 표시하려고합니다. 에뮬레이터에 있던 로그 고양이에 ameesage가있었습니다. regiseration ID하지만 그것을 볼 필요가 어떻게 ??? 또한메시지 창에 기기 등록 ID를 표시하는 방법

내 모바일 정지 프로젝트에 응용 프로그램 ... 그것은 에뮬레이터에서 표시 didnot 있지만 메시지가 나타 났을를 테스트하고 나는이 권한

이 메시지가

사라
<uses-permission android:name="android.permission.GET_ACCOUNTS" /> 
    <uses-permission android:name="android.permission.WAKE_LOCK" /> 
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> 
    <uses-permission android:name="android.permission.WRITE_SETTINGS" /> 
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 

댓글을 달았 때

클래스

package com.example.elarabygroup; 

import com.google.android.gcm.GCMBaseIntentService; 
import com.google.android.gcm.GCMRegistrar; 

import android.content.Context; 
import android.content.Intent; 
import android.os.PowerManager; 
import android.util.Log; 

public class GCMIntenetService extends GCMBaseIntentService { 
    private static final String GCM_SENDER_ID = "1111111111"; 

    public GCMIntenetService() { 
     super(); 
    } 

    @Override 
    protected void onRegistered(Context context, String registrationId) { 
     Log.i(TAG, "Device registered: regId = " + registrationId); 
     GCMRegistrar.setRegisteredOnServer(context, true); 
    } 

    @Override 
    protected void onUnregistered(Context context, String registrationId) { 
     Log.i(TAG, "Device unregistered"); 
     if (GCMRegistrar.isRegisteredOnServer(context)) { 
      String regId = ""; 
      Log.i(TAG, "unregistering device (regId = " + regId + ")"); 
      GCMRegistrar.setRegisteredOnServer(context, false); 
     } else { 
      // This callback results from the call to unregister made on 
      // ServerUtilities when the registration to the server failed. 
      Log.i(TAG, "Ignoring unregister callback"); 
     } 
    } 

    @Override 
    protected void onError(Context context, String errorId) { 
     // push error processing 
    } 

    @Override 
    protected void onMessage(Context arg0, Intent arg1) { 
     Log.i(TAG, "Received message"); 
     Log.i(TAG, "EXTRAS" + arg1.getExtras()); 
     //String message = getString(R.string.gcm_message); 
     generateNotification(arg0, arg1.getStringExtra("Please download our new updates")); 
     // notifies user about message 

    } 

    private void generateNotification(Context arg0, String stringExtra) { 
     // TODO Auto-generated method stub 

    } 

    public static void registerInGCMService(Context context) { 
     if (!checkIsGCMServiceAvailable(context)) { 
      return; 
     } 
     final String regId = GCMRegistrar.getRegistrationId(context); 
     if (regId.equals("")) { 
      try { 
       GCMRegistrar.register(context, GCM_SENDER_ID); 
      } catch (Exception ex) { 
      } 
     } else { 
      // Already registered 
     } 
    } 

    public static boolean checkIsGCMServiceAvailable(Context context) { 
     try { 
      GCMRegistrar.checkDevice(context); 
      GCMRegistrar.checkManifest(context); 
      return true; 
     } catch (Throwable th) { 
      return false; 
     } 
    } 

} 

답변

1

Settings.Secure#ANDROID_ID은 Android ID를 고유 한 64 비트 16 진수 문자열로 반환합니다.

import android.provider.Settings.Secure; 

private String android_id = Secure.getString(getContext().getContentResolver(), 
                 Secure.ANDROID_ID); 

android_id에는 장치 ID가 들어 있습니다.

예제로 변경 사항을 registerInGCMService() 메소드에만 추가했습니다.

public class GCMIntenetService extends GCMBaseIntentService { 
    private static String GCM_SENDER_ID ; 

    public GCMIntenetService() { 
     super(); 
    } 



    public static void registerInGCMService(Context context) { 


     GCM_SENDER_ID = Secure.getString(getContext().getContentResolver(), 
                  Secure.ANDROID_ID); 

     if (!checkIsGCMServiceAvailable(context)) { 
      return; 
     } 
     final String regId = GCMRegistrar.getRegistrationId(context); 
     if (regId.equals("")) { 
      try { 
       GCMRegistrar.register(context, GCM_SENDER_ID); 
      } catch (Exception ex) { 
      } 
     } else { 
      // Already registered 
     } 
    } 



} 
+0

을 표시 할 위치 또는 "장치 등록 코드 아래에 둘 때 사용자에게 통지 케 Boradcaste 수신기 : regId = "+ registrationId); logcat에서 다음과 같이 @ user1597833이 제안합니다. –

+0

어디에서이 코드를 추가 할 수 있습니까? – egydeveloper

+0

@egydeveloper 제 대답을 편집했습니다. 이제 추가 된 부분을 볼 수 있습니다. –

0

u는 표시 나 토스트 같은 메시지를 팝업 할 위치 활동에서 방송 수신기를 호출 할 수 있습니다 .below 코드 할 같은

1) 수정 onRegistered() 메소드 아래

protected void onRegistered(Context context, String registrationId) 
{ 
     Log.i(TAG, "Device registered: regId = " + registrationId); 
     GCMRegistrar.setRegisteredOnServer(context, true); 
     CommonUtilities.displayMessage(context,registrationId); 
} 

2) 아래처럼 일반적인 유틸리티의 displayMessage()를 변경하십시오

static void displayMessage (Context context, String message,String senderID,String recieverId,String Type) 

{ 
      Intent intent = new Intent(DISPLAY_MESSAGE_ACTION); 
      intent.putExtra(EXTRA_MESSAGE, message); 
      context.sendBroadcast(intent); 
} 

3) 주요 활동 write us ma GCM에 등록 된 응용 프로그램이 mainactivity u는 당신이 로그 메시지, 즉 Log.i (TAG를 찾기 위해 노력하는 경우 팝업을

@Override 
     protected void onResume() { 

      registerReceiver(mHandleMessageReceiver, new IntentFilter(
        CommonUtilities.DISPLAY_MESSAGE_ACTION)); 

     } 

    private final BroadcastReceiver mHandleMessageReceiver = new BroadcastReceiver() { 
      @Override 
      public void onReceive(Context context, Intent intent) 
      { 
         // you pop message display here when app. will get registered 
Toast.makeText(context,getIntent().getExtras().getString(CommonUtilities.EXTRA_MESSAGE), 2).show(); 

      } 
     }; 

    @Override 
     protected void onStop() { 
      // TODO Auto-generated method stub 
      super.onPause(); 
      relaseMemory(); 
     } 
관련 문제