2011-05-06 146 views
5

我阅读了hellowidget教程和Dev Guide'App Widgets。然后我知道如何创建一个包含按钮或文本或其他东西的小部件。如何在活动和小部件之间共享数据?

但我真正想做的是让它与我的应用程序进行交互。例如,我想创建一个具有文本视图的小部件,并且当我单击它时,它会将PendingIntent发送到我可以编辑文本的活动中。

我可以做“发送PendingIntent”的步骤。但是,当我用acitivy编辑文本后,小部件如何读取它?

回答

1

你必须使用RemoteViews类来完成它。创建你的AppWidgetProvider的onRefresh方法中RemoteViews类的实例,并使用方法吧...

RemoteViews views = RemoteViews(packageName, layoutId); 
views.setOnClickPendingIntent(viewId, pendingIntent); 

注意RemoteViews在功能时,与标准应用相比,意见的限制。但是,你可以通过他们提供的东西来实现你想要做的。

+0

我可以执行“发送PendingIntent”的步骤。你回答的是这一步。 – 2011-05-06 16:45:56

+0

哎呀好的...然后,您必须从您的小部件可以收听的活动中播出另一个意图。让小部件可以使用的意图中的数据自行刷新。 – 2011-05-06 16:49:19

8

你需要做的是注册自定义的意图,例如在你的AppWidgetProvider ACTION_TEXT_CHANGED像这样的例子:

public static final String ACTION_TEXT_CHANGED = "yourpackage.TEXT_CHANGED"; 

在此之后,您需要在AndroidManifest.xml中注册要接收这个意图在您的接收器标签这样的意图滤波部:

<receiver android:name=".DrinkWaterAppWidgetProvider"> 
    <intent-filter> 
     <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> 
     <action android:name="yourpackage.TEXT_CHANGED" />     
    </intent-filter> 
    <meta-data android:name="android.appwidget.provider" 
     android:resource="@xml/appwidget_info" /> 
</receiver> 

然后,你必须在你的AppWidgetProvider延长的onReceive方法,并确保你正在处理你的意图是这样的:

@Override 
public void onReceive(Context context, Intent intent) { 
    super.onReceive(context, intent); 
    if (intent.getAction().equals(ACTION_TEXT_CHANGED)) { 
     // handle intent here 
     String s = intent.getStringExtra("NewString"); 
    } 
} 

毕竟上面的设置,你只需要播放您的活动意图的文本已更改后是这样的:

Intent intent = new Intent(YourAppWidgetProvider.ACTION_TEXT_CHANGED); 
intent.putExtra("NewString", textView.getText().toString()); 
getApplicationContext().sendBroadcast(intent); 

其中“NewString”应改为这个名字你给字符串。

我希望它有帮助。

+0

你能帮我吗我有问题将我的数据从我的小部件传递给我的活动这里是我的:http://stackoverflow.com/questions/39587137/how-to-pass-data-and-open-an-activity -from-widget-android谢谢。 – natsumiyu 2016-10-27 00:25:35