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

gcm에서 onMessage의 intent관련 문제입니다.

0 추천

package com.example.mygcmtest_2;

import java.util.Hashtable;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

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

import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.widget.Toast;

public class GCMIntentService extends GCMBaseIntentService {
	protected void onError(Context context, String error){
		Log.d("@@@@", "onError : "+error);
	}
	protected void onRegistered(Context context, String regId){
		Log.d("@@@@", "onRegister : "+regId);
	}
	protected void onUnregistered(Context context, String regId){
		Log.d("@@@@", "onUnregistered : "+regId);
	}
	@Override
	protected void onMessage(Context arg0, Intent arg1) {
		StringBuffer bufferMessageAll = new StringBuffer();
		Bundle bundle = arg1.getExtras();
		Set<String> setKey = bundle.keySet();
		Iterator<String> iterKey = setKey.iterator();
		while (iterKey.hasNext()){
			String key = iterKey.next();
			String value = bundle.getString(key);
			Log.d("GCMIntentService", "onMessage. key = " + key + ", value = " + value);
			bufferMessageAll.append(value).append("\n");
		}
		String messageAll = bufferMessageAll.toString();
		showMessage(arg0, messageAll);
	}

	public void showMessage(final Context context, final String message){
		new Runnable() {
			@Override
			public void run() {
				Map<String, Object> map= new Hashtable<String, Object>();
				Message msg = new Message();
				msg.what = 0;
				map.put("message", message);
				map.put("context", context);
				msg.obj = map;
				handler.sendMessage(msg);
			}
		}.run();
	}

	private static Handler handler = new Handler() {
		@Override
		public void handleMessage(Message msg) {
			Map<String, Object> map = (Hashtable<String, Object>)msg.obj;
			String message = (String)map.get("message");
			Context context = (Context)map.get("context");
			Toast.makeText(context, message, Toast.LENGTH_LONG).show();
		}
	};
}

코드는 이와 같은데, 문제는 서버를 통해 수신된 메시지 내용에 항상 이상한 문구가 추가된다는 점입니다.

 

예를들어 상대편 어플리케이션에서 "Hello"라고 보낸다면,

 

"Hello collapse_key do_not_collapse from 12xxxx.."라는 문구가 뜹니다.

 

뒤의 문구를 제외하고 순수한 메시지만을 수신하고 싶은데, 어떻게 해야 하나요??

 

익명사용자 님이 2013년 8월 8일 질문

2개의 답변

0 추천
응??  intent로 받으시니까 getExtra 로 키값만 넣으면 받으실텐데여
건방진프로그래머 (26,630 포인트) 님이 2013년 8월 9일 답변
0 추천

전송 시 "test", "hello" 라고 보냈다고 가정하면 다음과 같습니다.

수신할 때 위 예제를 기준으로 설명하자면...

@Override    protected void onMessage(Context arg0, Intent arg1) {
  if(arg1.getExtras()!=null){
    if(intent.getExtras().getString("test")!=null){
      showMessage(arg0, intent.getExtras().getString("test"));
    }
  }	
}

 

익명사용자 님이 2013년 8월 9일 답변
...