我有一个针对 Android 2.1 创建的小部件,它很好并且在市场上销售。
我有一个用户提示他买了它,但它从未出现在他的 Android 4.0 设备上。
我加载了 4.0 模拟器,从 Eclipse 运行它,它报告安装成功,实际上我可以在“Widget Preview”应用程序中看到它,我可以在那里运行它,看起来不错,但它没有'没有出现在“小部件”下的任何地方——我实际上找不到它来将它拖到主屏幕上!我认为这与用户看到的内容相同。
知道这里发生了什么吗? 为什么在 2.1 中可以正常安装,但在 4.0 中没有出现在列表中,即使安装成功?
这是我的 layout\widget.xml 文件,如果有帮助的话:
<RelativeLayout android:id="@+id/relativeLayout1" android:layout_width="fill_parent" android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android">
<TextView android:layout_width="wrap_content" android:id="@+id/blankspot" android:layout_height="5dp" android:gravity="center" android:shadowDy="1" android:shadowDx="1" android:layout_centerHorizontal="true"></TextView>
<ImageButton android:layout_below="@+id/blankspot" android:layout_width="60dp" android:layout_height="60dp" android:id="@+id/widgetIconButton" android:layout_centerHorizontal="true" android:scaleType="centerCrop" android:src="@drawable/volumeprofilesplus" android:background="@null"></ImageButton>
<ImageView android:layout_width="60dp" android:layout_height="20dp" android:id="@+id/override" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:scaleType="fitXY" android:background="@null" android:src="@drawable/overredcaps" android:visibility="invisible"></ImageView>
<ImageButton android:layout_below="@+id/widgetIconButton" android:layout_width="70dp" android:layout_height="30dp" android:id="@+id/widgetSettingsButton" android:layout_centerHorizontal="true" android:scaleType="fitXY" android:src="@drawable/settings" android:background="@null"></ImageButton>
</RelativeLayout>
还有 xml\widget_provider.xml:
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider
xmlns:android="http://schemas.android.com/apk/res/android"
android:minWidth="72dip"
android:minHeight="72dip"
android:updatePeriodMillis="0"
android:initialLayout="@layout/main" >
</appwidget-provider>
最佳答案
所以这是我想出的解决方案:
您需要一个将显示在启动器上的 Activity 。所以首先我们有 ye olde 小部件接收器,如下所示:
<receiver android:name=".VolumeProfilesWidget" android:label="@string/app_name">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
<!-- Broadcast Receiver that will also process our self created action -->
<action android:name="net.thepurge.volumeprofiles.plus.VolumeProfilesWidget.ACTION_WIDGET_RECEIVER"/>
</intent-filter>
<meta-data android:name="android.appwidget.provider" android:resource="@xml/volumeprofiles_widget_provider" />
</receiver>
然后我们需要一些 Activity ,设置 MAIN 和 LAUNCHER:
<activity android:name=".MainActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<action android:name="net.thepurge.volumeprofiles.plus.VolumeProfilesWidget.ACTION_WIDGET_CONFIGURE"/>
</intent-filter>
</activity>
据我所知,即使您的小部件应该是没有关联 Activity 的纯小部件,也必须这样做。至少,创建一个虚拟 Activity 来启动一个屏幕,显示“您的小部件现在可以使用了!在小部件下查找它并将其拖到您的主屏幕!”
在我的例子中,当你推送它时,我的小部件启动了一个 Activity ,所以我将该 Activity 放入 LAUNCHER/MAIN 并添加了一个一次性弹出对话框,基本上说“你可以将它作为应用程序运行,但你可能想要改为使用小部件”。
请注意,在 4.0 模拟器上,在此更改之前,我从未让我的小部件出现在第一次安装时。只需将 Activity 设置为 MAIN 和 LAUNCHER 似乎就足以使小部件显示出来。
关于安卓 4.0 : widgets not appearing?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8794952/