我有一个简单的应用程序,我想要一个主屏幕小部件(一个图像),它从其中一个活动运行应用程序,而不是主要活动。 我在编译,运行应用程序或安装它时没有错误,但是小部件既没有安装在我用于测试的平板电脑或手机中。 所以......这就是我在做的事情。
widget_info.xml
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider
xmlns:android="http://schemas.android.com/apk/res/android"
android:initialLayout="@layout/widget_layout"
android:minHeight="146dp"
android:minWidth="146dp"
android:configure=".MyWidgetProvider"
android:widgetCategory="home_screen|keyguard"
android:previewImage="@drawable/ic_launcher"
android:updatePeriodMillis="3000" >
</appwidget-provider>
widget_layout
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/layout"
android:orientation="horizontal"
android:layout_width="146dp"
android:layout_height="146dp"
android:layout_margin="8dip"
android:background="@drawable/ic_launcher" >
</LinearLayout>
MyWidgetProvider.java
package com.project;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.ComponentName;
import android.content.Context;
import android.widget.RemoteViews;
public class MyWidgetProvider extends AppWidgetProvider {
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
RemoteViews remoteViews = new RemoteViews(context.getPackageName(),R.layout.widget_layout);
ComponentName myWidget = new ComponentName(context,MyWidgetProvider.class);
AppWidgetManager manager = AppWidgetManager.getInstance(context);
manager.updateAppWidget(myWidget, remoteViews);
}
}
这是AndroidManifest.xml中Application的接收器
<receiver android:name="Detente" >
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
<action android:name="android.appwidget.action.ACTION_WIDGET_RECEIVER"/>
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/widget_info" />
</receiver>
我是否需要添加任何权限或类似的东西,或者这个“android:installLocation =”preferExternal“”是否会导致冲突?
(我正在使用Lenovo Tab whit ICS和带有GB的LG 3D-Max进行测试)
明天我需要这个,请帮忙。 :d
答案 0 :(得分:1)
问题可能是您没有正确声明AppWidgetProvider。
根据App Widgets指南,
该元素需要android:name属性,即 指定App Widget使用的AppWidgetProvider。
您的AppWidgetProvider名为MyWidgetProvider
,但您的清单显示为<receiver android:name="Detente" >
。将此更改为<receiver android:name="MyWidgetProvider" >
可能会解决您的问题。
我在AppWidgetManager documentation中也看不到ACTION_WIDGET_RECEIVER
。那个是从哪里来的?文档表明只需要APPWIDGET_UPDATE
。
答案 1 :(得分:1)
就像将应用程序移动到设备一样简单......因为这个
,它正被安装到SD android:installLocation="preferExternal"
请记住,只有在应用程序位于内部存储器中时才能安装小部件。