我的 SDK 版本33,安装的模拟器上并没有闪光灯这个功能(灰色),所以只能连接真机才能看得到效果,在模拟器上会报以下错:
setTorchMode:2246: Camera "0" does not have a flash unit
但是在真机上就是正常的~
目录
一、创建手电筒 FlashLight 模块
将创建的 FlashLight.java 放置在 app/src/main/java/com/your-project-name 中
package com.invokingandroid;
import android.content.Context;
import android.hardware.Camera;
import android.hardware.camera2.CameraManager;
import android.os.Build;
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 FlashLight extends ReactContextBaseJavaModule{
private Camera camera;
private Boolean isLightOn = false;
private final ReactApplicationContext myReactContext;
public FlashLight(ReactApplicationContext reactContext) {
super(reactContext);
this.myReactContext = reactContext;
}
/**
* 继承ReactContextBaseJavaModule后重写的方法,返回一个模块名称,rn通过NativeModules可以调用此模块
*/
@Override
public String getName() {
return "FlashLight";
}
/**
* @param state 控制手电筒开关,true:打开,false:关闭
* @param successCallback 打开成功的回调
* @param failCallback 打开失败的回调
*/
@ReactMethod
public void switchState(Boolean state, Callback successCallback, Callback failCallback) {
if (isM()) {
CameraManager cameraManager = (CameraManager) this.myReactContext.getSystemService(Context.CAMERA_SERVICE);
try {
String camreaId = cameraManager.getCameraIdList()[0];
cameraManager.setTorchMode(camreaId, state);
successCallback.invoke(true);
}catch (Exception e) {
String errorMessage = e.getMessage();
failCallback.invo

本文介绍了如何在ReactNative应用中使用FlashLight模块控制手电筒,包括创建和注册模块、处理不同Android版本兼容、添加摄像头和闪光灯权限,以及在模拟器和真机上的操作差异。
最低0.47元/天 解锁文章
1185





