从另一个活动获取数据到App Widget

时间:2011-09-24 18:19:12

标签: java android android-appwidget

您好,我有一个活动1,需要将数据发送到具有文本视图的Appwidget(小部件)。

为了在活动之间发送数据,我知道我们可以使用intent.putExtra("mydata", dataString);并使用String data = bundle.getString("mydata");重新获取相同内容但在我的情况下,我需要将数据(字符串)发送到应用小部件。

当我使用

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

在AppWidgetProvider中,它在getIntent中抛出一个错误,说类型Class的getIntent是未定义的。

如何获取此AppWidget中的字符串?此文本也将从活动1更新为新字符串,因此使用SharedPrefrences是一个很好的选择吗?还有其他办法吗?

更新1:

正如约瑟夫所说,我补充道 <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> 在我的清单中,

现在我还在AppWidget中创建了一个OnRecieve Override

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

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

在我的On Update中我有

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

此处newdatapublic static String但它不会显示任何内容!当我将TextViewText设置为小部件中的textview时。我错过了什么吗?请帮忙......

更新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);
    }


}

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

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

2 个答案:

答案 0 :(得分:1)

您需要使用BroadcastReceiver s。简而言之:向您的BroadcastReceiver添加AppWidgetProvider,该Intent会对自定义Activity执行操作,然后刷新您的小部件。

Context.sendBroadcast开始,您需要做的就是发送包含自定义意图的广播(Intent)(您可以使用putExtra向{{1}}添加数据按照惯例)。

答案 1 :(得分:0)

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

  1. 将数据保存在sharedPreference中。

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

  3. 以下是示例代码。

    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