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);
}
}
解决方案
如果要替换 a 中的额外内容PendingIntent
,则需要使用FLAG_UPDATE_CURRENT
for 的最后一个参数 to PendingIntent.getActivity()
。否则,您的 new 中的额外Intent
内容将被忽略。
而且,如果您希望为不同的PendingIntent
对象(例如,每个小部件 ID)提供不同的附加功能,则需要将唯一 ID 作为第二个参数传递给PendingIntent.getActivity()
. 如果您0
一直使用,您会得到一个PendingIntent
带有一套附加功能的产品。
推荐阅读
- python - 调整当前代码以便能够将新表中的项目添加到篮子
- node.js - Docker 节点应用程序 Postgres 错误“连接意外终止”
- python - 如果我们删除 /system/Library 和 /usr/bin 中的任何苹果提供的系统 python 怎么办?如果我们删除了我们如何检索
- react-native - 如何在反应原生时使用 MapViewDirections 将地图适合目标点?
- tensorflow - 解压 tf.keras.Model 层
- java - 从从操作按钮接收的广播接收器调用在前台服务中运行的 Android 主要活动功能?
- python - 使用 isin() 时如何维护原始数据帧索引并保持输入列表的顺序?
- java - 在 java 中进行二进制到十六进制转换时,我的答案前面总是有一个空值
- google-sheets - 谷歌表格时间跟踪公式
- html - 无法围绕边距传播