java - 从另一个 Activity 获取数据到 App Widget

标签 java android android-appwidget

您好,我有一个 Activity 1,它需要将数据发送到具有 TextView 的 Appwidget(小部件)。

为了在 Activity 之间发送数据,我知道我们可以使用 intent.putExtra("mydata", dataString);并收到与 String data = bundle.getString("mydata"); 相同的内容但就我而言,我需要将数据(字符串)发送到应用程序小部件。

当我使用

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

在 AppWidgetProvider 中,它在 getIntent 中抛出一个错误,指出 getIntent 未定义类型类。

我怎样才能得到这个 AppWidget 中的字符串?此外,此文本将从 Activity 1 开始更新,经常使用新字符串,因此使用 SharedPrefrences。这种情况的好选择?还有其他办法吗?

更新 1:

正如约瑟夫所说,我已经添加了 <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> 在我的 list 中,

现在我还在 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);
    }

在我的更新中我有

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


}

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

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

最佳答案

您需要使用 BroadcastReceiver。简而言之:将 BroadcastReceiver 添加到您的 AppWidgetProvider,它作用于自定义 Intent,然后刷新您的小部件。

从你的 Activity 然后你需要做的就是发送一个带有自定义 Intent 的广播(Context.sendBroadcast)(你可以将数据添加到 IntentputExtra 照常)。

关于java - 从另一个 Activity 获取数据到 App Widget,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7540970/

相关文章:

java - 更改 ListView 的字体大小和文本大小

安卓多选ui

android - 应用程序小部件不会显示在应用程序抽屉中,似乎与无效尺寸有关

Android 6.0 - 应用待机和 AppWidgets

android - 如何在 Android AppWidget 中设置列​​ TableView 的初始滚动位置?

java - 如何将多个组件添加到 JFrame?

java - Package ...在intellij idea中不存在错误

java - 有没有办法以动态方式映射具有相同表名的多个数据库?

android - 谷歌分析崩溃报告只显示堆栈跟踪的第一行

android.os.FileUriExposedException : file:///storage/emulated/0/test. txt 通过 Intent.getData() 暴露在应用之外