为现有android应用程序开发一个小部件

为现有android应用程序开发一个小部件,android,android-widget,Android,Android Widget,我想为现有的android应用程序开发一个小部件 我想要的唯一功能是显示我从应用程序中获取的变量。 我开发了一个简单的函数从中获取变量,但我不知道在应用程序关闭时如何更新它 或者我必须编写一个服务来获取这些变量 package hkcsl.tabbedactivealarm; import android.appwidget.AppWidgetManager; import android.appwidget.AppWidgetProvider; import android.content.

我想为现有的android应用程序开发一个小部件

我想要的唯一功能是显示我从应用程序中获取的变量。 我开发了一个简单的函数从中获取变量,但我不知道在应用程序关闭时如何更新它

或者我必须编写一个服务来获取这些变量

package hkcsl.tabbedactivealarm;

import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import android.widget.RemoteViews;

public class AppWidgetExample extends AppWidgetProvider {   
@Override
public void onReceive(Context context, Intent intent) {

  super.onReceive(context, intent);     
  RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.helloworld);
  String value1 = intent.getStringExtra("Value"); 
  views.setTextViewText(R.id.text, value1);
  AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
  appWidgetManager.updateAppWidget(new ComponentName(context, AppWidgetExample.class), views);
   }
  }

如果我理解这个问题-

是的,这是可能的,但我相信更新间隔必须少于每分钟一次。有关简单教程,请参阅本指南:

是的,您的应用程序需要一个在应用程序关闭时运行的进程。因此,后台服务、异步任务或线程就可以了。后台服务是您的最佳选择

编辑

好吧,我想我现在了解多了。使用上面相同的链接,阅读第4节

`appWidgetManager.updateAppWidget(widgetId, remoteViews);`
您只启动一个服务,该服务负责更新值。如果您希望用户退出应用程序时发生特殊情况,您可以覆盖
onDestroy()

编辑2

在XML中使用如下内容:

<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider 
      xmlns:android="http://schemas.android.com/apk/res/android"
    android:initialLayout="@layout/YOUR_LAYOUT"
    android:minHeight="72dp"
    android:minWidth="300dp"
    android:updatePeriodMillis="300000" >

</appwidget-provider> 

注意
updatePeriodMillis=300000


这是从上面那篇文章链接的第3节中摘取的

你的意思是我必须写另一个服务来完成吗?或者只是广播活动的意图,它将保持running@DannyHo等等,我现在很困惑。你是从其他开发者的应用程序中获取变量的吗?哦。那就不会那么糟糕了。嗯。。。让我编辑我的answer@DannyHo基本上,是的,有另一个扩展
service
类的服务,该类将进行更新。顺便问一下,AppWidgetProvider本身就是服务吗?我不知道这些信息对我很有用。我现在可以通过服务更新小部件一次。但我仍然不明白如何定期触发“updateAppWidget”更新小部件?