codenameone中用于获取电池信息的本机接口
我遵循了Shai的本机接口教程,但我一直坚持在codenameone中暗示android本机代码。我需要在设备关闭后立即获取电池电量(百分比)。我已经在原生安卓系统中完成了这项工作,并且我已经在cn1中构建了应用程序,它也需要这个功能。下面我提供了代码。请帮我把它用在cn1上。谢谢 本机android代码:codenameone中用于获取电池信息的本机接口,codenameone,Codenameone,我遵循了Shai的本机接口教程,但我一直坚持在codenameone中暗示android本机代码。我需要在设备关闭后立即获取电池电量(百分比)。我已经在原生安卓系统中完成了这项工作,并且我已经在cn1中构建了应用程序,它也需要这个功能。下面我提供了代码。请帮我把它用在cn1上。谢谢 本机android代码: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstance
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//for mobile shutdown starts
IntentFilter filter = new IntentFilter(Intent.ACTION_SHUTDOWN);
BroadcastReceiver mReceiver = new ShutDownReceiver();
registerReceiver(mReceiver, filter);
//for mobile shutdown ends
}
//for mobile shutdown
public class ShutDownReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent)
{
if (intent.getAction().equals(Intent.ACTION_SHUTDOWN))
{
Log.e("shutdown","mobile shutdown");
Log.e("shutdown battery percentage",getBatteryPCT() + "");
}
}
}
public float getBatteryPCT()
{
IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
Intent batteryStatus = this.registerReceiver(null, ifilter);
int status = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
//Check if charging.
boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING || status == BatteryManager.BATTERY_STATUS_FULL;
//Check if charger plugged in.
int chargePlug = batteryStatus.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
//check if charging via USB.
boolean usbCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_USB;
//check if charging via AC.
boolean acCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_AC;
int level = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
int scale = batteryStatus.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
float batteryPct = level / (float)scale;
//Get the current battery percentage.
return batteryPct*100;
}
下面是我在cn1中尝试的内容,但构建失败
public class MyNativeImpl {
public boolean isSupported() {
return true;
}
public void getShutDownBattery() {
IntentFilter filter = new IntentFilter(Intent.ACTION_SHUTDOWN);
BroadcastReceiver mReceiver = new ShutDownReceiver();
registerReceiver(mReceiver, filter);
getBatteryPCT();
Log.e("battery status", getBatteryPCT() + "");
}
public class ShutDownReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Intent.ACTION_SHUTDOWN)) {
Log.e("shutdown", "mobile shutdown");
Log.e("shutdown battery percentage", getBatteryPCT() + "");
}
}
}
public float getBatteryPCT() {
IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
Intent batteryStatus = this.registerReceiver(null, ifilter);
int status = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING || status == BatteryManager.BATTERY_STATUS_FULL;
int chargePlug = batteryStatus.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
boolean usbCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_USB;
boolean acCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_AC;
int level = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
int scale = batteryStatus.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
float batteryPct = level / (float) scale;
return batteryPct * 100;
}
}
MyNative接口
public interface MyNative extends NativeInterface{
public void getShutDownBattery();
}
更新1:
你好,Shai,关于你的回答,我有几个问题: 1) 将ShutdownReceiver类移动到顶级类而不是内部类 为什么内部阶级在这里不起作用 2) 需要从registerReceiver的AndroidNativeUtil获取活动 我在你提供的链接中没有找到任何关于AndroidNativeUtil的内容。下面这行正确吗 导入com.codename1.impl.android.AndroidNativeUtil.registerReceiver(mrReceiver,过滤器) 3) 权限 我在这里需要什么权限?在本机android代码中,它不需要任何权限 更新代码:
public class MyNativeImpl{
public boolean isSupported() {
return true;
}
public void getShutDownBattery() {
IntentFilter filter = new IntentFilter(Intent.ACTION_SHUTDOWN);
BroadcastReceiver mReceiver = new ShutDownReceiver();
AndroidNativeUtil.registerReceiver(mReceiver, filter);
}
}
class ShutDownReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Intent.ACTION_SHUTDOWN)) {
Log.e("shutdown", "mobile shutdown");
Log.e("shutdown battery percentage", getBatteryPCT() + "");
}
}
public float getBatteryPCT() {
IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
Intent batteryStatus = this.registerReceiver(null, ifilter);
int status = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
//Check if charging.
boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING || status == BatteryManager.BATTERY_STATUS_FULL;
//Check if charger plugged in.
int chargePlug = batteryStatus.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
//check if charging via USB.
boolean usbCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_USB;
//check if charging via AC.
boolean acCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_AC;
int level = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
int scale = batteryStatus.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
float batteryPct = level / (float) scale;
//Get the current battery percentage.
return batteryPct * 100;
}
}
将
ShutdownReceiver
类移动到顶级类,而不是内部类registerReceiver
是一种活动方法,因此您需要像我一样从AndroidNativeUtil
获取活动
本机代码中缺少两件您需要做的事情,那就是权限。您需要向清单添加权限,您可以通过构建提示android.xpermissions
hint来完成
您还需要在代码中请求Android 6+权限,您可以通过
AndroidNativeUtil
调用checkForPermission
,如前所述。你好,Shai,我有几个问题Shai。请看一下问题中的更新。我建议提出一个新问题,因为这很难理解。1.Android可能会尝试动态加载一个类,所以这总是一个更好的做法。2. <代码>AndroidNativeUtil.getActivity().registerReceiver(MRReceiver,筛选器)代码>3。提到DEVICE\u POWER
我得到了构建错误。我在原生安卓系统中试用过,效果很好。我已经重复了这个问题