Виджет Android отображается только для отладки; всегда отображается значок приложения

Мое простое приложение-виджет устанавливается и отлично работает, когда оно подписано как отладочное приложение, но как только я пытаюсь подписать его готовым к выходу на рынок, я сталкиваюсь со странным поведением: оно не отображается в списке виджетов, пока я не удалю его. приложение, когда оно отображается как стандартный значок робота Android "У меня нет этого".

Попытка перетащить этот «отсутствующий» виджет на экран приводит к сбою Launcher.

Чтобы исследовать это, я добавил намерение MAIN/LAUNCH к одному из действий, и оно появляется, как и ожидалось, при установке и исчезает при удалении.

Что очень жутко, так это то, что если я переустанавливаю, в то время как в Launcher отображается значок робота «У меня нет этого», мой виджет ненадолго заменяет этот значок, а затем исчезает из списка.

Я не вижу никаких сообщений об ошибках или выданных намерений в журнале, кроме обычного «Я удаляю / устанавливаю это».

Есть ли что-то глупое и очевидное, что мне не хватает, например, «подписанные приложения должны специально регистрировать свои виджеты», что не требуется в режиме отладки?

Вот мои свойства манифеста и виджета:

<?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>

person android.weasel    schedule 18.10.2013    source источник


Ответы (1)


Я думал, что это может быть связано с какой-то проблемой, связанной со слишком длинным ключом подписи выпуска, но различные эксперименты показывают, что это происходит даже с ключом 2048.

Это также происходит, когда я использую Gradle для сборки http://javatechig.com/android/app-widgets-example-in-android/, так что это не мой код.

Я не думаю, что что-либо, что я делаю, должно привести к сбою программы запуска после удаления моего приложения, поэтому мне кажется, что это ошибка Android: я сообщил об этом по адресу https://code.google.com/p/android/issues/detail?id=61387

person android.weasel    schedule 19.10.2013