以编程方式获得Android的电池级别和状态
时间:2020-02-23 14:29:26 来源:igfitidea点击:
有时当我们正在开发Android应用程序时,我们可能希望获得当前的击球水平或者状态。
例如:让我们说要规则,如果电池级别小于15%,请关闭Android中的所有后台进程。
在本教程中,我们将看到如何在Android中获取当前电池级别和状态。
我们必须知道五个Android电池状态。
- BatteryManager.Battery_Status_chnabling.
- batterymanager.battery_status_discharging.
- batterymanager.battery_status_full
- batterymanager.battery_status_unknown.
- BatteryManager.Battery_Status_Not_Charging.
步骤1 :
创建一个Android应用程序ProjectNamed"getBatteryInfoApp"。
第2步 :
更改RES - >布局 - > Activity_main.xml如下所示:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.theitroad.getbatteryinfoapp.MainActivity"> <TextView android:id="@+id/textViewBatteryStatus" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:text="Current Battery Status" android:textAppearance="?android:attr/textAppearanceLarge" <Button android:id="@+id/buttonBatteryStatus" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/textViewBatteryStatus" android:layout_centerHorizontal="true" android:layout_marginTop="16dp" android:text="Click here to Get battery Info" </RelativeLayout>
第3步:
更改src/main/packageName/mainActivity.java如下:
package com.theitroad.checkbatterystatusapp;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.BatteryManager;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import com.theitroad.checkbatterystatusapp.R;
public class MainActivity extends Activity {
TextView textview;
Button button;
IntentFilter intentfilter;
int deviceStatus;
String currentBatteryStatus="Battery Info";
int batteryLevel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button)findViewById(R.id.buttonBatteryStatus);
textview = (TextView)findViewById(R.id.textViewBatteryStatus);
intentfilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
MainActivity.this.registerReceiver(broadcastreceiver,intentfilter);
}
});
}
private BroadcastReceiver broadcastreceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
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){
textview.setText(currentBatteryStatus+" = Charging at "+batteryLevel+" %");
}
if(deviceStatus == BatteryManager.BATTERY_STATUS_DISCHARGING){
textview.setText(currentBatteryStatus+" = Discharging at "+batteryLevel+" %");
}
if (deviceStatus == BatteryManager.BATTERY_STATUS_FULL){
textview.setText(currentBatteryStatus+"= Battery Full at "+batteryLevel+" %");
}
if(deviceStatus == BatteryManager.BATTERY_STATUS_UNKNOWN){
textview.setText(currentBatteryStatus+" = Unknown at "+batteryLevel+" %");
}
if (deviceStatus == BatteryManager.BATTERY_STATUS_NOT_CHARGING){
textview.setText(currentBatteryStatus+" = Not Charging at "+batteryLevel+" %");
}
}
};
}
正如我们想要获得电池级别的信息,我们需要注册广播接收机和意图过滤器。
意图过滤器用于告诉本机电池应用程序,该应用程序正在侦听本机电池应用程序的更改。
让我们了解上面的代码:
Intent.Action_Battery_Changed:
如果我们看到了我们使用的代码.Action_battery_changeed以获取当前电池信息。
它是粘性广播,包含电池充电状态,级别和其他信息。
BatteryManager类包含所有常量字符串。
广播粘性广播一旦注册,将保持活跃。
MainActivity.this.registerReceiver(broadcastreceiver,intentfilter);
其中我们正在注册创建的Broadcastreceiver,主动筛选和意向滤波器正在侦听电池更改事件。

