【问题标题】:Get Battery Level on App Launch [duplicate]在应用启动时获取电池电量 [重复]
【发布时间】:2018-05-07 15:04:19
【问题描述】:

在我的应用中,我使用 "ACTION_BATTERY_CHANGED" Intent 来查找 Android 设备的电池电量。

** 问题:**

考虑如果设备的电池电量为 1-20,我需要在我的应用程序中显示低电量图标。我无法立即显示

我已为 ACTION_BATTERY_CHANGED Intent 注册应用程序启动本身的广播接收器。由于这是系统范围的公告,我无法立即获得。

我可以在应用启动时使用 SendBroadcast() 为 ACTION_BATTERY_CHANGED Intent 触发广播吗?

这是正确的行为吗?

【问题讨论】:

  • @VladyslavMatviienko,我的问题是在应用启动时获取电池电量
  • 我知道,我在问题中读到了。但看起来你没有检查我链接的问题。请做。
  • @kavie 所以?在您的启动活动中使用获取电池百分比的方法?

标签: android batterylevel


【解决方案1】:

获取电池电量的最佳方法是

           String currentBatteryStatus = "Battery Percentage";
            int deviceStatus = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
            int level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
            int scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
            int batteryLevel = (int) (((float) level / (float) scale) * 100.0f);

            if (deviceStatus == BatteryManager.BATTERY_STATUS_CHARGING) {
                currentBatteryStatus = currentBatteryStatus + " Charging : " + batteryLevel + " %";
            }

            if (deviceStatus == BatteryManager.BATTERY_STATUS_DISCHARGING) {
                currentBatteryStatus = currentBatteryStatus + " Discharging : " + batteryLevel + " %";
            }

            if (deviceStatus == BatteryManager.BATTERY_STATUS_FULL) {
                currentBatteryStatus = currentBatteryStatus + " Battery Full : " + batteryLevel + " %";
            }

            if (deviceStatus == BatteryManager.BATTERY_STATUS_UNKNOWN) {
                currentBatteryStatus = currentBatteryStatus + " Unknown : " + batteryLevel + " %";
            }

            if (deviceStatus == BatteryManager.BATTERY_STATUS_NOT_CHARGING) {
                currentBatteryStatus = currentBatteryStatus + " Not Charging : " + batteryLevel + " %";
            }

有什么问题可以问我

【讨论】:

  • 从哪里得到intent
  • 从接收,如果你需要完整的代码,那么我会编辑我的代码
  • 问题是关于如何在应用程序启动时获取此信息,而不是在电池状态发生变化时。请确保您在回答之前阅读并理解问题
  • 是的,我们可以使用相同的代码来启动应用程序,通过应用程序类触发此代码
  • 是的,我已经在应用程序类的 onCreate() 中注册并在 onTerminate() 中取消注册
【解决方案2】:

ACTION_BATTERY_CHANGED 是粘性意图,一旦您为此广播注册接收器,您应该会获得它的最后修改值。 您的广播设置似乎有问题。你可以这样做:

    BroadcastReceiver powerReceiver = new BroadcastReceiver() {
                @Override
                public void onReceive(Context context, Intent intent) {
                    int level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0);
                    Logger.e("Power", "Battrery NOW " + String.valueOf(level) + "%");
                    //Your logic here

                }
            };

            @Override
            public void onResume() {
                super.onResume();
                getBaseActivity().registerReceiver(powerReceiver,
                        new IntentFilter(Intent.ACTION_BATTERY_CHANGED));    
            }

            @Override
            public void onPause() {
                super.onPause();
                getBaseActivity().unregisterReceiver(powerReceiver);
            }

【讨论】:

  • 请确保您在回答之前阅读了问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-02
相关资源
最近更新 更多