Намеренное пользовательское разрешение не работает

ОБНОВИТЬ

Моя непосредственная проблема решена согласно моему ответу ниже. Моя среда (ПК + устройства) не допускает пользовательских разрешений в сборках DEBUG.

Я убежден, что смог запустить сборки DEBUG несколько недель назад - отсюда и описание "периодической" ошибки.

ОБНОВЛЕНИЕ 2

Код, синхронизированный на компьютере другого разработчика, прекрасно работает на его устройстве в режиме отладки через Eclipse. На моих устройствах не работает со своей машины.

Кроме того, сборка DEBUG с моей машины отлично работает на этом другом устройстве.

Это приводит меня к вопросу, если что-то пошло не так на моих устройствах?


У меня периодически возникает проблема "Отказ в разрешении" с пользовательским разрешением Intents, Это один из тех, где код находится в производстве и работает, но иногда при создании новых сборок он перестает работать. Мне только удалось исправить это по счастливой случайности, прежде чем, через процесс перезагрузки (устройство и компьютер), очистить проект, удалить / переустановить, повторить и т. Д... это недопустимо.

Насколько я вижу, я делаю все правильно для пользовательских разрешений на моем Intents что я вещаю в моем приложении. Но logcat выдаёт мне обычные ошибки:

  • W / BroadcastQueue (389): Отказ в разрешении: широковещательное намерение { act=A_ACTION flg=0x10 } из com.test (pid=22030, uid=10002) требует A_PERMISSION из-за зарегистрированного приемника BroadcastFilter{43918d50 u0 ReceiverList{4391cad8 22030 com.test/10002/u0 удаленный:430576d0}}

на 4.2.1 (Galaxy Nexus) и 4.2.2 (Nexus 7), или

  • W/ActivityManager( 2002): Отказ в разрешении: получение намерения { act=A_ACTION flg=0x10 } для ProcessRecord{41a12748 31496:com.test/10115} (pid=31496, uid=10115) требует A_PERMISSION из-за отправителя com.test (UID 10115)

на 4.0 (S2) и 2.3.3 (Samsung Ace).

т.е. стандартные ошибки.


Мой манифест говорит:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.test"
    android:versionCode="1"
    android:versionName="4.10.0.3" >

    <permission
        android:name="A_PERMISSION"
        android:description="@string/broadcast_permission_desc"
        android:label="@string/broadcast_permission_label"
        android:permissionGroup="@string/broadcast_permission_group"
        android:protectionLevel="signature" />

    <uses-permission android:name="A_PERMISSION" />

    etc.....

Эти строки определены как (fwiw):

<string name="broadcast_permission_label">Private Broadcast</string>
<string name="broadcast_permission_desc">This permission allows the necessary components of the application to receive private broadcasts that are sent within the application.</string>
<string name="broadcast_permission_name">A_PERMISSION</string>
<string name="broadcast_permission_group">A_GROUP</string>

У меня есть метод в моем базовом подклассе APPLICATION, который я использую для вещания:

public void sendBroadcast(Intent i)
{
    // hardcoded custom permission
    super.sendBroadcast(i, "A_PERMISSION");
}

Я РЕГИСТРАЦИЯ для моего BroadcastReceiver изнутри Fragment как это:

public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);

    // hardcoded custom permission
    MyApp.getInstance().registerReceiver(myReceiver, myFilter,
        "A_PERMISSION", null);
}

Я проверил следующие связанные вопросы без радости:


Я думаю, что охватывает аналогичные вопросы на этом сайте.

Моя проблема в том, что он прерывистый, но тратит много времени, т. Е. Некоторые сборки работают на всех телефонах, некоторые сборки не работают на всех телефонах.

Интересно, если это проблема в одной из платформ (либо ОС Android, или, возможно, Eclipse / Android SDK). К сожалению, поиск в Google приводит меня только к более распространенным проблемам с общими решениями.

1 ответ

Решение

Окончательное решение - я согласен, что это не имеет смысла, но вот оно:

У меня есть 2 приложения, использующие одно и то же разрешение - com.test а также com.runtest,

Как указано выше, com.test был сломан для сборок DEBUG. Но я заметил, что com.runtest все еще работал.


шаги:

  1. установлены com.runtest чтобы подтвердить, что это работает
  2. удалили оба приложения с моих устройств
  3. переименованный com.runtest в com.test - в Eclipse (Инструменты Android... Переименовать пакет приложений)
  4. отладил это переименованное приложение в Eclipse на моем устройстве - все заработало
  5. удалил это переименованное "подделка" com.test
  6. отлаженный оригинал com.test приложение в Eclipse на моем устройстве - оно наконец заработало!

Поэтому по какой-то причине перезапись сломанного приложения работающим приложением что-то изменила и исправила мое устройство.

Другие вопросы по тегам