Android Widget,可以启动/停止服务并每秒接收更新

时间:2013-02-15 10:14:12

标签: android android-widget broadcastreceiver alarmmanager android-sensors

我需要创建一个Android Widget,它基本上只有一个开始/停止按钮和一个包含一些信息的Field。 “开始”按钮应该启动一个每隔一秒左右得到一个结果的服务。此结果的一部分应显示在窗口小部件中,并且可以通过按停止按钮再次停止服务。

任何人都可以指出我正确的方向如何实施这个策略?

我现在读了很多,但我真的不确定。根据我的理解,AlarmManager会过度使用,并且电池耗电非常快或者手机没有响应。此外,我不能使用BroadcastReceiver,因为该服务需要超过5秒(对此不太确定)。

感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

首先,建议您从窗口小部件创建服务时,应该在执行必要的更改时立即停止它,因为正在运行的服务会使用电池和内存。

对于制作小部件,这会有所帮助: -

public void onUpdate(Context context, AppWidgetManager appWidgetManager,
        int[] appWidgetIds) {
    // TODO Auto-generated method stub
    super.onUpdate(context, appWidgetManager, appWidgetIds);
    for (int i = 0; i < appWidgetIds.length; i++) {
        int appWidgetId = appWidgetIds[i];
        //Give the name of service you want to start in your case Alarm Service
        Intent intent = new Intent(context, WidgetService.class);
        PendingIntent pendingIntent = PendingIntent.getService(context, 0,
                intent, 0);
        //This basically sets the layout of your widget to widget_layout
        RemoteViews views = new RemoteViews(context.getPackageName(),
                R.layout.widget_layout);
        views.setOnClickPendingIntent(R.id.imageView1, pendingIntent);

        appWidgetManager.updateAppWidget(appWidgetId, views);

    }

对于您的服务类,您可以在执行所需的更改后在OnStart()方法中使用stopSelf()。