6

Зачем заказ OrderBroadcast работает в отладочной версии приложения, но не в выпуске? Я посылаю следующий OrderedBroadcast:Android OrderedBroadcast не работает в выпуске Build

context.sendOrderedBroadcast(sendInt, "xxx.xxxx.permission.API", new BroadcastReceiver() { 
     @SuppressLint("NewApi") 
     @Override 
     public void onReceive(Context receivercontext, Intent intent) { 
       Bundle results = getResultExtras(true); 
       if (results.getInt("Result", Activity.RESULT_CANCELED) == Activity.RESULT_OK) { 
        Log.d("DEBUG", "OK"); 
       } else { 
        Log.e("DEBUG", "Failed"); 
       } 
     } 
}, null, Activity.RESULT_OK, null, null); 

Оба приложения имеют соответствующее разрешение в файле AndroidManifest.xml и приемник объявлен следующим образом:

<receiver android:name="xxx.xxxx.xxxx.Receiver1" 
      android:enabled="true" 
      android:exported="true" 
      android:permission="xxx.xxxx.permission.API"> 
      <intent-filter> 
       <action android:name="xxx.xxxx.permission.API.1" /> 
      </intent-filter> 
</receiver> 

Как я уже говорил, если у меня есть и отправителя и приложения-приемники, работающие в отладочных сборках, тогда все работает отлично, но если я запустил приложение-получатель в режиме деблокирования (без програды или чего-то еще), приложение-отправитель просто получит результат RESULT_CANCELLED?

Это прослушивало меня в течение нескольких дней, поэтому любые идеи были бы весьма благодарны.

+0

проблемы с разрешением? добавьте разрешение в '', просто нашли его [здесь] (http://developer.android.com/intl/es/reference/android/content/BroadcastReceiver.html#Security) – calvinfly

+0

вы полагаетесь на результирующее значение? сделал onReceive триггер приемника? или выполнить? – Elltz

+0

Это разрешение было использовано, и я перепроверил их, я полагаюсь на получение ответа ОК от второго приложения, которое не запускает или не выполняет приемник, если я не запустил приложение-приемник в режиме отладки? – Apqu

ответ

1

ИТАК после долгих поисков и испытаний выясняется, что это относительно простой, но раздражает функция безопасности Android вызывает эту ошибку:

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

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

0

Похоже, что когда вы заявляете разрешение, вы используете android:protectionLevel="signature". Если вы запускаете отправителя в отладке, он подписывается с вашим отладочным ключом. Приемник будет подписан ключом освобождения. Таким образом, подписи не будут совпадать, и получателю не будет предоставлено разрешение.

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

+0

Очень большое спасибо за ваш ответ. Я вернусь на свой компьютер утром, чтобы проверить, не является ли это проблемой, если тогда я отмечу как ответ и награду щедростью, спасибо снова – Apqu

Смежные вопросы