[안드로이드] Android Observer

2014. 4. 27. 00:30Mobile/Android



반응형


[안드로이드] Android Observer


안녕하세요 ~ 이번에는 observer 에대해서 조금 살펴보겠습니다~ 아래 소스와 그림을 보시고 연습해보세요~





package com.example.ggaritest;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.database.ContentObserver;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {

	//이너마가 startActivityForResult에서 requestCode 같은 역활이다
	public static final Uri URI = Uri.parse("content://com.tistory.ggari");
	
	ContentObserver contentObserver = null;

	Button btnSend;
	Button btnSend1;
	TextView tvCall;

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

		tvCall = (TextView) findViewById(R.id.tvCall);
		
		findViewById(R.id.btnSend).setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				//따른 activity 에서 이걸 호출하면 됨.
				getApplicationContext().getContentResolver().notifyChange(URI, null);
			}
		});
		
		
		findViewById(R.id.btnSend1).setOnClickListener(new OnClickListener() {
			
			@SuppressLint("NewApi") 
			@Override
			public void onClick(View v) {
				//이런식으로 구분자값을 변경이가능...
				contentObserver.dispatchChange(true, URI);
			}
		});

		// ContentProvider 더가 변경될때 알려주는 콜백함수
		contentObserver = new ContentObserver(new Handler()) {
			@Override
			/**
			 * 까리의 생각
			 * onchage 안에서 구별값을 할 수 있는것은 true/false 바께없다
			 * 어떤 MSG 를 받아 처리하고싶은데...
			 * 예를들면 startActivityForResult(intent, requestCode) 것이다
			 * requestCode를 받아 처리하고싶은데.
			 * Observer를 사용할려면  SharedPreferences 같은걸로 구분자값을 넣어줘서
			 * 처리하면 유용하게 쓰일수도 있을거 같다.
			 */
			public void onChange(boolean selfChange) {
				super.onChange(selfChange);
				Toast.makeText(getApplicationContext(),	"onChange=" + selfChange, 1).show();
				System.out.println("onChange=" + selfChange);
				tvCall.setText("observer call=" + selfChange);
				
			}
		};

	}// end oncreate

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

		// Observer 등록
		getContentResolver().registerContentObserver(URI, false,contentObserver);
	}

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

		// Observer 해지
		getContentResolver().unregisterContentObserver(contentObserver);
	}

}// end Activity


보내라 라고 클릭하시면 false 가 뜰 것입니다.




보내라1을 눌를경우 true 가 날라옵니다.




잘 응용해서 사용하면 좋겠지만... 조금더 공부를 해야할거 같습니다.




끝~




반응형