更新非常简单的appwidget的问题

Pau*_*aul 1 android android-widget

我一直在关注这个教程,试图为android制作一个非常简单的时钟小部件.我能够创建小部件,但它似乎没有更新.我发现这很奇怪,因为我的代码似乎与android dev博客的教程基本相同.

当我将小部件添加到主屏幕(Android 2.2模拟器)时,我在logCat中收到以下消息:

I/ActivityManager(   68): Starting activity: Intent { act=android.appwidget.action.APPWIDGET_PICK cmp=com.android.settings/.AppWidgetPickActivity (has extras) }
W/InputManagerService(   68): Window already focused, ignoring focus gain of: com.android.internal.view.IInputMethodClient$Stub$Proxy@44fbaf40
I/AppWidgetPickActivity(  135): EXTRA_CUSTOM_INFO not present.
I/ActivityManager(   68): Displayed activity com.android.settings/.AppWidgetPickActivity: 1181 ms (total 1181 ms)
W/ActivityManager(   68): Unable to launch app com.levold.customClockWidget/10036 for broadcast Intent { act=android.appwidget.action.APPWIDGET_ENABLED cmp=com.levold.customClockWidget/.ClockWidget }: process is bad
W/ActivityManager(   68): finishReceiver called but none active
W/ActivityManager(   68): Unable to launch app com.levold.customClockWidget/10036 for broadcast Intent { act=android.appwidget.action.APPWIDGET_UPDATE cmp=com.levold.customClockWidget/.ClockWidget (has extras) }: process is bad
W/ActivityManager(   68): finishReceiver called but none active
W/InputManagerService(   68): Window already focused, ignoring focus gain of: com.android.internal.view.IInputMethodClient$Stub$Proxy@44fe1c50
Run Code Online (Sandbox Code Playgroud)

这些线条Unable to launch app com.levold.customClockWidget/10036 for broadcast Intent { act=android.appwidget.action.APPWIDGET_ENABLED cmp=com.levold.customClockWidget/.ClockWidget }: process is bad似乎是最相关的,但我找不到有关它的更多信息.

大部分代码如下.如果有人能提供帮助,那将是非常好的,我现在几乎陷入困境......

AndroidManifest.xml中

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

  <application android:icon="@drawable/icon" android:label="@string/app_name">

    <!-- Broadcast Receiver that will process AppWidget updates -->
    <receiver android:name=".ClockWidget" android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
        </intent-filter>
        <meta-data android:name="android.appwidget.provider" android:resource="@xml/custom_clock_widget" />
    </receiver>

    </application>
</manifest>
Run Code Online (Sandbox Code Playgroud)

XML/custom_clock_widget.xml

<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
    android:minWidth="146dip"
    android:minHeight="72dip"
    android:updatePeriodMillis="1000"
    android:initialLayout="@layout/main"
/>
Run Code Online (Sandbox Code Playgroud)

SRC/COM/levold/customClockWidget/ClockWidget.java

package com.levold.customClockWidget;

import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.Context;
import android.util.Log;
import android.widget.Toast;

public class ClockWidget extends AppWidgetProvider {

    @Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
        Toast.makeText(context,"Updating widget...", Toast.LENGTH_SHORT).show();
        Log.i("clockWidget","Updating widget...");
    }
Run Code Online (Sandbox Code Playgroud)

Com*_*are 5

你有什么看起来很好的袖口.我不确定你是否可以ToastBroadcastReceiver那样做.更重要的是,请记住,它只会每半小时更新一次,因为android:updatePeriodMillis不会接受低于半小时的值.

应用小部件并不是每秒都要更新.更新应用小部件涉及进程间通信调用,这并不便宜.

主屏幕时钟最好由主屏幕应用程序实现,而不是作为app小部件实现.