Освой программирование играючи
/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000
Android позволяет создавать приложения с различными правами доступа.
По умолчанию ваши активности доступны всем и вы можете запустить нужную активность без проблем, зная имя пакета и имя класса активности.
Если вы хотите запретить некоторым пользователям запускать вашу активность, то можно выставить права доступа. Права доступа устанавливаются в манифесте.
Рассмотрим пример. Для примера нам понадобятся два приложения. Создайте первое приложение с двумя активностями. На первой активности добавьте кнопку для перехода на вторую активность. Вторая активность - это стандартная активность, только поменяйте текст у TextView на "Только для избранных", чтобы не запутаться.
Теперь откройте файл манифеста. В обязательном атрибуте android:name следует указать имя права доступа. Рекомендуется использовать стандартную схему именования *.permission.*. Вспомните, как выглядят системные разрешения, например, для доступа к интернет: android.permission.INTERNET
В атрибуте android:protectionLevel нужно указать степень риска. Может принимать значения:
Другие атрибуты не являются обязательными - краткое описание, полное описание, значок и так далее.
В нашем примере код может выглядеть так:
<permission
android:name="alexanderklimov.permission.START_ACTIVITY"
android:label="Start my Activity"
android:protectionLevel="normal"
android:description="@string/permission_description">
</permission>
В последнем атрибуте мне не позволили ввести саму строку, пришлось создавать строковый ресурс. Впрочем, в рабочих приложениях это надо делать всегда, и для других атрибутов тоже.
На этом редактирование манифеста не закончено. Теперь надо прописать созданное право доступа для второй активности:
<activity
android:name="ru.alexanderklimov.test.ProtectActivity"
android:label="@string/title_activity_protect"
android:permission="alexanderklimov.permission.START_ACTIVITY" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
</intent-filter>
</activity>
В рамках одного приложения вы не будете испытывать проблем с запуском второй активности. Однако попробуем создать теперь второе приложение с кнопкой и попытаемся открыть вторую активность. В намерении нужно указать имя пакета и класса от первого приложения:
public void onClick(View v) {
Intent intent = new Intent();
intent.setClassName("ru.alexanderklimov.test", "ru.alexanderklimov.test.ProtectActivity");
startActivity(intent);
}
Запускаем приложение и нажимаем на кнопку. В результате получаем сообщение об ошибке и приложение закрывается. Чтобы исправить ситуацию, откроем файл манифеста у второго приложения и пропишем разрешение:
<uses-permission android:name="alexanderklimov.permission.START_ACTIVITY"/>
Теперь Android видит, что у второго приложения есть разрешение на запуск активности с ограниченным правом доступа и активность без проблем запускается.
Мы рассмотрели только один случай настройки прав доступа к активности. Существуют права доступа и к другим объектам.