
intent는 실행할 액티비티가 하나일 때만 정상 동장한다. (2개 이상은 하나만 실행, 없을 땐 에러 발생)
intent가 발생하여 브로드캐스트 수행시: 없더라도 에러 발생 x, 브로드캐스트 여러개면 모두 실행
BroadCast Receiver 내부 구현 내용: 업무처리 x, 이벤트모델 컴포넌트가 필요해서 만들어 놓은것
public class MyReceiver extends BroadcastReceiver{
public void onReceive(Context context, Intent intent){
Toast toast = Toast.makeText(context, "I am Broadcast Receiver", Toast.LENGTH_SHORT);
toast.show();
}
} <receiver
android:name=".MyReceiver"
android:enabled="true"
android:exported="true"> </receiver>sendBroadcast()이용, Intent 사용Intent intent = new Intent(this, MyReceiver.class)
sendBroadcast(intent)브로드캐스트 리시버는 앱 내부 + 시스템 상황 감지로도 이용
시스템 브로드캐스트: 많은 브로드캐스트리시버 인텐트 발생시키는데 자주 이용되는 몇가지 설명
<receiver android:name=".MyReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>action의 name퍼미션 등록 !!<uses-permission android:name="android.permission.RECEIVER_BOOT_COMPLETED"/>사용자 스마트폰 화면 on/off 사용
시스템에서 브로드캐스트 인텐트 발생시켜 앱에서 브로드캐스트리시버 이용해 상황 감지 가능
매니페스트에 리시버 태그등록하지 않는다(동적 코드 등록 필요)
// 액티비티 / 서비스 클래스 내부 코드
BroadcastReceiver brOn = new BroadcastReceiver(){
public void onReceive(Context context, Intent intent)
Log.d("kkang","screen on..")
}
자바 코드에서 브로드캐스트리시버 정의 후 registerReceiver()등록
registerReceiver(brOn, new IntentFilter(Intent.ACTION_SCREEN_ON);
// 브로드캐스트리시버는 코드에서 동적으로 등록 해제된다.
unregisterReceiver(btOn)
부팅완료 시점 띄우는 문자열 = "android.intent.action.SCREEN_ON)
브로드캐스트 리시버 등록으로 감지 가능<!-- outgoing: 전화발신 순간, read_phone: 전화수신 순간 -->
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE".><receiver android:name=".MyReceiver">
<intent-filter>
<action android:name="android.intent.action.NEW_OUTGOING_CALL"/>
<action android:name="android.intent.action.PHONE_STATE"/>
</intent-filter>
</receiver>getStringExtra()로 얻음, 수신번호: Bundle 객체 사용if(action.equals("android.intent.action.NEW_OUTGOING_CALL")){
String phoneNum = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);
// .,,
} else if(action.equals("android.intent.action.PHONE_STATE")){
Bundle bundle = intent.getExtras();
String state = bundle.getString(TelephonyManager.EXTRA_STATE);
String phonNum = bundle.getString(TelephonyManager.EXTRA_INCOMING_NUMBER);
}안드로이드 멀티태스킹제공: 동시에 여러앱 실행 가능, 백그라운드에서도 실핼될 수 있는 구조
백그라운드 실행 제한 두가지
백그라운드 서비스 제한
브로드캐스트 제한
암시적 인턴트에 의한 리비서의 실행 제한
BroadcastReceiver를 실행하는 부분만 제한된다. <receiver android:name=".MyReceiver"
android:enable="true"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MY_RECEIVER"/>
</intent-filter>
</receiver> Intent intent = new Intent("com.example.ACTION_MYRECEIVER");
sendBroadcast(intent);