Подтвердить что ты не робот

Android 4.0: виджеты не появляются?

У меня есть виджет, который я создал против Android 2.1, который был прекрасен и продавался на рынке.

У меня был пользователь, жалующийся, что он купил его, и он никогда не появлялся на его устройстве Android 4.0.

Я загрузил эмулятор 4.0, запустил его из Eclipse, он сообщил об успешной установке, и на самом деле я вижу его в списке "Приложение для просмотра Widget", и я могу запустить его там, и это кажется прекрасным, но это не так. "Не показывайте нигде под" Виджеты "- я не могу найти его, чтобы перетащить его на главный экран! Я предполагаю, что это то же самое, что видит пользователь.

Любая идея, что здесь происходит? Почему это нормально в 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>
4b9b3361

Ответ 1

Итак, вот решение, с которым я столкнулся:

Вам нужна активность, которая появится на панели запуска. Итак, сначала у нас есть старый приемник виджетов, например:

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

И тогда нам нужно какое-то действие, с установкой 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>

Насколько я могу судить, вы ДОЛЖНЫ делать это, даже если ваш виджет просто должен быть чистым виджетами без каких-либо связанных действий. По крайней мере, сделайте одно фиктивное действие, которое запустит экран, в котором говорится: "Теперь ваш виджет готов к использованию! Посмотрите его под виджетами и перетащите его на главный экран!"

В моем случае мой виджет запустил действие, когда вы его нажали, поэтому я сделал это действие в LAUNCHER/MAIN и просто добавил одноразовое всплывающее диалоговое окно, в котором в основном говорится: "Вы можете запускать это как приложение, но можете захотеть вместо этого использовать виджет".

Обратите внимание, что на эмуляторе 4.0 я никогда не получал, чтобы мой виджет отображался в первый раз перед этим изменением. Просто наличие активности, установленной для MAIN и LAUNCHER, казалось, было достаточно, чтобы показать виджет.

Ответ 2

После нескольких дней я выяснил решение

поэтому давайте перейдем к любой вашей деятельности, которая будет запущена при открытии приложения и в основном действии добавьте только эту строку

sendBroadcast (новый Intent (Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_HOME));

в качестве примера

public class Default class extends Activity  {


@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
       sendBroadcast(new Intent(Intent.ACTION_MAIN)
       .addCategory(Intent.CATEGORY_HOME));
    setContentView(R.layout.main);



}

что это, это даст системе, что основное приложение теперь запущено, и оно выведет виджет на панель запуска:) простая строка, которая не изменяет ничего в манифесте просто сохраните способ, которым вы разработали приложение ur, которое показывает нормальный виджетов в предыдущих версиях < 4.х

Ответ 3

Получена та же проблема. Я исправил его, удалив теги <PreferenceScreen> в моем appwidgetprovider.xml(located in res/xml).

Ответ 4

Вам нужно вручную запустить связанное приложение хотя бы один раз, чтобы отобразить виджет. До этого он находится в состоянии, не подлежащем запуску, и он не будет получать широковещания и т.д.

Ответ 5

Мое решение (Виджет 4.1.2) было уверенным, что виджет установлен на внутреннем устройстве.

В соответствии с: Android Documentation: install-location, вы не должны устанавливать виджеты в External Storage.

Мне пришлось удалить мой виджет, установить его еще раз, и после этого я увидел изменения!

Полезная ссылка:

http://www.technipages.com/fix-android-app-widgets-not-appearing-on-widget-list