2012년 3월 22일 목요일

[안드로이드] 사용자 정의 permission의 선언

------------ 요기는 삽질 내용입니다. permission의 선언법만 궁금하시면 넘어가세요.
간단한  ContentProvider를 테스트 하기 위해 샘플 프로젝트를 만들어 보았다. 액티비티 하나,  ContentProvider  하나. 이 App를 CPTestApp1 이라 명명해 보았다.

<provider
            android:name="TestContentProvider"
            android:authorities="com.hermina.testcontent">
</provider>


잘동작한다.

이번엔 신규 App CPTestApp2를 생성해 CPTestApp1에서 만든  ContentProvider를 사용해 보기로 하였다.
뭐 잘 된다.

이번엔 CPTestApp1의 ContentProvider에 permission을 지정 해 보았다. 기왕 하는거 퍼미션명도 다르게 지정해 보았다.

<provider
            android:name="TestContentProvider"
            android:authorities="com.hermina.testcontent"
            android:readPermission="com.hermina.permission.CP_READ" >
</provider>



그리고 나서 CPTestApp2에 해당 권한을 넣어 준다.
<uses-permission android:name="com.hermina.permission.CP_READ"/>

젠장 이번엔 안된다.
"com.hermina.testcontent"에 접근 하려면 "com.hermina.permission.CP_READ"권한이 있어야 한다는데...

이쯤에서 인터넷 검색해보고 별짓 다해봤다. ContentProvider에 관련된 자료와 책을 보고 또보고 다른 소스 코드들을 열심히 보았지만 이유를 몰랐다.
그러던중 <permission android:name="xxx.xxxxxx.xxxxx" /> 를 발견하게되고...
분을 삭힐수 있게 되었는데...
어릴땐 책을 사면 아까워서 글자 한톨 그림 구석구석 정독을 했었다. 하지만 언제부턴가 책을 사도 빠르게 필요한 부분만 뽑아 보게 되었다. 내가 만약 안드로이드 permission에 관해 먼저 자세히 알고 있었다면 이런 한심한 삽질은 하지 않았으랴...

------------ 본론입니다.
안드로이드에서 사용자 정의 퍼미션을 선언하는 방법은 다음과 같다.

<receiver android:name=".NewPhotoReceiver">

컨텐트 프로바이더에서 해당 퍼미션을 사용 하려면 다음과 같이 하면 되고

<provider
            android:name="TestContentProvider"
            android:authorities="com.hermina.testcontent"
            android:readPermission=" xxx.xxxxxx.xxxxx " >
</provider>


이를 사용 하는 어플리케이션에서 해당퍼미션을 허용하려면

<uses-permission android:name=" xxx.xxxxxx.xxxxx "/>

처럼 사용 하면 된다.

댓글 1개:

  1. 위에 receiver부분이 permission android:name="xxx.xxxxxx.xxxxx" 이렇게 변경되어야 할것 같습니다. 롤리팝 업그레이드 되면서 문제가 있게지만요.

    답글삭제