본문 바로가기

Android

[7일차]receiver

안드로이드 메니페스트에 등록해서 받을수 있는 이벤트가 있고, 없는게 있다. 


registerReceiver로 등록할 수있는 이벤트는 전원이나 그런거..



Receiver가 onReceive() 메소드가 호출된다. 



onReceive라는 애는 동작할때만 살아있다. 


그래서 Service를 구동 할 수도 있다. 


onReceive는 10초 이내로 동작을 끝내야 한다. 


그 안에 받아서 처리를 해야한다. 


액티비티를 구동할 때는 

일반 브로드캐스트sendBrodcast(),



priority우선순위를 가지고 높은 애부터 실행한다. sendOrderedBroadcast()



menifest에 등록하는 Receiver


registerReceiver로 등록한 Receiver


Sticky Broadcast

Sticky이벤트가 발생하면 안드리이드 시스템이 보관했다고 Event를 받겠다고 등록하면 저장하고 있던 Intent로 보내주는 방식으로 동작.


실습


new - receiver 생성

안드로이드 menifest에서 receiver등록 되있는 곳에서 
intent-filter 에서 priorty를 만들수있다. defalt는 0 ~-1000까지다.

action-name ="android.provider.Telephoy.SMS_RECEIVED" 어떤 이벤트를 받을건지

<uses-permission android:name "android.permission.ReCEIVE_SMS"/>

이게 Api 24 부턴 안된다 그래서 targetSdkVersion을 22로 낮춘다. 


그러면 저 방식으로 할 수 있다. 


SMS를 받는 기능을 쓸거고 도착하면 알려줘 이거 하는거다. 


그래서 onReceive함수에서 토스트를 띄워보자.


여기까지 하면 앱이 죽는다. 이 메소드를 들어오는 context가 달라서 죽는다. bind가 안되서 ? 


그래서 일반적으로는 context.startService(new Intent(context,MyService.class)) 이렇게 한다. 





화면이 구동될때, 화면이 켜지거나 꺼지면 알고싶다. 


그걸 등록하려면 registerReceiver를 이용한다. 





Service에서 

IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);

registerReceiver(mReceiver, filter);


BroadcastReceiver mReceiver = new BroadcastReceiver(){


if(intent.getAction().equals(Intent.ACTION_SCREEN_ON){


Toast 메세지

})else if(){

 Log.i로그를 찍는다. 


}

}


근데 레지스터 리시버를 쓰면, onDestroy 될때 unregisterReceiver(mReceiver)를 반드시 해줘야 메모리 릭이 안생긴다. 


'Android' 카테고리의 다른 글

[8일차] 6.0이상 임의적 퍼미션설정  (0) 2016.07.22
[8일차]글로벌리시버, 로컬리시버  (0) 2016.07.22
[7일차]서비스  (0) 2016.07.21
[7일차]프래그먼트, BackStack  (0) 2016.07.21
[7일차]  (0) 2016.07.21