单击主屏幕小部件时如何打开特定片段
How to open a specific Fragment when clicking on a home screen widget
单击主屏幕小部件时如何打开特定片段,我已经可以打开 Activity 但我不知道如何从小部件打开片段这是我的小部件 class
public class MyWidget extends AppWidgetProvider {
ComponentName watchWidget;
RemoteViews remoteViews;
private static final String SYNC_CLICKED = "automaticWidgetSyncButtonClick";
void updateAppWidget(Context context, AppWidgetManager appWidgetManager,
int appWidgetId) {
remoteViews = new RemoteViews(context.getPackageName(), R.layout.My_widgets);
watchWidget = new ComponentName(context, MyWidget.class);
remoteViews.setTextViewText(R.id.appwidget_text,"Widget Example");
// start Activity from the widget
Intent configIntent = new Intent(context, MainActivity.class);
PendingIntent configPendingIntent = PendingIntent.getActivity(context, 0, configIntent, 0);
remoteViews.setOnClickPendingIntent(R.id.widget_container, configPendingIntent);
appWidgetManager.updateAppWidget(watchWidget, remoteViews);
}
有什么想法吗?
为什么不将一些标志(Bundle)传递给 Intent 并在 Activity onCreate 或 onNewIntent 中检查它,如果设置为 true(或任何值)则打开 Fragment?
小部件:
Intent configIntent = new Intent(context, MainActivity.class);
configIntent.putExtra("key", value);
configIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
PendingIntent configPendingIntent = PendingIntent.getActivity(context, 0, configIntent, 0);
Activity:
Bundle extras = getIntent().getExtras();
if (extras != null) {
value_type value = extras.get("key");
}
请记住,您必须在 onCreate 和 onNewIntent 中都检查它。
对于导航组件使用深层链接
清单:将此行添加到 android 清单
中的 activity 部分
<activity>
<nav-graph android:value="@navigation/main_nav_graph" />
</activity>
导航图:
<fragment
...>
<deepLink
android:id="@+id/deepLink"
app:uri="myapp://example.com/text" />
</fragment>
ExWidget.kt:在您的小部件文件中声明您的待定意图。
val pendingIntent = NavDeepLinkBuilder(context)
.setGraph(R.navigation.main_nav_graph)
.setDestination(R.id.your_fragment)
.setArguments(
YourFragmentArgs.Builder(arguments
).build().toBundle())
.createPendingIntent()
并在 setOnClickPendingIntent 方法中分配此 pendingIntent,
val views = RemoteViews(context.packageName, R.layout.example_widget)
views.setOnClickPendingIntent(R.id.example_widget_button, pendingIntent)
单击主屏幕小部件时如何打开特定片段,我已经可以打开 Activity 但我不知道如何从小部件打开片段这是我的小部件 class
public class MyWidget extends AppWidgetProvider {
ComponentName watchWidget;
RemoteViews remoteViews;
private static final String SYNC_CLICKED = "automaticWidgetSyncButtonClick";
void updateAppWidget(Context context, AppWidgetManager appWidgetManager,
int appWidgetId) {
remoteViews = new RemoteViews(context.getPackageName(), R.layout.My_widgets);
watchWidget = new ComponentName(context, MyWidget.class);
remoteViews.setTextViewText(R.id.appwidget_text,"Widget Example");
// start Activity from the widget
Intent configIntent = new Intent(context, MainActivity.class);
PendingIntent configPendingIntent = PendingIntent.getActivity(context, 0, configIntent, 0);
remoteViews.setOnClickPendingIntent(R.id.widget_container, configPendingIntent);
appWidgetManager.updateAppWidget(watchWidget, remoteViews);
}
有什么想法吗?
为什么不将一些标志(Bundle)传递给 Intent 并在 Activity onCreate 或 onNewIntent 中检查它,如果设置为 true(或任何值)则打开 Fragment?
小部件:
Intent configIntent = new Intent(context, MainActivity.class);
configIntent.putExtra("key", value);
configIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
PendingIntent configPendingIntent = PendingIntent.getActivity(context, 0, configIntent, 0);
Activity:
Bundle extras = getIntent().getExtras();
if (extras != null) {
value_type value = extras.get("key");
}
请记住,您必须在 onCreate 和 onNewIntent 中都检查它。
对于导航组件使用深层链接
清单:将此行添加到 android 清单
中的 activity 部分<activity>
<nav-graph android:value="@navigation/main_nav_graph" />
</activity>
导航图:
<fragment
...>
<deepLink
android:id="@+id/deepLink"
app:uri="myapp://example.com/text" />
</fragment>
ExWidget.kt:在您的小部件文件中声明您的待定意图。
val pendingIntent = NavDeepLinkBuilder(context)
.setGraph(R.navigation.main_nav_graph)
.setDestination(R.id.your_fragment)
.setArguments(
YourFragmentArgs.Builder(arguments
).build().toBundle())
.createPendingIntent()
并在 setOnClickPendingIntent 方法中分配此 pendingIntent,
val views = RemoteViews(context.packageName, R.layout.example_widget)
views.setOnClickPendingIntent(R.id.example_widget_button, pendingIntent)