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

GCMIntentService 쪽에 관해서 질문이 있습니다.

0 추천

하하 아직 초보개발자이다보니 질문이 많으점은 양해부탁드립니다...

 
GCMIntentService을 구현을 다 하고 테스트 중인데
 
GCMIntentService의 onmessage 부분에서 받아온 intent를 mainactivice 로 가져가고 싶어서 질문을 드리게 되었습니다.
 
GCMIntentService란 파일이 따로있고 메인이란 것이 따로있습니다.
 
이것을 구현하려는 목적은 GCMIntentService 에서 toast를 구현을 하려고해서 구현을 하였으나
좀더 이쁘게 customtoast 를 쓰기 위해선 view를 불러와야 하는데 GCMIntentService에서는 view가 호출이 되지 
않다보니 main 쪽으로 값을 옮겨서 표출을 해주려고 합니다.
GCMIntentService 쪽에서 customtoast를 표출하는 방법이라도 있으시면 도움을 부탁드리겠습니다.
Noswind (2,330 포인트) 님이 2014년 8월 11일 질문

3개의 답변

+1 추천
 
채택된 답변
new Handler(Looper.getMainLooper()).post(new Runnable() {
            @Override
            public void run() {
                Toast toast = new Toast(getApplicationContext());
                toast.setView(LayoutInflater.from(getApplicationContext()).inflate(R.layout.toast, null));
                toast.setDuration(Toast.LENGTH_LONG);
                toast.show();
            }
        });

이렇게 해보세요

alkyne (22,960 포인트) 님이 2014년 8월 11일 답변
Noswind님이 2014년 8월 11일 채택됨
public void showMessage(final Context context, final String message){
        new Runnable() {
            @Override
            public void run() {
                String messageS1 = message.substring(6,message.length()-3);
                Map<String, Object> map= new Hashtable<String, Object>();
                Message msg = new Message();
                msg.what = 0;
                map.put("message1", messageS1);
                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 messageS2 = (String)map.get("message1");
            Context context = (Context)map.get("context");
            Toast.makeText(context, "수신 메시지 : "+messageS2, Toast.LENGTH_LONG).show();
        }
    };

이게 제가 사용하는 기본 toast 입니다
어디에다가 수정을 하라고 말씀하시는건지 잘 이해가 안되네요..
아 처리했습니다 감사합니다.
+1 추천
토스트 자체는... 메인 쓰레드가 아닌곳에서도 띄울 수 있습니다...

토스트 커스텀 하기..커스텀 토스트 등등...으로 검색해보시면 될거 같네요...
wifi (1,340 포인트) 님이 2014년 8월 11일 답변
GCMIntentService 에서 커스텀 토스트를 사용하게되면
LayoutInflater inflater = getLayoutInflater();
이부분이 널익셉션 이라면서 앱자체가 오류가 뜨면서 꺼지게 됩니다...
View view = LayoutInflater.from(context).inflate(resId, null);
이런식으로 한번 해보시겠어요?..
잘 될진 모르겠네요...
음 그거도 잘 안되네요,,,
0 추천

표출하는방법은 여러가지 방법이 있지만 저는 

액티비티를 투명으로 줘서  띄우는 방식을 써는데..

onmessage에서

Intent i = new Intent(context, Alert.class);

Bundle b = new Bundle();
b.putString("text", message);
b.putString("pushtype", pushtype);
i.putExtras(b);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
 
액티비티 투명효과 스타일 적용하시면 됩니다.
<item name="android:windowIsTranslucent">true</item>
 
alert액티비티에서 원하는 결과를 보여주면되겠죠?
 
 
랩조동 (1,420 포인트) 님이 2014년 8월 11일 답변
...