Виджет + ListView + TaskStackBuilder -> BroadcastReceiver не будет найден - PullRequest
0 голосов
/ 17 сентября 2018

Я уже схожу с ума по этому поводу.

Итак, я создал виджет с ListView. На каждом элементе списка я хотел иметь простую кнопку, которая «вызывает» BroadcastReceiver с определенным параметром.

AppWidgetProvider

override fun onUpdate(context: Context?, appWidgetManager: AppWidgetManager?, appWidgetIds: IntArray?) {
    // Getting the RemoteView, setting adapter etc
    val myIntentTemplate = Intent(context, MyReceiver::class.java)
    val myPendingIntentTemplate = TaskStackBuilder.create(context)
                .addParentStack(MainActivity::class.java)
                .addNextIntent(myIntentTemplate)
                .getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT)
    remoteViews.setPendingIntentTemplate(R.id.listview, myPendingIntentTemplate)
   // Updating app widget
}

Manifest

<receiver
    android:name=".MyReceiver"
    android:enabled="true"
    android:exported="true">
</receiver>

В RemoteViewsFactory я просто создаю FillInIntent с параметром для BroadcastReceiver и добавляю его как OnClickFillInIntent к моей кнопке. Это прекрасно работает, так как виджет создается и загружается. Но когда я нажимаю на кнопки, я получаю эту ошибку:

09-15 01:53:02.160 1961-3674/system_process I/ActivityManager: START u0 {flg=0x1000c000 cmp=com.mydomain.myapp/.MyReceiver bnds=[864,524][984,596] (has extras)} from uid 10119
09-15 01:53:02.160 2581-2581/com.google.android.apps.nexuslauncher E/RemoteViews: Cannot send pending intent due to unknown exception: 
    android.content.ActivityNotFoundException: No Activity found to handle null
        at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:2007)
        at android.app.Activity.startIntentSenderForResultInner(Activity.java:4845)
        at android.app.Activity.startIntentSenderForResult(Activity.java:4812)
        at com.android.launcher3.Launcher.startIntentSenderForResult(SourceFile:1356)
        at android.app.Activity.startIntentSender(Activity.java:4997)

Итак, в основном говорится, что не находит com.mydomain.myapp/.MyReceiver.

Я совершенно уверен, что моя ошибка заключается в создании намерения. Кроме того, PendingIntent явно хочет активность. Но я не хочу начинать действие с клика.

1 Ответ

0 голосов
/ 18 сентября 2018

Я понял это.

val myPendingIntentTemplate = PendingIntent.getBroadcast(context, 0, myIntentTemplate, PendingIntent.FLAG_UPDATE_CURRENT)

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

Если вам нужно разработать такой виджет, делайте это на реальном устройстве.

...