2011-06-27 55 views
0

我不知道发生了什么事。我的OnReceive方法从未被调用。这可能是清单中的一些东西。Android Widget不能正常工作

控件提供者:

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> 

的Widget信息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> 

的Widget布局:

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

回答

0

如果没有您指出编译器的错误&警告,代码说什么都没有。

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

+0

没有编译器错误/警告。我只是没有正确设置我的小部件。我不知道具体是什么错。这可能是一件非常简单的事情,中间用户可以马上发现。另外,这对调试没有帮助。 – Austin

0

你试过用这个:<uses-permission android:name="android.permission.INTERNET" />。它可以解决它。

0

我想了一下回来。我不记得我改变究竟,但我至少加入这一行:

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

到清单,旁边:

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

很简单的解决方案,现在我有多么的了解广播工作。