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();
}
}
댓글 없음 :
댓글 쓰기