제가 안드로이드 프로그래밍 정복이라는 책을 보고잇는데요
package exam.SaveZone;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class SaveZone extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button btn = (Button)findViewById(R.id.btn);
btn.setOnClickListener(new Button.OnClickListener(){
public void onClick(View v){
v.postDelayed(new Runnable(){
public void run(){
Intent intent = new Intent();
intent.setAction("receiver.SAVEZONE");
sendBroadcast(intent);
}
},1000);
}
});
}
}
package receiver;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.widget.Toast;
import exam.SaveZone.R;
public class Onreceiver extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.receiver);
}
public void onResumn(){
super.onResume();
IntentFilter filter = new IntentFilter();
filter.addAction("receiver.SAVEZONE");
registerReceiver(br,filter);
}
public void onPause(){
super.onPause();
unregisterReceiver(br);
}
BroadcastReceiver br = new BroadcastReceiver(){
public void onReceive(Context con,Intent intent){
Toast.makeText(con,"수신됨",Toast.LENGTH_SHORT).show();
}
};
}
책에서 보면 매니페스트에 등록하지않고 액티비티가 실해중일때만 방송을 수신할수있다고 해서 똑같이 코딩햇는데
아무런 ㅡㅡ;; 반응이 없어서 여쭤봅니다 . 더군다나 사이트에서 제공하는 예제소스를 압축풀어서
실행시켜도 다른 예제는 잘돌아가는데 이소스만 안돼네요 머가 잘못된거지 알려주세요
receiver는 registerReceiver 부터 unregisterReceiver 사이에서만 받을 수 있습니다.
그런데 리시버를 가지고 있는 액티비디에서 onResume 와 onPause 에 넣어셨으니까,
이 액티비티가 화면에 보일 때만 받을 수 있게 만든거네요.
그런데, 버튼을 다른 액티비티에 있고, 이 버튼 누르려면 화면이 버튼있는 액티비티로 가게 되는데요
그럼 리시버를 가진 액티비티가 onPause 가 되서 unregisterReceiver가 되죠
즉 받을 곳이 없어지죠.
그러니 동작 안하는 프로그램을 만든 것이 됩니다 ^^
테스트 해보시려면, onCreate 하고 onDestory 로 옮기시고,
액티비티 전환 (메뉴키) 하면서 테스트 해보세요!