Widget + ListView + TaskStackBuilder -> BroadcastReceiver 不会被找到

Posted

技术标签:

【中文标题】Widget + ListView + TaskStackBuilder -> BroadcastReceiver 不会被找到【英文标题】:Widget + ListView + TaskStackBuilder -> BroadcastReceiver won't get found 【发布时间】:2019-02-20 20:24:12 【问题描述】:

我已经为此发疯了。

所以,我创建了一个带有 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

清单

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

RemoteViewsFactory 中,我只是创建了一个带有BroadcastReceiver 参数的FillInIntent,并将其作为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 明确需要一个活动。但我不想在点击时启动 Activity。

【问题讨论】:

【参考方案1】:

我想通了。

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

我之前尝试过,但它似乎从来没有工作过。真正的问题是 AVD 模拟器,它随机决定工作和不工作(有时不交付的广播)。

如果您需要开发这样的小部件,请在真实设备上进行。

【讨论】:

以上是关于Widget + ListView + TaskStackBuilder -> BroadcastReceiver 不会被找到的主要内容,如果未能解决你的问题,请参考以下文章

Android:尝试在空对象引用上调用虚拟方法“void android.widget.ListView.setAdapter(android.widget.ListAdapter)”

膨胀类 android.widget.listview 时出错

Android 应用程序停止错误:膨胀类 android.widget.ListView

Flutter 在 ListView 中不显示有状态的子 Widget

Android Widget:在 ListView 中获取位置

Android-Widget:使用 RemoteView 更改 ListView 选择器颜色