Broadcast
시스템이나 다른 앱이 발생시키는 Broadcast를 구독하거나 내 앱이 게시 가능
ex) 폰 부팅, 충전 시작, 블루투스 기능 상태 변화
구독하는법
1. AndroidManifest.xml에 선언하기
1) 앱이 실행중이 아니면 앱을 실행
2) Android 8.0 Oreo API 26부터는 일부 Broadcast를 제외하고는 사용 불가
3) https://developer.android.com/guide/components/broadcast-exceptions?hl=ko
2. Context에 등록하기
1) 앱 실행 중에 등록하는 것
2) Broadcast Receiver와 Intent Filter를 사용
Bluetooth switch
사용자가 bluetooth 기능을 켜거나 끌 수있는 Switch를 화면에 추가
1. Permission 앱의 activity_mail.xml에 Switch
<Switch
android:id="@+id/switchBluetooth"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:switchPadding="8dp"
android:text="Bluetooth"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/buttonSend" />
2. 필요한 Permission 추가
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
3. 앱이 실행될 때 현재 Bluetooth기능의 상태를 확인해 Switch 업데이트
4. Switch를 켜고 끄는데 맞춰 기능을 켜고 끈다
BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
if(adapter!=null)
binding.switchBluetooth.setChecked(adapter.isEnabled());
binding.switchBluetooth.setOnCheckedChangeListener((v, b)->{
if(adapter!=null){
if(b) adapter.enable();
else adapter.disable();
}
});
5. BroadcastReceiver 클래스 생성
독립된 클래스로 만들 경우 GUI 갱신이 어려움
내부 클래스로 만들 경우 코드 복잡도가 올라감
-> Switch 상태만 바꾸면 되는 간단한 기능이므로 내부 클래스로 작성
class BTReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
String action=intent.getAction();
if(action!=null && action.equals(BluetoothAdapter.ACTION_STATE_CHANGED)){
int state=intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, BluetoothAdapter.STATE_OFF);
switch(state){
case BluetoothAdapter.STATE_TURNING_ON:
case BluetoothAdapter.STATE_ON:
binding.switchBluetooth.setChecked(true);
break;
case BluetoothAdapter.STATE_TURNING_OFF:
binding.switchBluetooth.setChecked(false);
case BluetoothAdapter.STATE_OFF: break;
}
}
}
}
클래스 변수 추가
public class MainActivity extends AppCompatActivity {
private ActivityMainBinding binding;
private final int REQ_SMS=10;
private BTReceiver btReceiver;
onCreate 함수 마지막 수정 및 onDestroy Override
btReceiver = new BTReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED);
registerReceiver(btReceiver, filter);
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(btReceiver);
}
'모바일 > 안드로이드' 카테고리의 다른 글
[Android] Step2 - 활동(Activity) (0) | 2021.06.22 |
---|---|
[Android] Step1 - 안드로이드 소개 (0) | 2021.06.22 |
[Android] Permission (0) | 2021.06.18 |
[Android Studio] RecyclerView (0) | 2021.04.04 |
[Android Studio] SharedPreference (0) | 2021.04.04 |