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
Posted by Worr
,