Android 4.0: виджеты не появляются? - PullRequest
27 голосов
/ 10 января 2012

У меня есть виджет, который я создал для 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>

Ответы [ 5 ]

17 голосов
/ 15 января 2012

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

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

<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 оказалось достаточно для отображения виджета.

9 голосов
/ 10 января 2013

По прошествии нескольких дней я разобрался с решением

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

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



}

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

3 голосов
/ 17 октября 2012

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

1 голос
/ 10 января 2012

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

0 голосов
/ 13 сентября 2015

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

Согласно: Документация Android: установка-местоположение , вы не должныустановить виджеты на внешнее хранилище.

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

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

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

...