首页 > 解决方案 > 将数据从小部件传递给活动

问题描述

我正在尝试将数据从小部件传递到活动,但我总是收到 null。这是来自小部件类的 onUpdate:

@Override
public void onUpdate(final Context context, final AppWidgetManager appWidgetManager, int[] appWidgetIds) {

    ComponentName thisWidget = new ComponentName(context, MyWidgetProvider.class);
    int[] allWidgetIds = appWidgetManager.getAppWidgetIds(thisWidget);

    for (int widgetId : allWidgetIds) {

        RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.appwidget);

        Intent configIntent = new Intent(context, WebViewActivity.class);
        configIntent.putExtra("URL", "Content");
        PendingIntent configPendingIntent = PendingIntent.getActivity(context, 0, configIntent, 0);
        remoteViews.setOnClickPendingIntent(R.id.buttonOpen, configPendingIntent);
        appWidgetManager.updateAppWidget(widgetId, remoteViews);

}

第二个活动:

public class WebViewActivity extends AppCompatActivity  {

WebView webView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_web_view);


    String sessionId = getIntent().getStringExtra("URL");
    Log.d("DTAG","URL: "+sessionId); //Is null

    webView = findViewById(R.id.webView);
    webView.getSettings().setJavaScriptEnabled(true);
    webView.loadUrl(sessionId);
}

}

标签: android

解决方案


如果要替换 a 中的额外内容PendingIntent,则需要使用FLAG_UPDATE_CURRENTfor 的最后一个参数 to PendingIntent.getActivity()。否则,您的 new 中的额外Intent内容将被忽略。

而且,如果您希望为不同的PendingIntent对象(例如,每个小部件 ID)提供不同的附加功能,则需要将唯一 ID 作为第二个参数传递给PendingIntent.getActivity(). 如果您0一直使用,您会得到一个PendingIntent带有一套附加功能的产品。


推荐阅读