将数据从小部件传递到活动

时间:2020-02-05 12:29:19

标签: android

我正在尝试将数据从小部件传递到活动,并且我总是收到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);
}

}

1 个答案:

答案 0 :(得分:1)

如果您想替换PendingIntent中的附加内容,则需要使用FLAG_UPDATE_CURRENT作为PendingIntent.getActivity()的最终参数。否则,新Intent中的附加功能将被忽略。

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