安卓 4.0 : widgets not appearing?

标签 android widget android-4.0-ice-cream-sandwich

我有一个针对 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/

相关文章:

android - 一个扩展 Activity 和 BroadcastReceiver 的类

android - WebView android 不换行文本

java - GWT CellList 还是单元格表?

Android ICS 小部件 - ListView 随机变为空白(当启动器重新启动时?) RemoteviesService 错误?

javascript - 外部小部件加载完成时执行 JS 命令

在 ICS 上几分钟未调用 Android AsyncTask

android - Galaxy Nexus 上没有显示背景图片(仅)?

android - 在 Material 设计中设置弹出菜单

Android 设备监视器无法启动

java - Android 与 websocket 通信(Node Websocket 服务器和 Android Java 客户端)。不适用于 Android 4