Android BroadCastReceiver 오레오 이후 변경된 점
BroadCastReceiver 오레오 이후 변경된 점
앱은 더 이상 명시적 브로드캐스트를 제외한 리시버를 AndroidManifest.xml에 등록할 수 없습니다. 암시적 브로드캐스트 리시버는 런타임에 Context.registerReceiver()를 통해서만 등록이 가능합니다. 단, 서명 권한이 요구되는 브로드캐스트는 암시적 브로드캐스트 제한에서 제외됩니다. 이는 동일한 인증서로 서명된 앱으로만 브로드캐스트가 전송되기 때문입니다.
AndroidManifest.xml
1
2
3
4
5
6
7
8
<receiver
android:name=".broadcastreceiver.BatteryReceiver"
android:enabled="true"
android:exported="true">
<!--<intent-filter>//오래오 이전버전에서는 이렇게 해야됨-->
<!--<action android:name="android.intent.action.ACTION_POWER_CONNECTED"/>-->
<!--</intent-filter>-->
</receiver>
BroadcastReceiver class
1
2
3
4
5
6
7
8
9
10
public class BatteryReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Intent.ACTION_POWER_CONNECTED)){
Toast.makeText(context, "전원 연결", Toast.LENGTH_SHORT).show();
} else if (intent.getAction().equals(Intent.ACTION_POWER_DISCONNECTED)){
Toast.makeText(context, "전원 해제", Toast.LENGTH_SHORT).show();
}
}
}
MainActivity
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
private BatteryReceiver batteryReceiver;
@Override
protected void onResume() {
super.onResume();
//BroadCastReceiver 에 Action 등록
batteryReceiver = new BatteryReceiver();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(Intent.ACTION_POWER_CONNECTED);
intentFilter.addAction(Intent.ACTION_POWER_DISCONNECTED);
this.registerReceiver(batteryReceiver,intentFilter);
}
@Override
protected void onPause() {
super.onPause();
unregisterReceiver(batteryReceiver);
}