Android - экспортировать программно созданный широковещательный приемник

Я пытаюсь сделать свой приемник, который я статически определил в манифесте, динамически, создав его программно.

Это статическая версия в манифесте:

        <receiver android:name=".receivers.PackageReceiver" android:enabled="true" android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.PACKAGE_ADDED" />
                <action android:name="android.intent.action.PACKAGE_REMOVED" />
                <action android:name="android.intent.action.PACKAGE_CHANGED" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:scheme="package" />
            </intent-filter>
        </receiver>

Вот как я сделал это в коде:

        val intentFilter = IntentFilter()
        intentFilter.addAction(ACTION_PACKAGE_ADDED)
        intentFilter.addAction(ACTION_PACKAGE_REMOVED)
        intentFilter.addCategory(CATEGORY_DEFAULT)
        intentFilter.addDataScheme("package")
        registerReceiver(PackageReceiver(), intentFilter)

Программная версия не запускается при установке / удалении пакета, тогда как статическая. Я полагаю, это потому, что первая версия экспортируется - как я могу добиться этого в коде?

Вызов registerReceiver() на Context создает экспортированный приемник - больше ничего не поделаешь. Попробуйте удалить CATEGORY_DEFAULT, поскольку мы обычно не используем категорию в широковещательном фильтре Intent. Кроме того, где вы вызываете этот код (действие? Услуга? Что-то еще?).

CommonsWare 13.09.2018 22:40
1
1
778
0

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