2011-04-19 6 views
18

Android 애플리케이션에서 요청 된 권한을 선택 사항으로 선언 할 수있는 방법이 있습니까?Android에서 '선택 사항'권한을 가질 수 있습니까?

e.e. 권한 집합을 요청하는 앱을 작성하고 싶습니다. 그 중 하나는 사용자 연락처에 대한 액세스입니다. 이제 응용 프로그램은이 액세스 권한 없이도 작동하고 유용한 작업을 수행 할 수 있지만 권한이 부여되면 더 많은 작업을 수행 할 수 있습니다.

and app에서 "권한 X가 필요하지만 어떤 경우에 축소 된 기능으로 실행해도 좋을지 모르겠다"고 말할 수있는 방법이 있습니까?

+1

아니요 ............. –

답변

9

권한이 매니페스트에 설정되어 있고 .apk를 설치할 때 사용자가 수락했기 때문에 저는 그렇게 생각하지 않습니다. 권한이 축소되고 기능 집합이 제한되어있는 라이트 버전의 응용 프로그램을 제작하여 대안으로 제공 할 수 있습니다.

+1

그러나이 대답은 도움이 될 수 있습니다. http://stackoverflow.com/questions/9299993/optional-permissions-so-an-app-can-show -on-all-devices-and-enable-optional-featu –

+0

도이 정보를 확인하십시오. http://www.londatiga.net/it/programming/android/solution-to-make-an-android-app-visible-to- 모든 기기에서 Google Play 사용시 특정 기능 -2/기능 및 사용 방법에 대한 추가 정보 –

+0

이 답변은 더 이상 유효하지 않습니다. https://developer.android.com/ training/permissions/requesting.html – bvdb

5

현재 지원되지 않으며 개발 중입니다. Android 버그 추적기에 issue 6266 스타가 표시되어 구현되어 있는지 확인하고 싶습니다.

참조 : http://code.google.com/p/android/issues/detail?id=6266

+0

문제 6266이 폐기되었습니다. 내가 아는 한 그 문제가 언제나처럼 적절하다는 것을 고려하면 왜 나에게 분명하지 않다. –

5

"주"응용 프로그램의 사용 권한을 요청하지 않음으로써 및 요청 동일한 android:sharedUserId를 사용하여 다른 응용 프로그램 ("스텁")를 작성하여 이미 설치된 응용 프로그램에 대한 권한을 부여 할 수 있습니다 특징.

context.checkCallingOrSelfPermission(permission) == PackageManager.PERMISSION_GRANTED 

가 (권한 문자열 중 하나로서 유효한 상황 허가 등의 컨텍스트) true로 평가되면 권한 스텁 응용 프로그램을 선택하여 설치 한 경우 다음 확인할 수 있습니다. 사실이라면 스텁 앱이 설치되고 권한이 필요한 기능을 잠금 해제 할 수 있습니다. 거짓 인 경우 기본 기능으로 돌아갑니다.

그런 식으로 앱을 디자인 할 때 여러 버전을 배포하는 경우처럼 코드를 변경하지 않고도 주 apk에 선택적 권한을 쉽게 다시 소개 할 수 있습니다.

이제 스텁 응용 프로그램 (중 하나)의 설치를 트리거하여 사용자에게 권한을 쿼리 할 수 ​​있습니다. 따라서 사용자 입력 후 권한이 필요한 경우 권한이 부여되지 않은 경우 apk를 실행하여 팝업을 시작하고 (물론 앞에 설명 활동을 추가 할 수도 있음) 다시 돌아올 때 해당 기능을 실행하십시오 패키지 관리자 또는 이전에 권한이 부여 된 경우. 기본 설정이나 firstrun 대화 상자의 어딘가에서 사용 권한을 사용 가능 또는 사용 불가능하게하는 옵션을 넣을 수도 있습니다. (나 같은) 게으른 사람들 패키지 설치를 제기하는 방법에 대한 간단한 요약은

: 유형 "application/vnd.android.package-archive"를 사용하여 file:// -URI에 대한 Intent.ACTION_VIEW을 사용하여 Intent을 만듭니다. 자산과 자원은 직접 작동하지 않습니다. 예를 들어, 자산으로 묶어 캐시 폴더 또는 유사하게 복사 할 수 있습니다.


경고 :이 답변은 (앱을 누설 수 아래 참조)이 방법은 일부 제거 문제가 같이 구글 서비스 약관 플레이를 준수 expecially에 구글 플레이 (같은 타사 메커니즘을 통해 제거 할 때하지 않을 수 있습니다, 사용자가 이러한 방법을 사용하여 도우미 응용 프로그램을 보지 못해서) 옵션 권한이 afaik 플레이 저장소에 표시 될 수 없기 때문입니다.

제거 문제로 인해 응용 프로그램 이름이 "MyApp"인 경우 "MyApp : XXX permissions"와 같은 이름을 사용하는 것이 좋으므로 사용자는 사전 순 목록에있는 모든 항목을 쉽게 제거 할 수 있습니다.또는 스텁 응용 프로그램을 더 복잡하게 사용하여 살면 ACTION_PACKAGE_REMOVED as mentioned here을 사용하십시오.

+0

좋은 힌트! 여기에 데모 동작 https://www.youtube.com/watch?v=u7bDg8EMEFM - 여기 코드 https://github.com/ligi/AJShA – ligi

+0

이 "플러그인"모델의 UI에 대한 관련 질문 : [사용자가 허가를 받아 Android 앱의 기능을 분할하는 것을 이해할 수 있습니까?] (https://ux.stackexchange.com/q/76183/40840) –

+0

@tepples 사용자가 실제로 별개의 앱이라는 것을 이해하지 못할 것이라고 생각합니다. (사용자가 모든 것을 이해하지 못한다면),하지만 대답에서 말했듯이이 방법은 앱 스토어에서 받아 들여지지 않을 것입니다. 또한 안드로이드 6은 몇 가지 형식의 선택적 권한을 지원합니다.이 대답은 꽤 오래된 것입니다. 그러나 아직 충분히 사용하지 않아서 좋은 "새로운"답변을 아직 제공하지 못했습니다. :) – dst

관련 문제