ich meine eigene IOS und Android Klassen schrieb den Batteriestatus zu erhalten. Hier sind die Schritte, wenn eine interessiert daran,
Für IOS,
- Öffnen Sie das iOS-Projekt in XCode
- erstellen 2 neue Dateien rufen BatteryStatus.h und BatteryStatus.m
BatteryStatus.h Datei sollte
#import <Foundation/Foundation.h>
#import <React/RCTBridgeModule.h>
#import <React/RCTEventEmitter.h>
@interface BatteryStatus : RCTEventEmitter <RCTBridgeModule>
@end
BatteryStatus.m Datei enthalten Code folgende
#import "BatteryStatus.h"
@implementation BatteryStatus
RCT_EXPORT_MODULE(BatteryStatus)
- (instancetype)init
{
if ((self = [super init])) {
[[UIDevice currentDevice] setBatteryMonitoringEnabled:YES];
}
return self;
}
RCT_EXPORT_METHOD(hide) {
}
RCT_EXPORT_METHOD(updateBatteryLevel:(RCTResponseSenderBlock)callback)
{
callback(@[[self getBatteryStatus]]);
}
//manually get battery status by calling following method
-(NSDictionary*)getBatteryStatus
{
float batteryLevel = [UIDevice currentDevice].batteryLevel;
NSObject* currentLevel = nil;
currentLevel = [NSNumber numberWithFloat:(batteryLevel * 100)];
NSMutableDictionary* batteryData = [NSMutableDictionary dictionaryWithCapacity:2];
[batteryData setObject:currentLevel forKey:@"level"];
return batteryData;
}
@end
sollte
In Ihrem reagiert native App, in Ihrer js Datei hinzufügen Code folgende
import { NativeModules } from 'react-native';
constructor(props) {
super(props);
this.state = {
batteryLevel: null,
};
}
componentDidMount() {
NativeModules.BatteryStatus.updateBatteryLevel((info) => {
//console.log(info.level)
const level = Math.ceil(info.level);
this.setState({ batteryLevel: level});
});
}
Für IOS obigen Code ist für mich zu arbeiten erhalten den Batteriestand
Für Android,
- Öffnen Sie das Android-Projekt in Android Studio
- Erstellen Sie eine Gruppe anrufen Battery und schließen 2 genannten Dateien, BatteryStatusModule.java und BatteryStatusPackage.java
BatteryStatusModule.java Sollte enthalten Code folgende
package com.yourproject.BatteryStatus;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.BatteryManager;
import com.facebook.react.bridge.Callback;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
public class BatteryStatusModule extends ReactContextBaseJavaModule {
public BatteryStatusModule(ReactApplicationContext reactContext) {
super(reactContext);
}
@Override
public String getName() {
return "BatteryStatus";
}
@ReactMethod
public void getBatteryStatus(Callback successCallback) {
Intent batteryIntent = getCurrentActivity().registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
int level = batteryIntent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
int scale = batteryIntent.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
if(level == -1 || scale == -1) {
level = 0;
}
//System.out.print("battery level");
//System.out.print(level);
successCallback.invoke(null ,((float)level/(float)scale) * 100.0f);
}
}
BatteryStatusPackage.java sollte folgenden Code enthalten
package com.yourproject.BatteryStatus;
import com.facebook.react.ReactPackage;
import com.facebook.react.bridge.JavaScriptModule;
import com.facebook.react.bridge.NativeModule;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.uimanager.ViewManager;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class BatteryStatusPackage implements ReactPackage {
@Override
public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {
List<NativeModule> modules = new ArrayList<>();
modules.add(new BatteryStatusModule(reactContext));
return modules;
}
@Override
public List<Class<? extends JavaScriptModule>> createJSModules() {
return Collections.emptyList();
}
@Override
public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
return Collections.emptyList();
}
}
Inside Hauptanwendung.java umfassen folgende Code
@Override
protected List<ReactPackage> getPackages() {
return Arrays.<ReactPackage>asList(
new MainReactPackage(),
new MapsPackage(),
new BatteryStatusPackage()
);
}
In Ihrem reagieren native App, fügen Sie in Ihrem js Datei Code folgende
import { NativeModules } from 'react-native';
constructor(props) {
super(props);
this.state = {
batteryLevel: null
};
}
getBatteryLevel = (callback) => {
NativeModules.BatteryStatus.getBatteryStatus(callback);
}
6.Call es so etwas wie dieses:
componentDidMount() {
this.getBatteryLevel((batteryLevel) => {
console.log(batteryLevel);
});
}
Für Android oben Code funktioniert für mich, um den Akku-Level
zu bekommen
Hoffe, dies wird jemand helfen, Batterie-Level für IOS und ANDROID zu bekommen
Hallo, ich habe die gleiche Situation gerade jetzt. Hast du es gelöst und eine funktionierende Lösung gefunden? Danke für Ihre Hilfe. – natterstefan
@StefanN. Ich habe eine Antwort auf meine Frage geschrieben –
Ah habe es, das muss ^^ verpasst haben. Eigentlich sieht es so aus, als ob deine Antwort mir helfen würde, herauszufinden, wie man nativen Code mit dem React-Part verbindet und wie man den Akkustand bekommt. Vielen Dank. – natterstefan