RN 调用 Android 闪光灯

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

        我的 SDK 版本33,安装的模拟器上并没有闪光灯这个功能(灰色),所以只能连接真机才能看得到效果,在模拟器上会报以下错:

        setTorchMode:2246: Camera "0" does not have a flash unit

        但是在真机上就是正常的~

目录

 一、创建手电筒 FlashLight 模块

二、注册手电筒 FlashLightPackage 模块

三、添加 FlashLightPackage 包

四、添加权限

五、将原生模块封装成 JavaScript 模块

六、调用方法


 一、创建手电筒 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
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值