Android小部件仅显示调试;应用程序图标始终显示

时间:2013-10-18 06:51:24

标签: android widget install signing

我的简单小部件应用程序在作为调试应用程序签名时安装并完美运行,但是当我尝试为市场做好准备时,我会遇到奇怪的行为:它不会显示在小部件列表中直到我卸载应用,当它显示为标准Android'我没有这个'机器人图标。

尝试将此“缺失”窗口小部件拖到屏幕会导致启动器崩溃。

为了对此进行调查,我在其中一个活动中添加了MAIN / LAUNCH意图,并在安装时按预期显示,并在卸载时消失。

超级令人毛骨悚然的是,如果我重新安装,当启动器显示“我没有这个”机器人图标时,我的小部件会短暂地替换该图标,然后从列表中消失。

我没有在日志中看到任何错误消息或发出的意图,超出了正常的“我正在/安装此”。

是否有一些愚蠢和明显我缺失的东西,比如'已签名的应用必须专门注册他们的小部件',这在调试模式下是不必要的?

这是我的清单和小部件属性:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      android:versionCode="1"
      package="uk.org.baverstock.appghoul">
<uses-sdk
        android:minSdkVersion="4"
        android:targetSdkVersion="9"/>
<application android:icon="@drawable/icon" android:label="@string/app_name">

    <receiver android:name="uk.org.baverstock.appghoul.AppGhoulWidgetProvider">
        <intent-filter>
            <action android:name="android.appwidget.action.APPWIDGET_UPDATE"/>
        </intent-filter>
        <meta-data android:name="android.appwidget.provider"
                   android:resource="@xml/appwidget_provider"/>
    </receiver>

    <activity android:name=".Configure"
              android:excludeFromRecents="true"
            >
        <intent-filter>
            <action android:name="android.appwidget.action.APPWIDGET_CONFIGURE"/>
        </intent-filter>
        <intent-filter>
            <!-- Why does this show up, when the widget doesn't? -->
            <action android:name="android.intent.action.MAIN"/>
            <category android:name="android.intent.category.LAUNCHER"/>
        </intent-filter>
    </activity>

    <activity android:name=".ControlsChoiceActivity"
              android:theme="@android:style/Theme.Dialog"
              android:excludeFromRecents="true"
            />

    <activity android:name=".ReconfigureWidget"
              android:theme="@android:style/Theme.Dialog"
              android:excludeFromRecents="true"
            />

    <receiver
            android:name=".WidgetRescanner"
            android:label="WidgetRescanner"
            >
        <intent-filter>
            <action android:name="android.intent.action.PACKAGE_ADDED"/>
            <action android:name="android.intent.action.PACKAGE_CHANGED"/>
            <action android:name="android.intent.action.PACKAGE_REPLACED"/>
            <action android:name="android.intent.action.PACKAGE_REMOVED"/>
            <data android:scheme="package"/>
        </intent-filter>

    </receiver>

</application>
</manifest>

和小部件属性:

<?xml version="1.0" encoding="utf-8"?>

<appwidget-provider
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:minWidth="72dp"
    android:minHeight="72dp"
    android:updatePeriodMillis="86400000"
    android:initialLayout="@layout/widget"
    android:configure="uk.org.baverstock.appghoul.Configure"
android:previewImage="@drawable/icon"
android:widgetCategory="home_screen">
<!--
android:resizeMode="horizontal|vertical"
android:initialKeyguardLayout="@layout/example_keyguard"

 -->
</appwidget-provider>

1 个答案:

答案 0 :(得分:1)

我认为它可能与发布签名密钥太长的某些问题有关,但各种实验表明即使使用2048密钥也会发生这种情况。

当我使用Gradle构建http://javatechig.com/android/app-widgets-example-in-android/时也会发生这种情况,因此它似乎不是我的代码。

我无法想到我应该能够在卸载我的应用程序后崩溃启动器,所以在我看来这必须是一个Android错误:我已经在https://code.google.com/p/android/issues/detail?id=61387