如何将值从主屏幕小部件传递给应用程序?
Posted
技术标签:
【中文标题】如何将值从主屏幕小部件传递给应用程序?【英文标题】:How to pass a value from home screen widget to the application? 【发布时间】:2019-05-01 03:46:52 【问题描述】:我正在处理一个要为其创建小部件的 android 项目。使用这个小部件,我必须控制控件的一些操作(即通过按下小部件的停止按钮,应用程序应该停止某些操作的工作)。为此,我必须通过单击按钮从小部件向应用程序传递一些值。到目前为止,我能够做到以下几点:
点击按钮打开活动 点击按钮打开 URL 点击按钮在主屏幕上祝酒感谢任何帮助,谢谢。
【问题讨论】:
【参考方案1】:我已经成功完成了我项目的这一部分。有两个场景
-
当我们传递值时,应用程序将被启动。也就是说,我们将值直接传递给活动
无需启动应用程序,我们就可以传递值。这里我们使用的是服务
在这两种情况下我们可以使用两种方法
-
使用
sharedpreferences
使用Intent(putExtra())
如果您想将值直接传递给活动(传递值时将启动应用程序),您可以使用上面提到的第二种方法并调用活动(您要启动的活动)如下:
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.new_app_widget);
Intent intent = new Intent(context,MainActivity.class);
PendingIntent pendingIntent = PendingIntent(context, 0, intent, 0);
views.setOnClickPendingIntent(R.id.PunchIn, pendingIntent);
appWidgetManager.updateAppWidget(appWidgetId, views);
此代码从小部件按钮单击启动 MainActivity。在 Inten 中,您可以使用 putExtra() 来传递值。最好不要在这里使用 sharedpreference。
为了在不启动应用程序的情况下传递值,您可以从小部件按钮调用服务,然后您可以在service.class
文件中添加您想要添加的任何代码。您可以按如下方式调用该服务:
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.new_app_widget);
Intent intent = new Intent(context,MyService.class);
PendingIntent pendingIntent = PendingIntent.getService(context, 0, intent, 0);
views.setOnClickPendingIntent(R.id.PunchIn, pendingIntent);
appWidgetManager.updateAppWidget(appWidgetId, views);
从此服务类中,您可以使用SharedPrefernce
或putExtra()
将值传递给应用程序。
如果您想制作一个与应用程序的按钮单击相同的按钮小部件,您可以使用第二种方法。在这里,您可以如上所述在按钮单击时调用服务,然后在服务类中编写按钮单击的代码。
我是 android 新手,我在我的项目中使用小部件进行了很多研究,并且花了很多时间。所以想张贴这将帮助像我这样的人。如果您发现任何错误/错误,请纠正我。很高兴纠正我的错误。 谢谢
【讨论】:
【参考方案2】:我不确定这个问题,因为我还没有尝试小部件。
单击按钮时,发送广播消息。您的应用需要运行服务来接收消息。你可以把你的价值观写在信息里吗?
希望这个链接能给你一些想法: http://rxwen.blogspot.com/2012/10/communication-between-android-widget.html
有一个类似的问题:Android - Communications between a widget and its app
祝你好运!
【讨论】:
以上是关于如何将值从主屏幕小部件传递给应用程序?的主要内容,如果未能解决你的问题,请参考以下文章
Flutter:如何将值从 streamprovider / listview builder 传递给另一个类