2016년 4월 10일 일요일

GCM 3. MainActivity.java

onCreate() : UI, 이벤트, 핸들러를 정의
onResume() : 화면이 보여질때 LocalBroadcastManager를 정의
onPause() : 화면이 사라질때 LocalBoradcastManager에 등록된 것을 제거
checkPlayService() : Google Play Service를 사용할 수 있는 환경인지 체크
registerBroadcastReceiver() : LocalBroadcast 액션에 해당하는 작업을 정의
getInstanceIdToken() : GCM을 등록하고 Instance ID에 해당하는 token을 가져온다.

package com.example.rock.opregcheck;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.support.v4.content.LocalBroadcastManager;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;

import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.GooglePlayServicesUtil;

public class MainActivity extends AppCompatActivity {

    private static final int PLAY_SERVICES_RESOLUTION_REQUEST = 9000;
    static final String TAG = "MainActivity";

    BroadcastReceiver mRegistrationBroadcastReceiver;

    Button btnGetInstanceId;
    TextView mInstanceIdTextView;
    TextView mReceiveMessageTextView;
    ProgressBar progressBar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // LocalBroadcast 생성
        registerBroadcastReceiver();

        btnGetInstanceId = (Button) findViewById(R.id.btnGetInstanceId);

        // 토큰을 보여줄 TextView
        mInstanceIdTextView = (TextView) findViewById(R.id.mInstanceIdTextView);

        // 메시지를 보여줄 TextView
        mReceiveMessageTextView = (TextView) findViewById(R.id.mReceiveMessageTextView);

        // 토큰을 가져오는 진행상태를 보여주는 ProgressBar 정의
        progressBar = (ProgressBar) findViewById(R.id.progressBar);

        mInstanceIdTextView.setVisibility(View.GONE);
        //mReceiveMessageTextView.setVisibility(View.GONE);
        progressBar.setVisibility(View.GONE);

        btnGetInstanceId.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                getInstanceIdToken();
            }
        });
    }

    /**
     * Instance ID를 이용하여 디바이스 토큰을 가져오는 GcmRegistrationIntentService를 실행
     */
    public void getInstanceIdToken() {
        if (checkPlayServices()) {
            // Start IntentService to register this application with GCM.
            Intent intent = new Intent(this, GcmRegistrationIntentService.class);
            startService(intent);
        }
    }

    private boolean checkPlayServices() {
        int resultCode = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);
        if (resultCode != ConnectionResult.SUCCESS) {
            if (GooglePlayServicesUtil.isUserRecoverableError(resultCode)) {
                GooglePlayServicesUtil.getErrorDialog(resultCode, this,
                        PLAY_SERVICES_RESOLUTION_REQUEST).show();
            } else {
                Log.i(TAG, "This device is not supported.");
                finish();
            }
            return false;
        }
        return true;
    }

    /**
     * LocalBroadcast 리시버 정의.
     * 토큰 획득과정에서 READY, GENERATING, COMPLETE 액션에 따라 UI에 변화를 준다.
     */
    public void registerBroadcastReceiver() {

        mRegistrationBroadcastReceiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {

                String action = intent.getAction();

                if(action.equals(QuickstartPreferences.REGISTRATION_READY)) {
                    mInstanceIdTextView.setVisibility(View.GONE);
                } else if(action.equals(QuickstartPreferences.REGISTRATION_GENERATING)) {
                    mInstanceIdTextView.setVisibility(View.VISIBLE);
                    mInstanceIdTextView.setText("InstanceID 토큰 생성중...");
                } else if(action.equals(QuickstartPreferences.REGISTRATION_COMPLETE)){
                    btnGetInstanceId.setText("완료");
                    btnGetInstanceId.setEnabled(false);
                    String token = intent.getStringExtra(QuickstartPreferences.INSTANCE_ID_TOKEN);
                    mInstanceIdTextView.setText(token);
                    Toast.makeText(MainActivity.this, "GCM에 기기 등록 완료", Toast.LENGTH_SHORT).show();
                }
            }
        };
    }

    @Override
    protected void onResume() {
        super.onResume();

        // LocalBoardcastManager에 액션을 정의
        LocalBroadcastManager.getInstance(this).registerReceiver(mRegistrationBroadcastReceiver,
                new IntentFilter(QuickstartPreferences.REGISTRATION_READY));
        LocalBroadcastManager.getInstance(this).registerReceiver(mRegistrationBroadcastReceiver,
                new IntentFilter(QuickstartPreferences.REGISTRATION_GENERATING));
        LocalBroadcastManager.getInstance(this).registerReceiver(mRegistrationBroadcastReceiver,
                new IntentFilter(QuickstartPreferences.REGISTRATION_COMPLETE));
    }

    @Override
    protected void onPause() {
        // LocalBoardcast를 모두 삭제한다
        LocalBroadcastManager.getInstance(this).unregisterReceiver(mRegistrationBroadcastReceiver);

        super.onPause();
    }
}

댓글 없음 :

댓글 쓰기