Почему мой PendingIntent не транслирует/не получает от виджета Android setOnClickPendingIntent?Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Почему мой PendingIntent не транслирует/не получает от виджета Android setOnClickPendingIntent?

Сообщение Anonymous »

AppWidget.kt:

Код: Выделить всё

override fun onEnabled(context: Context) {
// register price and widget button update receivers
val filters = IntentFilter()
filters.addAction(BROADCAST_PRICE_UPDATED)
filters.addAction(BROADCAST_WIDGET_UPDATE_BUTTON_CLICK)
LocalBroadcastManager.getInstance(context.applicationContext).registerReceiver(br, filters)
}

override fun onDisabled(context: Context) {
// unregister price and widget button update receivers
LocalBroadcastManager.getInstance(context.applicationContext).unregisterReceiver(br)
}

private val br = object : BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) { ... }
Примечания: локальный приемник широковещательных сообщений получает все остальные зарегистрированные широковещательные сообщения, за исключением piWidgetUpdateButtonClicked. Использование LocalBroadcastManager — единственный способ отправлять/получать широковещательные сообщения, поскольку, очевидно, использование глобальной системы вещания отфильтровывает широковещательные сообщения из пакета моего приложения?

Код: Выделить всё

internal fun updateAppWidget(context: Context, appWidgetManager: AppWidgetManager, appWidgetId: Int) {

// Construct the RemoteViews object
val views = RemoteViews(context.packageName, R.layout.app_widget)

// Create an Intent to launch MainActivity when widget background touched
val piLaunchMainActiv: PendingIntent = PendingIntent.getActivity(context,0,
Intent(context.applicationContext, MainActivity::class.java),
PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE
)
views.setOnClickPendingIntent(R.id.widget_background_layout, piLaunchMainActiv)

// create intent to update widget when button clicked TODO this not working
val piWidgetUpdateButtonClicked =
PendingIntent.getBroadcast(context, appWidgetId,
Intent(BROADCAST_WIDGET_UPDATE_BUTTON_CLICK), PendingIntent.FLAG_UPDATE_CURRENT
or PendingIntent.FLAG_IMMUTABLE
)
views.setOnClickPendingIntent(R.id.widget_update_button, piWidgetUpdateButtonClicked)
Примечания: *piLauchMainActiv *ожидающее намерение работает нормально, но piWidgetUpdateButtonClicked ничего не делает. Я пробовал использовать context.applicationContext, тоже ничего не делает. Также я попытался явно установить класс приема: Intent.setClass(context, AppWidget::class.java), ничего.
Очевидно, последние версии Google Android требуют, чтобы вы регистрировали приемники вещания программно. , как я сделал выше, а не в манифесте, который я тоже пробовал, но тоже не работает:
AndroidManifest.xml: После многих дней чтения других похожих сообщений на stackoverflow ничего не помогло. Я в полном замешательстве, пожалуйста, пришлите помощь!

Подробнее здесь: https://stackoverflow.com/questions/746 ... -setonclic
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»