【问题标题】:Widget not showing in widget list小部件未显示在小部件列表中
【发布时间】:2013-08-14 17:03:01
【问题描述】:

我有一个应用程序并决定向它添加一个小部件,我已遵循它的所有官方文档,但是当我在我的 Galaxy Nexus 上安装该应用程序时,该小部件没有出现在应用程序/小部件中列表。

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.dysign.livetubecountdown"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
    android:minSdkVersion="11"
    android:targetSdkVersion="16" />

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >

    <activity
        android:name="com.dysign.livetubecountdown.MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <receiver android:name="com.dysign.livetubecountdown.Widget" android:label="@string/app_name" android:icon="@drawable/ic_launcher">
        <intent-filter>
            <action android:name="android.appwidget,action.APPWIDGET_UPDATE" />
        </intent-filter>
        <meta-data android:name="android.appwidget.provider" android:resource="@xml/widget_provider" />
    </receiver>

</application>

widget_provider.xml

<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
                    android:minHeight="80dp"
                    android:minWidth="80dp"
                    android:minResizeHeight="40dp"
                    android:minResizeWidth="40dp"
                    android:updatePeriodMillis="86400000"
                    android:initialLayout="@layout/widget_main"
                    android:previewImage="@drawable/ic_launcher"
                    android:widgetCategory="home_screen"
                    android:resizeMode="horizontal|vertical">
</appwidget-provider>

widget_main.xml

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">

    <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceLarge"
            android:text="Large Text"
            android:id="@+id/widgetTextView"/>
</FrameLayout>

Widget.java

package com.dysign.livetubecountdown;

import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.ComponentName;
import android.content.Context;
import android.widget.RemoteViews;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.Timer;
import java.util.TimerTask;

public class Widget extends AppWidgetProvider {

    @Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
        Timer timer = new Timer();
        timer.scheduleAtFixedRate(new TimerClass(context, appWidgetManager), 1, 1000);
    }

    private class TimerClass extends TimerTask {
        RemoteViews remoteViews;
        AppWidgetManager appWidgetManager;
        ComponentName thisWidget;
        DateFormat format = SimpleDateFormat.getTimeInstance(SimpleDateFormat.MEDIUM, Locale.getDefault());

        public TimerClass(Context context, AppWidgetManager appWidgetManager) {
            this.appWidgetManager = appWidgetManager;
            remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_main);
            thisWidget = new ComponentName(context, Widget.class);
        }

        @Override
        public void run() {
            remoteViews.setTextViewText(R.id.widgetTextView, "TIME = " +format.format(new Date()));
            appWidgetManager.updateAppWidget(thisWidget, remoteViews);
        }
    }
}

我一直在网上寻找解决此问题的方法,但我尝试的每一个建议都不起作用。 LogCat 中也没有任何错误,也没有提及任何与小部件相关的内容。

非常感谢任何帮助,谢谢!

【问题讨论】:

  • 上一个以获得灵感 )))。原来我造成这个问题的原因(未在可用小部件中列出)也是应用程序清单......特别是,我的接收器部分在我的应用程序标签之外)))。

标签: java android android-widget


【解决方案1】:

问题原来是清单中的拼写错误。

<action android:name="android.appwidget,action.APPWIDGET_UPDATE" />

应该是:

<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />

注意 android.appwidget 后面的逗号。

【讨论】:

  • 哎哟。我也浪费了半天的时间进行故障排除,因为我输入了“android.appwidget.provder”而不是“android.appwidget.provider”。我只是希望有一些日志消息告诉你为什么 android 无法处理清单文件中的元素。
【解决方案2】:

我曾多次遇到同样的问题。

帮助我的事情是重新启动手机,然后小部件开始出现在小部件列表中。为什么会发生这种情况,我不知道我用谷歌搜索过,发现很多人都有类似的问题,甚至发生用户从市场安装应用程序并且小部件没有出现在列表中。

其他人提供的一些解决方案:重新安装应用程序(对我有​​用),开始几次主要活动(也没有),重启手机(这个对我有用,因为它甚至发生在开发过程中该小部件可以正常工作好几天,但从 eclipse 重新安装时突然在列表中丢失了???重启手机对我有帮助。

希望对你有帮助!

【讨论】:

  • 重启了,重装了无数次,无论是开发版还是发布版的APK,还是一无所获:(
  • 嗯..你试过不同的设备或模拟器吗?还可以尝试下载一些项目作为示例并运行以查看它们是否有效。
  • 也许试试这个,下载并导入,看看它是否有效:forum.xda-developers.com/showthread.php?t=1732939 ...我想你已经尝试过除了官方文档之外的不同教程? (官方文档在我的手机上不起作用,我不得不使用其他方法来运行小部件......)
  • 这是我最初结合官方文档遵循的。它也不能在模拟器中工作。
  • 我唯一的建议是尝试连接不同的设备,看看是否在那里运行相同的代码......而且我认为来自不同应用程序的小部件可以在您的手机上运行?
猜你喜欢
  • 1970-01-01
  • 2021-05-29
  • 2015-07-17
  • 1970-01-01
  • 2013-05-08
  • 1970-01-01
  • 2015-01-23
  • 2018-03-14
  • 2021-04-26
相关资源
最近更新 更多