[英]Get Data from another activity to App Widget
嗨,我有一個活動1,它需要將數據發送到具有文本視圖的Appwidget(widget)。
為了在活動之間發送數據,我知道我們可以使用intent.putExtra("mydata", dataString);
並使用String data = bundle.getString("mydata");
但就我而言,我需要將數據(字符串)發送到應用程序小部件。
當我使用
Bundle dataFromPrevious = getIntent().getExtras();
String newString = dataFromPrevious.getString("mydata");
在AppWidgetProvider內,它會在getIntent中引發錯誤,表明未為類Type定義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);
這里的newdata
是public static String
但是它什么都不顯示!!! 當我將setTextViewText設置為小部件中的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);
}
}
這是我的另一個活動v,它發送數據:
final String text = ((TextView)findViewById(R.id.textview)).getText().toString();
Intent intent = new Intent(FirstActivity.this, MainWidget.class);
intent.putExtra("mydata", text);
您需要使用BroadcastReceiver
。 簡而言之:向您的AppWidgetProvider
添加一個BroadcastReceiver
,它對自定義Intent
起作用,然后刷新您的窗口小部件。
然后從您的Activity
中發送帶有自定義意圖的廣播( Context.sendBroadcast
)(並且您可以照常使用putExtra
將數據添加到Intent
)。
您可以在不使用廣播接收器的情況下更新小部件中的數據。
將數據保存在sharedPreference中。
使用新數據創建遠程視圖,並使用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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.