android-fragments 单击小部件以启动片段Android

jc3wubiy  于 2022-11-14  发布在  Android
关注(0)|答案(1)|浏览(118)

我正在实现一个小部件功能,遇到了一个问题。我试图通过在小部件中创建的按钮启动一个特定片段,但它无法通过Intent执行此操作。如何在小部件中启动一个片段?
应用程序小部件提供程序

class WidgetProvider : AppWidgetProvider() {

override fun onUpdate(context: Context?, appWidgetManager: AppWidgetManager?, appWidgetIds: IntArray?) {
    super.onUpdate(context, appWidgetManager, appWidgetIds)
    appWidgetIds?.forEach { appWidgetId ->
        val views: RemoteViews = addViews(context)
        appWidgetManager?.updateAppWidget(appWidgetId, views)
    }
}

private fun setMyAction(context: Context?): PendingIntent {

    val intent = Intent(context, MainFragment::class.java)

    return PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT)
}

private fun buildURIIntent(context: Context?): PendingIntent {
    val intent = Intent(Intent.ACTION_VIEW).setData(Uri.parse("https://www.google.com/"))
    return PendingIntent.getActivity(context, 0, intent, 0)
}

private fun addViews(context: Context?): RemoteViews {
    val views = RemoteViews(context?.packageName, R.layout.widget)
    views.setOnClickPendingIntent(R.id.button, setMyAction(context))
    views.setOnClickPendingIntent(R.id.button2, buildURIIntent(context))
    return views
}
}
6ovsh4lw

6ovsh4lw1#

我发现它不能通过导航/意图从非碎片移动到碎片。经过长时间的搜索,我没有找到任何结果,但我通过使用深度链接解决了这个问题。
在这里我附上了我的代码给任何有需要的人。

小部件到片段

private fun addViews(context: Context?): RemoteViews {
    val views = RemoteViews(context?.packageName, R.layout.widget)

    val  myPendingIntent = context?.let {
        NavDeepLinkBuilder(it)
            .setGraph(R.navigation.nav_graph)
            .setDestination(R.id.qrScanFragment)
            .createPendingIntent()
    }

    views.setOnClickPendingIntent(R.id.qr_btn, myPendingIntent)
    return views
}

相关问题