본문 바로가기
Android/Features

[Android] BroadcastReceiver 사용하기

by startSW 2023. 11. 22.

BroadcastReceiver는 시스템이나 애플리케이션 내에서 발생한 이벤트에 대한 알림을 수신하는 데 사용됩니다. 이를 활용하여 백그라운드 스레드에서 발송한 브로드캐스트 메시지를 메인 스레드에서 수신하여 처리할 수 있습니다.

 

1. 브로드캐스트 수신자 클래스 작성:

javaCopy code
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

public class MyResultReceiver extends BroadcastReceiver {
    public static final String ACTION_RESULT = "com.example.YOUR_APP_NAME.ACTION_RESULT";

    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction() != null && intent.getAction().equals(ACTION_RESULT)) {
            // 메인 스레드에서 처리할 작업
            // UI 업데이트 등
            // ...
        }
    }
}

 

2. 백그라운드 스레드에서 브로드캐스트 메시지 발송:

javaCopy code
import android.content.Intent;

public class YourBackgroundThread extends Thread {
    @Override
    public void run() {
        // 백그라운드 스레드에서 수행할 작업
        // ...

        // 작업이 완료되면 브로드캐스트 메시지를 발송
        Intent intent = new Intent(MyResultReceiver.ACTION_RESULT);
        // 다른 데이터를 넣고 싶다면 putExtra를 이용
        // intent.putExtra("key", value);
        context.sendBroadcast(intent);
    }
}

 

 

3. 메인 액티비티에서 브로드캐스트 리시버 등록:

javaCopy code
import android.content.IntentFilter;

public class MainActivity extends AppCompatActivity {
    private MyResultReceiver resultReceiver;

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

        // 브로드캐스트 리시버 등록
        resultReceiver = new MyResultReceiver();
        IntentFilter filter = new IntentFilter(MyResultReceiver.ACTION_RESULT);
        registerReceiver(resultReceiver, filter);
    }

    @Override
    protected void onDestroy() {
        // 액티비티가 종료될 때 브로드캐스트 리시버 등록 해제
        unregisterReceiver(resultReceiver);
        super.onDestroy();
    }
}

위의 코드는 백그라운드 스레드에서 MyResultReceiver.ACTION_RESULT 액션으로 브로드캐스트 메시지를 발송하면, 메인 스레드에서는 이를 수신하여 작업을 처리합니다.