0

我是新的Android和我有一点问题,我已经搜查多个论坛并没有什么..Android小工具失去未决意图

我有一个简单的小工具,显示电池并点击打开弹出式主题的活动。

所以我这个文件太多了,可能有些方法错了?

WidgetProvider:

public class Widget extends AppWidgetProvider { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     // TODO Auto-generated method stub 
     super.onReceive(context, intent); 
     context.startService(new Intent(context, Service.class)); 
    } 

    @Override 
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, 
      int[] appWidgetIds) { 
     // TODO Auto-generated method stub 
     ComponentName thisWidget = new ComponentName(context, 
       Widget.class); 
     AppWidgetManager manager = AppWidgetManager.getInstance(context); 

     int[] allWidgetIds = appWidgetManager.getAppWidgetIds(thisWidget); 
     for (int widgetId : allWidgetIds) { 

      RemoteViews updateViews = new RemoteViews(context.getPackageName(), 
        R.layout.widget_layout); 

      Intent intent = new Intent(context, Popup.class); 
      PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, 
        intent, 0); 
      updateViews.setOnClickPendingIntent(R.id.widget_layout, 
        pendingIntent); 

      manager.updateAppWidget(widgetId, updateViews); 

     } 
    } 

    @Override 
    public void onDisabled(Context context) { 
     // TODO Auto-generated method stub 
     context.stopService(new Intent(context, Service.class)); 
     super.onDisabled(context); 
    } 
} 

而且我的服务:

public class Service extends Service { 

    private int batteryLevel = 0; 
    RemoteViews updateViews; 

    private BroadcastReceiver receiver = new BroadcastReceiver() { 

     @Override 
     public void onReceive(Context context, Intent intent) { 
      String action = intent.getAction(); 
      if (action.equals(Intent.ACTION_BATTERY_CHANGED)) { 
       batteryLevel = intent.getIntExtra("level", 0); 
       updateViews = new RemoteViews(context.getPackageName(), 
         R.layout.widget_layout); 

       updateViews.setImageViewBitmap(R.id.imgBattery, 
       buildBitmap(batteryLevel + "%", context)); 

       ComponentName thisWidget = new ComponentName(context, 
         Widget.class); 
       AppWidgetManager manager = AppWidgetManager 
         .getInstance(context); 
       manager.updateAppWidget(thisWidget, updateViews); 
      } 
     } 
    }; 

    @Override 
    public void onCreate() { 
     // TODO Auto-generated method stub 
     super.onCreate(); 
     IntentFilter intentFilter = new IntentFilter(); 
     intentFilter.addAction(Intent.ACTION_BATTERY_CHANGED); 
     registerReceiver(receiver, intentFilter); 
    } 

    @Override 
    public IBinder onBind(Intent intent) { 
     // TODO Auto-generated method stub 
     return null; 
    } 

    @Override 
    public void onDestroy() { 
     // TODO Auto-generated method stub 
     unregisterReceiver(Receiver); 
     super.onDestroy(); 
    } 
} 

有人可以帮我吗?而除此之外,该服务具有30MB ...同时运行

回答

2

让我们这容易让你:

private BroadcastReceiver receiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     String action = intent.getAction(); 
     if (action.equals(Intent.ACTION_BATTERY_CHANGED)) { 
      batteryLevel = intent.getIntExtra("level", 0); 
      updateViews = new RemoteViews(context.getPackageName(), R.layout.widget_layout); 

      updateViews.setImageViewBitmap(R.id.imgBattery, buildBitmap(batteryLevel + "%", context)); 

      Intent intent = new Intent(context, Popup.class); 
      PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0); 
      updateViews.setOnClickPendingIntent(R.id.widget_layout, pendingIntent); 

      ComponentName thisWidget = new ComponentName(context, Widget.class); 
      AppWidgetManager manager = AppWidgetManager.getInstance(context); 
      manager.updateAppWidget(thisWidget, updateViews); 
     } 
    } 
}; 
+0

谢谢! 1.我在onUpdate(Widget类)上删除了什么? 2. onEnabled我已经通过启动服务,没关系?因为当我重新启动我的手机它只更新电池更换.. – FilipeOS 2013-04-30 21:42:57

+0

1.对不起,我不明白你的第一个问题 2. onEnabled()仅在App Widget第一次创建实例时调用。例如,如果用户添加了App Widget的两个实例,这只是第一次。这就是为什么服务在重新启动后没有启动的原因。从onUpdate()或onReceive()启动服务,但要确保它在应用程序的生命周期中只发生一次。使用例如一个静态布尔变量来检查它是否已经启动。 – 2013-05-01 01:45:35

+0

1.我必须删除我的窗口小部件类中的一些内容,因为我已经制定了服务意图?删除重复的代码? 2.我用这个例子http://stackoverflow.com/questions/600207/android-check-if-a-service-is-running哪里没有运行然后启动它,好主意?更好的改善?谢谢! – FilipeOS 2013-05-02 08:57:29