java - 如何将值从主屏幕小部件传递到应用程序?

标签 java android android-studio widget android-widget

我正在处理一个 Android 项目,我想为其创建一个小部件。使用这个小部件,我必须控制控件的某些操作(即通过按小部件中的停止按钮,应用程序应该停止某些操作的工作)。为此,我必须在单击按钮时将一些值从小部件传递给应用程序。到目前为止,我能够执行以下操作:

  • 点击按钮打开 Activity
  • 点击按钮打开 URL
  • 点击按钮时在主屏幕上 toast

感谢任何帮助,谢谢。

最佳答案

我已经成功完成了项目的这一部分。有两种情况

  1. 当我们传递值时,应用程序将启动。也就是说,我们将值直接传递给 Activity
  2. 无需启动应用程序,我们就可以传递值。这里我们使用服务

在这两种情况下我们可以使用两种方法

  1. 使用共享首选项
  2. 使用Intent(putExtra())

如果您想将值直接传递给 Activity (应用程序将在传递值的同时启动),您可以使用上面提到的第二种方法并调用 Activity (您想要启动的 Activity ),如下所示:

    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() 来传递值。这里最好不要使用共享首选项。

要在不启动应用程序的情况下传递值,您可以从小部件按钮调用服务,然后您可以在 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);

在此服务类中,您可以使用 SharedPrefernceputExtra() 将值传递给应用程序。

如果您想制作一个与应用程序的按钮单击相同的按钮小部件,您可以使用第二种方法。这里你可以像上面提到的那样在按钮点击时调用一个服务,然后在服务类中编写按钮点击的代码。

我是android新手,我在我的项目中使用widget进行了很多研究,并且花了很多时间。因此考虑发布此内容,这将对像我这样的人有所帮助。如果您发现任何错误/错误,请纠正我。很高兴纠正我的错误。 谢谢

关于java - 如何将值从主屏幕小部件传递到应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53532942/

相关文章:

Java 事件处理程序命名约定

java - java中如何限制每行的字符数?

Android倒数计时器显示毫秒?

java - 删除时 ListView 滚动到顶部

java.util.Base64 未找到,无法使用 android.util.Base64 因为类是 Android 外部使用的依赖项

JNI 库的 Android Studio 项目

android - 当 EditText 不为空时显示 TextView

java - Spring 无法定位 OSGi 命名空间处理程序

java - 为什么 Java 8 中没有 BooleanConsumer?

Android SDK 耗尽了我的硬盘;我可以安全地删除什么?