Android O OS에서 Boradcast 제약사항이 추가되었습니다.
자세한 사항은 구글 개발자 사이트에 다음과 같이 소개되어 있습니다.
https://developer.android.com/about/versions/oreo/background.html#broadcasts
요약하면 앱은 더 이상 명시적 브로드캐스트를 제외한 리시버를 AndroidManifest.xml에 등록할 수 없습니다.
암시적 브로드캐스트 리시버는 런타임에 Context.registerReceiver()를 통해서만 등록이 가능합니다.
단, 서명 권한이 요구되는 브로드캐스트는 암시적 브로드캐스트 제한에서 제외됩니다.
이는 동일한 인증서로 서명된 앱으로만 브로드캐스트가 전송되기 때문입니다.
이 부분에 대해 조금 더 자세히 이야기하면 다음과 같습니다.
Broadcast Receiver는 AndroidManifest.xml에 다음과 같이 퍼미션을 정의하고, 리시버를 등록할 수 있습니다.
<permission android:name="your.permission.name" android:protectionLevel=signature"/> ... <receiver android:name="your.reciever.name" android:permission="your.permission.name" <intent-filter> <action android:name="your.action.name" /> </intent-filter> </receiver> |
Broadcast의 Sender는 다음과 같은 API를 통해 암시적 브로드캐스트를 전송할 수 있습니다.
이때, ReceiverPermission을 함께 전달해야합니다.
sendBroadcast(Intent intent, String receiverPermission) Broadcast the given intent to all interested BroadcastReceivers, allowing an optional required permission to be enforced. |
예를 들면 아래와 같습니다.
context.sendBroadcast(new Intent("your.action.name"), "your.permission.name") |
암시적 브로드캐스트를 전송할 때, 퍼미션을 명시해주면 해당 퍼미션을 가진 Receiver에게만 브로드캐스트가 전송되므로, 암시적 브로드캐스트 제약에서 자유롭습니다.
'Study > Android' 카테고리의 다른 글
Android O OS Unknown apps Persmission 관련 내용 정리 (0) | 2017.10.23 |
---|