我已經遵循了Shai的本地接口教程,但我堅持暗示代碼中的android本機代碼。一旦設備關閉,我需要獲取電池電量(百分比)。我已經在原生android中完成了它,並且我在cn1中構建了也需要該功能的應用程序。下面我提供了代碼。請幫助我在cn1中應用它。三江源codenameone中用於獲取電池信息的本地接口
原生Android代碼:
@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:
夏嘉曦你好,我有一對夫婦的關於你的回答下面的問題:
1)將ShutdownReceiver類頂級類,而不是一個內部類
爲什麼這裏沒有內部類的工作?
2)需要從AndroidNativeUtil的活動registerReceiver
我沒發現什麼生根粉AndroidNativeUtil FRM的你給的鏈接。以下行是否正確?
import com.codename1.impl.android.AndroidNativeUtil.registerReceiver(mReceiver,filter);
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;
}
}
哈囉你好,我有幾個問題shai。請看看上面的更新問題。 – beck
我建議提交一個新的問題,因爲這很難遵循。 1. Android可能會嘗試動態加載一個類,所以它總是一個更好的習慣。 2. https://www.codenameone.com/manual/advanced-topics.html'AndroidNativeUtil.getActivity()。registerReceiver(mReceiver,filter);'3. https://stackoverflow.com/questions/14133077/android-操作關機廣播不工作提及'DEVICE_POWER' –
我得到構建錯誤。我在原生android中試過它,它工作。我複製了問題 https:// stackoverflow。COM /問題/ 45520411 /原生接口功能於codenameone換得到電池 - 信息重複 – beck