posted by Kyleslab 2012. 11. 2. 15:32

어느정도 결론을 내리긴 했지만 역시나 찝찝하다.

- broadcast 즉 보내는 쪽에서는 어떻게 권한을 실어보내고 받는 쪽은 어떻게 검사를 할까?

- 보내는 쪽에서는 

public abstract void sendBroadcast (Intent intent, String receiverPermission)

Added in API level 1

Broadcast the given intent to all interested BroadcastReceivers, allowing an optional required permission to be enforced. 

이것을 이용하면 될듯 싶은데 Manifest파일에 

<permission android:name="com.test.Permission.send"></permission>

   <uses-permission android:name="com.test.Permission.send"/>

이것도 반드시 작성해야했다.


#. 그런데 sendBroadcast(intent)로 작성하고 Manifest파일에 uses-permission만을 이용해도 가능했다. 그런데 어느 순간부터 또 안된다.


- 받는 쪽에서는 

        <receiver

            android:name="com.example.receiver.TextReceiver"

            android:permission="com.test.Permission.send" >

            <intent-filter>

                <action android:name="com.test.SEND" >

                </action>


                <category android:name="sender" >

                </category>

            </intent-filter>

        </receiver>

이런식으로 정의해주면 된다.


#. 신기한 점은 이 리시버에 퍼미션이 없다면 무조건 통과가 된다.

마치 인텐트의 액션이 아무것도 정의되있지 않다면 모든 인텐트 필터를 통과하는 것처럼 말이다.

단 카테고리는 정확히 일치해야한다.


#. 또한 보내는 쪽에서 sendBroadcast(intent) 메소드를 이용하여 권한없고 ManifestFile에는 위와 같이 적용되어있을때도 리시버가 브로드캐스트를 받는다. 이것을 미루어볼때 굳이 메소드를 이용하지 않고 브로드캐스트를 하면 안드로이드쪽에서 알아서 Manifestfile을 검사하여 권한을 실어 보내는 듯 하다. 그러나 과연 진실은 어디에?



위와 같이 적용해서 사용하기는 했지만 역시 권한을 적용해주는 정확한 방법이 없고 경우의 수도 많아서 조금 혼란스럽다. 다른 블로그에도 정확한 설명이 없다. 레퍼런스에는 단편적인 정보뿐이다.


생각하다보니 리시버와 서비스는 둘다 켜있지 않아도 인텐트를 받아 처리할 수 있다. 이런 면에서 볼때 차이점이 없어 보여 혼동이 되었다. 그러나 생각해보니 리시버에서 받은 인텐트는 그렇게 전달하고 끝이 아니라 관심있는 모든 리시버들에게 줄수 있고 확실히 이런 알림 되는 것들을 받아 간단한 작업을 빠르게 처리하는데 특화되어 있다는게 생각이다. 

서비스와 달리 개발자가 볼수 있는 부분도 onRecieve()메소드 하나로 제한한점이나, 10초안에 처리를 완료하지 않으면 ANR로 자동으로 종료해준다던지 등등 말이다. 실제 레퍼런스에서도 이런 작업을 하기위해 제일 작은 비용을 소모하게 되어 있다고 한다. 



### 더 공부하다보니 확실해졌다. 보내는 쪽의 매니페스트 파일안에는 permission을 정의하고  use-permission이 반드시 있어야하고 받는 쪽에서는 매니페스트파일이나 리시버에 반드시 있어야한다.




'Mobile > Android' 카테고리의 다른 글

weight값설정시 최적화  (0) 2012.11.06
한 앱에서 라이브러리와 값 공유  (0) 2012.11.02
Push에 대한 것!  (0) 2012.10.30
TweenAnimation  (0) 2012.09.24
AsyncTask  (0) 2012.09.21