Android Widget无法正常工作

时间:2011-06-27 04:38:27

标签: java android xml widget

我不知道发生了什么。我的OnReceive方法永远不会被调用。它可能是清单中的东西。

小工具提供商:

package com.net_refresh;

import android.app.PendingIntent;
import android.appwidget.AppWidgetProvider;
import android.content.Intent;
import android.content.Context;
import android.provider.Settings;
import android.view.View;
import android.widget.RemoteViews;
import android.appwidget.AppWidgetManager;

public class NetRefreshWidget extends AppWidgetProvider
{
    private static final String ACTION_WIDGET_RECEIVER = "ActionRecieverWidget";
    @Override
    public void onUpdate(Context context, AppWidgetManager appwidgetmanager, int[] appWidgetIds)
    {
        final int length = appWidgetIds.length;
        for (int i=0; i<length; i++)
        {
            int appWidgetId = appWidgetIds[i];

            Intent intent = new Intent(context, NetRefreshWidget.class);
            intent.setAction(ACTION_WIDGET_RECEIVER);
            PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0);

            RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_initial_layout);
            views.setOnClickPendingIntent(R.id.button1, pendingIntent);

            appwidgetmanager.updateAppWidget(appWidgetId, views);
        }
    }

    @Override
    public void onDeleted(Context context, int[] appWidgetIds)
    {
    }

@Override
public void onEnabled(Context context)
{

}

@Override
public void onDisabled(Context context)
{

}

@Override
public void onReceive(Context context, Intent intent)
{
    if (intent.getAction().equals(ACTION_WIDGET_RECEIVER))
    {
        //Top secret code here.
    }
}

清单:

<?xml version="1.0" encoding="UTF-8"?>
<manifest android:versionCode="1" android:versionName="1.0"
    package="com.net_refresh" xmlns:android="http://schemas.android.com/apk/res/android">
    <uses-sdk android:minSdkVersion="7"/>
    <uses-permission android:name="android.permission.WRITE_SETTINGS"/>
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:label="@string/app_name" android:name=".NetRefresh">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
        <receiver android:name=".NetRefreshWidget">
            <intent-filter>
                <action android:name="android.appwidget.action.APPWIDGET_UPDATE"/>
            </intent-filter>
            <meta-data android:name="android.appwidget.provider"     android:resource="@xml/widget_info"/>
        </receiver>
    </application>
</manifest>

小部件信息XML:

<?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="0"
  android:initialLayout="@layout/widget_initial_layout"
  >
</appwidget-provider>

小部件布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/widget_root"
  android:layout_width="72dp" 
  android:orientation="vertical" 
  android:layout_height="72dp"
  >
<Button android:text="Button" android:layout_width="wrap_content" android:id="@+id/button1" android:layout_height="wrap_content"></Button>
<ImageView android:layout_height="wrap_content" android:layout_width="wrap_content"     android:src="@drawable/icon" android:clickable="true" android:adjustViewBounds="false"      android:id="@+id/img_refresh" android:layout_toRightOf="@+id/button1"      android:layout_alignTop="@+id/button1" android:layout_alignBottom="@+id/button1">
</ImageView>
</RelativeLayout>

3 个答案:

答案 0 :(得分:0)

如果没有你指出编译器的错误和代码,代码什么也没说。警告。

无论如何,你可以将你的代码包装成.apk并自己安装到你的设备中,但这是曲线方式,因为我认识的每个人都在使用eclipse和SDK工具。

答案 1 :(得分:0)

您是否尝试过使用此功能:<uses-permission android:name="android.permission.INTERNET" />。它可以解决它。

答案 2 :(得分:0)

我想了一会儿。我不记得我改变了什么,但我至少添加了这一行:

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

到清单,旁边:

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

非常简单的解决方案,现在我已经了解广播如何运作。