android 小部件在几个小时后停止更新代码?

发布于 2024-12-17 16:12:29 字数 2191 浏览 6 评论 0原文

我正在开发一个电池小部件,因此当发生 Intent.ACTION_BATTERY_CHANGED 时,它会由小部件 onReceive() 方法接收,我可以从中获取其数据,现在问题是,整个过程都会找到很好,但是随着时间的推移,你可以说小部件开始运行,大约可以说 4 到 5 小时,小部件停止更新,目前我正在使用 textView 来显示电池数据,但几个小时后,小部件停止更新此处 textView 中的数据就是代码

这里是widget的update方法

@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
        int[] appWidgetIds) {

    context.getApplicationContext().registerReceiver(this,
            new IntentFilter(Intent.ACTION_BATTERY_CHANGED));

    ComponentName cn =
        new ComponentName(context, BatteryInfoActivity.class);
    appWidgetManager.updateAppWidget(cn, this.views);
}

这里是ononRecive方法

    @Override
public void onReceive(Context context, Intent intent) {
    String action = intent.getAction();

    if (action.equals(Intent.ACTION_BATTERY_CHANGED)) {
        //Integer level = intent.getIntExtra("level", -1);

        String mgs = "--";
        //String BatterInfo = "Level"+ intent.getIntExtra("level", -1)+ "/" + intent.getIntExtra("scale", -1);
        Integer level = intent.getIntExtra("level", -1);
        Integer scale = intent.getIntExtra("scale", -1);
        Integer temp = intent.getIntExtra("temperature",-1);
        Integer voltage = intent.getIntExtra("voltage", -1);
        Integer health = intent.getIntExtra("health", -1);
          boolean present = intent.getBooleanExtra("present", false);
          Integer plugged = intent.getIntExtra("plugged", -1);
          String technology = intent.getStringExtra("technology");
          Integer status = intent.getIntExtra("status",-1);      
          mgs = mgs + " Technology " + technology + "--";
          mgs = mgs + "Battery is Present " + present+"--";
          mgs = mgs + " level "+ level + "/" +  scale + "--";
          mgs = mgs + "tempuratue" + temp + "--";
          mgs = mgs + "voltage"+ voltage + "--"; 

        this.views.setTextViewText(R.id.textView1, mgs);
        ComponentName cn =
            new ComponentName(context, BatteryInfoActivity.class);
        AppWidgetManager.getInstance(context).updateAppWidget(cn, this.views);
    }
    super.onReceive(context, intent);
}

I am working on a battery widget, so when ever Intent.ACTION_BATTERY_CHANGED occurs it is received by widget onReceive() method from where I can get its data now the problem is this, that this whole procedure goes find fine but when time passes means you can say widget gets live round about can say 4 to 5 hours and Widget stops update, at the moment I am using textView to show the data of battery but after some hours widget stops updating data in the textView here is the code

here is the update method of widget

@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
        int[] appWidgetIds) {

    context.getApplicationContext().registerReceiver(this,
            new IntentFilter(Intent.ACTION_BATTERY_CHANGED));

    ComponentName cn =
        new ComponentName(context, BatteryInfoActivity.class);
    appWidgetManager.updateAppWidget(cn, this.views);
}

here is the on onRecive method

    @Override
public void onReceive(Context context, Intent intent) {
    String action = intent.getAction();

    if (action.equals(Intent.ACTION_BATTERY_CHANGED)) {
        //Integer level = intent.getIntExtra("level", -1);

        String mgs = "--";
        //String BatterInfo = "Level"+ intent.getIntExtra("level", -1)+ "/" + intent.getIntExtra("scale", -1);
        Integer level = intent.getIntExtra("level", -1);
        Integer scale = intent.getIntExtra("scale", -1);
        Integer temp = intent.getIntExtra("temperature",-1);
        Integer voltage = intent.getIntExtra("voltage", -1);
        Integer health = intent.getIntExtra("health", -1);
          boolean present = intent.getBooleanExtra("present", false);
          Integer plugged = intent.getIntExtra("plugged", -1);
          String technology = intent.getStringExtra("technology");
          Integer status = intent.getIntExtra("status",-1);      
          mgs = mgs + " Technology " + technology + "--";
          mgs = mgs + "Battery is Present " + present+"--";
          mgs = mgs + " level "+ level + "/" +  scale + "--";
          mgs = mgs + "tempuratue" + temp + "--";
          mgs = mgs + "voltage"+ voltage + "--"; 

        this.views.setTextViewText(R.id.textView1, mgs);
        ComponentName cn =
            new ComponentName(context, BatteryInfoActivity.class);
        AppWidgetManager.getInstance(context).updateAppWidget(cn, this.views);
    }
    super.onReceive(context, intent);
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

野却迷人 2024-12-24 16:12:29

您无法通过这种方式从另一个 BroadcastReceiver 注册一个 BroadcastReceiver。您无法在 onReceive() 中执行任何超出 onReceive() 本身末尾的操作。

You cannot register a BroadcastReceiver from another BroadcastReceiver this way. You cannot do much of anything in onReceive() that would live past the end of onReceive() itself.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文