簡體   English   中英

將數據從另一個活動獲取到應用小部件

[英]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);

這里的newdatapublic 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 )。

您可以在不使用廣播接收器的情況下更新小部件中的數據。

  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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM