본문 바로가기
Front-end/Android (안드로이드 앱 개발)

Android Studio , BroadCast Reciever 브로드캐스트 리시버

by javapp 자바앱 2020. 8. 1.
728x90

 

BroadCast Reciever

ex)문자에 반응, 사용자의 요청이나 시스템에서 사건이 발생할 경우 개발자가 만든 코드를 동작 시킬수 있는 실행 단위

안드로이드 8 이상이면 암시적 인텐트 코드로 등록하고 다른 앱에서 sendBroadcast(intent) 실행

 

<리시버 >

1)  BroadcastReceiver 상속 받는 java 파일 생성

file – new – other – broadcastreciever

 

public class MyReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        String str= "동작";
        Toast t1 = Toast.makeText(context,str,Toast.LENGTH_SHORT);
        t1.show();
    }
}

 

<리시버 요청하는 >

//명시적 인텐트
Intent intent = new Intent();
intent.setClassName("com.example.broadcastreceiver",
        "com.example.broadcastreceiver.MyReceiver");
sendBroadcast(intent);

MyReceiver 클래스 불러와서 onReceive 실행 

 

 


암시적 인텐트 경우

1 메니페스트의 리시버에 인텐트 필터 등록

<receiver
   
android:name=".MyReceiver"
   
android:enabled="true"
   
android:exported="true">
    <intent-filter>
        <action android:name="com.example.broadcastreceiver.br1"/>
    </intent-filter>
</receiver>

 

2

public class MainActivity extends AppCompatActivity {
    //브로드캐스트 리시버 참조변수
    MyReceiver mr;

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

        //안드로이드 8이상이면 인텐트 코드로 등록
        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){
            mr = new MyReceiver();
            IntentFilter filter = new IntentFilter("com.example.broadcastreceiver.br1");
            registerReceiver(mr,filter);
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){
            if(mr != null){
                unregisterReceiver(mr);
                mr= null;
            }
        }
    }
}

 

3 브로드캐스트 요청하는 앱에서

Intent intent = new Intent("com.example.broadcastreceiver.br1");
sendBroadcast(intent);

 

 

 


 

8.0 이후에도 사용가능

https://developer.android.com/guide/components/broadcast-exceptions.html

 

댓글