2011-09-24 23 views
2

嗨我有一个活动1需要发送数据到Appwidget(小部件),它有一个文本视图。从另一个活动获取数据到App Widget

要发送activites我知道,我们可以使用intent.putExtra("mydata", dataString);和recive同样与String data = bundle.getString("mydata");但在我来说,我需要发送数据(字符串)到App小部件之间的数据。

当我使用

Bundle dataFromPrevious = getIntent().getExtras(); 
String newString = dataFromPrevious.getString("mydata"); 

内部的AppWidgetProvider它抛出在getIntent说getIntent是未定义的类型类的错误。

我怎样才能得到这个AppWidget内的字符串?此外,这段文字将从活动1更新为新字符串,因此使用SharedPrefrences是这种情况的不错选择?有没有其他方法?

更新1:

正如约瑟夫所说,我已经加入我的清单 <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />

现在我也有在AppWidget

创建OnRecieve覆盖
@Override 
    public void onReceive(Context context, Intent intent) { 

     Bundle getPrevData = intent.getExtras(); 
     String data = getPrevData.getString("mydata"); 
     newdata = data; 
     super.onReceive(context, intent); 
    } 

在我的更新我有

views.setTextViewText(R.id.dataWidget,newdata); 

这里newdatapublic static String但它不显示任何东西!当我setTextViewText到小部件的文本视图。我在这里错过了什么吗?请帮助...

更新2:

import android.appwidget.AppWidgetManager; 
import android.appwidget.AppWidgetProvider; 
import android.content.Context; 
import android.content.Intent; 
import android.os.Bundle; 
import android.widget.RemoteViews; 
import android.widget.Toast; 

public class MainWidget extends AppWidgetProvider { 

    private RemoteViews views; 
    public static String newdata 

    @Override 
    public void onReceive(Context context, Intent intent) { 

     Bundle getPrevData = intent.getExtras(); 
     String data = getPrevData.getString("mydata"); 
     newdata = data; 

     super.onReceive(context, intent); 
    } 

    @Override 
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { 

     views = new RemoteViews(context.getPackageName(),R.layout.widget_layout); 
     appWidgetManager.updateAppWidget(appWidgetIds, views); 

     //views.setTextViewText(R.id.dataWidget,newdata); 

     super.onUpdate(context, appWidgetManager, appWidgetIds); 
    } 


} 

这是我的另一个activityvthat发送数据:

final String text = ((TextView)findViewById(R.id.textview)).getText().toString(); 
Intent intent = new Intent(FirstActivity.this, MainWidget.class); 
       intent.putExtra("mydata", text); 
+0

如若线'字符串数据= getVerseData.getString( “MYDATA”);'不'字符串数据= getPrevData.getString( “MYDATA”);'代替? –

+0

此外,如果您可以发布您用来发送广播的代码,以防万一出现问题。 –

+0

你好,我打错了堆栈溢出,对不起我的错误!更多参考资料,我会用我的完整代码进行第二次更新。 – Wesley

回答

0

您可以在不使用广播接收器的情况下更新小部件中的数据。

  1. 将数据保存在sharedPreference中。

  2. 使用新数据创建远程视图并使用AppWidgetManager.updateWidget来更新小部件。

以下是示例代码。

RemoteViews updateViews = buildUpdate(context); // Update the view using the new data. 
ComponentName thisWidget = new ComponentName(context, WidgetClassName.class); 
AppWidgetManager manager = AppWidgetManager.getInstance(context); 
manager.updateAppWidget(thisWidget, updateViews); 

这就是我在我以前的应用程序中所做的。

Saneesh CS

1

您需要使用BroadcastReceiver秒。简而言之:在您的AppWidgetProvider中添加一个BroadcastReceiver,该AppWidgetProvider对自定义Intent起作用,然后刷新您的小部件。

从你Activity那么所有你需要做的就是发送带有自定义意向广播(Context.sendBroadcast)(你可以到IntentputExtra按通常添加数据)。

+0

嗨,约瑟夫谢谢你的快速回答,即时通讯如果你的宝贵答案逐字逐字地工作。我想我已经设法创建一个广播接收器给我的AppWidgtProvider,它是'Intent myIntent = new Intent(context.getApplicationContext(),MyBroadcastReceiver.class); \t \t PendingIntent pendingIntent = PendingIntent.getBroadcast(context.getApplicationContext(),0,myIntent,0);'现在在MyBroadcastReciever类中,我应该怎么做? “对自定义Intent进行操作并刷新小部件”我需要创建一个警报管理器吗?即时通讯完全新手请你能指导我吗? – Wesley

+0

事实上,您可以从活动中广播一个意图,其中包含动作“android.appwidget.action.APPWIDGET_UPDATE”(并避免完全自定义BroadcastReceiver)。然后重写你的AppWidgetProvider的'onReceive'方法,从intent获得你想要的任何额外内容,然后调用'super.onReceive'来刷新小部件。 –

+0

再次感谢:)请参阅我的更新问题。根据你所提到的变化。 – Wesley

相关问题