У меня есть SDK/Library, который используется в нескольких приложениях. Я хочу, чтобы отправить безопасную трансляцию из SDK в приложение, реализующее его, поэтому я защищаю свою трансляцию с разрешения. Мой SDK определяет разрешение:Повторяющееся разрешение в приложении SDK
<permission android:name="my.sdk.permission.BROADCAST"
android:label="my_sdk_permission"
android:protectionLevel="signature"/>
<uses-permission android:name="my.sdk.permission.BROADCAST"/>
И приложение манифеста:
<receiver android:name="my.receiver.MyReceiver"
android:permission="my.sdk.permission.BROADCAST"
android:protectionLevel="signature"
android:exported="false">
<intent-filter>
<action android:name="my.receiver.ACTION" />
</intent-filter>
</receiver>
Однако с этой установкой я иногда получаю ошибки установки нескольких приложений с SDK:
INSTALL_FAILED_DUPLICATE_PERMISSION завивки = my.sdk.permission.BROADCAST pkg = my.otherapp
Я думаю, что мне нужно сделать на сборке, убедитесь, что разрешение установлено на пакет приложения, реализующего SDK, но я не уверен
Спасибо за ваш ответ. Но если я правильно понял, и я удаляю разрешение, любое другое приложение может поймать мою трансляцию, зная ее действие? – vkislicins
@vkislicins: Вот почему вы должны избавиться от '<намерения-фильтра>' и действия. Вызовите 'sendBroadcast()' с явным 'Intent'. Или переключитесь на использование какой-либо встроенной шины событий (например, «LocalBroadcastManager», «EventBus» greenrobot, «Отто» Квадрата). У вас есть сценарий, в котором этот * должен быть * системным, и он должен * использовать неявное 'Intent'? Если вы это сделаете, вы, вероятно, можете использовать манифестные заполнители для получения пользовательского разрешения для каждого приложения, хотя я этого не пробовал, и это может ограничить выбор пользователем вашей IDE. – CommonsWare
Этот последний комментарий чрезвычайно полезен, спасибо. Я думаю, что могу достичь своей цели, сохраняя при этом безопасность, перемещая мой приемник из приложения в sdk, регистрируя его в манифесте sdk и используя явное намерение для отправки сообщения. Затем приложения, реализующие sdk, могут расширять приемник и обрабатывать принятое сообщение по своему усмотрению. – vkislicins