Несколько вопросов о пользовательских разрешениях в Android

Я изучаю Android-программирование, и я понимаю концепцию пользовательского разрешения.

Основываясь на моем понимании, так работают пользовательские разрешения:

'Base app' может защитить некоторые его компоненты (например, активность и службы), объявив пользовательские разрешения (т.е. используя теги <permission> в файле манифеста) и 'client app', который вызывает действия и службы, защищенные пользовательскими разрешениям необходимо получить необходимые разрешения (т.е. использовать теги <uses-permission> в файле манифеста) для вызова этих компонентов в base app.

Однако у меня есть эти вопросы относительно пользовательских разрешений:

  • Если пользовательское разрешение объявлено как опасное (т.е. android:protectionLevel="dangerous"), требуется ли client app получить одобрение от пользователя во время установки? Если да, то как пользователь знает об этих настраиваемых разрешениях, потому что не будет никакой документации для пользовательских разрешений.
  • Во время установки, как client app знает, что base app уже установлен в пользовательском телефоне? В любом случае, для client app знать эту информацию?
  • После установки client app что произойдет, если пользователь решит удалить base app? В этом случае, если пользователь пытается использовать client app, это вызовет любое исключение безопасности?

Я не знаю, имеют ли эти вопросы смысл, но это заставляет меня задаться вопросом, как пользовательские разрешения действительно работают в реальном сценарии.

Спасибо.

Ответы

Ответ 1

Ответы на ваши вопросы приводятся ниже. Но вы можете обратиться http://developer.android.com/guide/topics/manifest/permission-element.html для лучшего понимания прав Android.

1. Да, если вы объявляете

android:protectionLevel="dangerous"

то система не может автоматически предоставить ее запрашивающему приложению. Любые опасные разрешения, запрашиваемые приложением, могут отображаться пользователю и требуют подтверждения перед продолжением.

Базовое приложение, определяющее пользовательское разрешение, должно предоставить описание через

android:description="string resource"

Вот пример разрешения. Надеюсь, это объяснительно.

<permission android:description="string resource"
android:icon="drawable resource"
android:label="string resource"
android:name="string"
android:permissionGroup="string"
android:protectionLevel=["normal" | "dangerous" | 
 "signature" | "signatureOrSystem"] />

2. Насколько я знаю, клиентское приложение не может видеть присутствие базового приложения во время установки. Но это возможно при запуске клиентского приложения. В любом случае, разрешения предоставляются системой Android на основе вашего файла android.xml. Таким образом, клиентское приложение не должно беспокоиться о базовом приложении во время установки.

3. Базовое приложение можно удалить, даже если клиентское приложение все еще установлено. Это не будет происходить через какие-либо сообщения об ошибках или исключения безопасности на любом этапе. Но когда вы снова пытаетесь запустить клиентское приложение, вы можете получить исключение "Activity not found" в том месте, где вы пытаетесь вызвать активность базового приложения из клиентского приложения.