小部件中的图像

Posted

技术标签:

【中文标题】小部件中的图像【英文标题】:Image in Widget 【发布时间】:2013-04-26 22:26:27 【问题描述】:

我正在尝试在 onUpdate 小部件布局的图像视图中设置图像,但图像没有更新

 @Override
     public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) 
     
         Log.i(TAG, "onUpdate called");
         for (int appWidgetId : appWidgetIds) 
         
             Bitmap bitmap=ImageUtils.getBitmap(context, appWidgetId);
             RemoteViews remoteView = new RemoteViews(context.getPackageName(), R.layout.widget);

             remoteView.setImageViewBitmap(R.id.imgView,bitmap);
             appWidgetManager.updateAppWidget(appWidgetId, remoteView);
         
     

小部件的xml布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_
    android:layout_
    android:orientation="vertical" >

    <ImageView
        android:id="@+id/imgView"
        android:layout_
        android:layout_
        android:src="@drawable/ic_launcher" />

</LinearLayout>

清单文件

<application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.demo.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
         <activity
             android:name=".WidgetConfig"
             android:label="@string/app_name" >
             <intent-filter>
                  <action
                    android:name="android.appwidget.action.APPWIDGET_CONFIGURE" />
             </intent-filter>
         </activity>
        <receiver
            android:name="BasicWidgetProvider">
            <intent-filter>
                <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
            </intent-filter>
            <meta-data
                android:name="android.appwidget.provider"
                android:resource="@xml/widget_info" />
        </receiver>

          <receiver
            android:name="BasicWidgetProvider">
            <intent-filter>
                <action
                    android:name="android.appwidget.action.APPWIDGET_UPDATE" />
                    <data android:scheme="widget" />
            </intent-filter>
            <meta-data
                android:name="android.appwidget.provider"
                android:resource="@xml/widget_info" />
        </receiver>
    </application>

widget_info.xml

<appwidget-provider 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:minWidth="25dp"
    android:minHeight="25dp"
    android:initialLayout="@layout/widget"
    android:configure="com.demo.WidgetConfig" 
    android:widgetCategory="home_screen|keyguard" 
    android:previewImage="@layout/widget" 
    android:resizeMode="horizontal|vertical" 
    android:initialKeyguardLayout="@layout/widget" 
    android:minResizeHeight="5dp" 
    android:minResizeWidth="5dp">
</appwidget-provider>

但是当尝试加载小部件时,我得到一个 Toast “App isnt installed”,我没有显示任何这样的 toast 来自哪里??

为什么图像没有设置,如何解决?

【问题讨论】:

加载时是否没有图像?对我来说,这听起来像是小部件/应用程序配置而不是图像的错误。您可以发布清单吗? 我添加了清单文件,查看代码 【参考方案1】:

确保您在 appwidget-provider xml 的“android:configure”字段中设置了正确的包名称,并且在清单文件中设置了正确的 intetn-filter。

【讨论】:

他说的是widget provider xml而不是layout。 好的,我发布了有问题的评论并在这里回复了同样的问题,没关系,我的错,再次更新【参考方案2】:

请尝试使用下面的 remoteview.setimageViewuri。

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

        remoteViews = new RemoteViews(context.getPackageName(), R.layout.main);
        thisWidget = new ComponentName(context, HelloWidget.class);
        remoteViews.setImageViewUri(R.id.imageView1,Uri.parse("/mnt/sdcard/test.png")); 
        appWidgetManager.updateAppWidget(thisWidget, remoteViews);
    

【讨论】:

【参考方案3】:
<receiver
    android:name="BasicWidgetProvider">
    <intent-filter>
        <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
    </intent-filter>
    <meta-data
        android:name="android.appwidget.provider"
        android:resource="@xml/widget_info" />
</receiver>

你的名字前面少了一个点,你有这个接收器两次。

【讨论】:

以上是关于小部件中的图像的主要内容,如果未能解决你的问题,请参考以下文章

如何将图像从 Firebase 存储显示到小部件中?

检查图像是不是已加载到 Flutter 中的 Image.network 小部件中

小部件中的图像 [颤动]

如何在颤动中更改容器小部件中的背景图像

如何通过单击小部件中的图像来启动活动?

如何在 Flutter 中相对于另一个小部件定位小部件?