Приемникът на излъчване не получава намерение

Имам две приложения, над които имам пълен контрол. И двата са подписани с един и същ сертификат и използват абсолютно същия филтър за намерения. Единият изпраща излъчването от фрагмент, другият трябва да го получи и да направи нещо. Това обаче не работи:

Strings.FILTER_INIT_REGISTER = "com.app.FILTER_INIT_REGISTER"

Intent intent = new Intent(Strings.FILTER_INIT_REGISTER);
getActivity().sendBroadcast(intent);

Регистрирах приемника в маркера на приложението Manifest за приложението, съдържащо класа ReportingReceiver:

<receiver             
    android:name=".receivers.ReportingReceiver"
    android:exported="true"
    >
        <intent-filter>
            <action android:name="com.app.FILTER_INIT_REGISTER" />
            <category android:name="android.intent.category.DEFAULT" />                
        </intent-filter>
</receiver>

Любопитно защо класът ReportingReceiver не получава извикването за намерение?


person Roy Hinkley    schedule 08.10.2012    source източник
comment
Не съм сигурен, че категорията на излъчването е android.intent.category.DEFAULT, ако не посочите никаква категория, докато излъчвате. Опитахте ли да премахнете маркера за категория или да добавитеCategory(Intent.CATEGORY_DEFAULT) по време на излъчване?   -  person fedepaol    schedule 08.10.2012
comment
Какво съдържа вашият маркер за приложение в манифеста?   -  person Herry    schedule 08.10.2012
comment
Етикетът на приложението има само услуга и съответни тагове на приемник в него.   -  person Roy Hinkley    schedule 08.10.2012
comment
Премахването на декорацията на категорията няма значение.   -  person Roy Hinkley    schedule 08.10.2012


Отговори (2)


Ако вашето приложение има само услуга и приемници, това няма да работи в Android 3.1 и по-нови версии. Причината е, че системата няма да изпраща намерения за излъчване към приложение, което е в СПРЯНО СЪСТОЯНИЕ. Приложението е в СПРЯНО СЪСТОЯНИЕ, когато е инсталирано за първи път. Премахва се от СПРЯНО СЪСТОЯНИЕ, когато потребителят ръчно стартира приложението за първи път. Връща се в СПРЯНО СЪСТОЯНИЕ, ако потребителят принуди приложението да спре да използва инструмента за управление на приложения.

Тъй като вашето приложение няма дейности, няма начин потребителят да го "стартира". Следователно той никога няма да излезе от спряното състояние.

Вижте http://developer.android.com/about/versions/android-3.1.html#launchcontrols

person David Wasser    schedule 10.10.2012
comment
Добавете това към намерението: intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES); Благодаря, че ме насочихте в правилната посока! - person Roy Hinkley; 11.10.2012
comment
@Android Addict: можете ли да ми кажете, моля, защо приемникът на излъчване спира да получава намерение от услугата, ако е възникнало мрежово изключение в услугата, независимо дали изпращам излъчване във всеки случай, също и друго изключение. - person MR. Kumar; 17.04.2013
comment
@NeonWarge Трябва да отворите нов въпрос, ако имате проблем, на който не е отговорено тук. Вашият коментар не е особено полезен, тъй като не казвате нищо за вашата ситуация. Коментирането тук за вашата ситуация така или иначе не е правилното нещо. Моля, отворете нов въпрос. - person David Wasser; 15.06.2016

Както казва Android Addict в коментара си към отговора на David Wasser ... има начин да се заобиколи това поведение.

Просто добавете следния флаг към извикващото намерение. Това ще гарантира, че ще достигнете до излъчващи приемници и от „спрени“ приложения.

http://developer.android.com/reference/android/content/Intent.html#FLAG_INCLUDE_STOPPED_PACKAGES

Можете да прочетете повече за тази промяна в Android 3.1 тук

http://developer.android.com/about/versions/android-3.1.html#launchcontrols

и тук

http://code.google.com/p/android/issues/detail?id=18225

person forgemo    schedule 14.11.2012
comment
Благодаря, средната връзка ме отведе до Имайте предвид, че системата добавя FLAG_EXCLUDE_STOPPED_PACKAGES към всички намерения за излъчване., което търсех. - person Peppe L-G; 05.12.2016