开发一个android的串口访问的原生uni-app插件 不root也可以实现

发布于 1周前 作者 yibo5220 来自 Uni-App

开发一个android的串口访问的原生uni-app插件 不root也可以实现

主要用于链接串口打印机,电子秤,收钱箱等
会做的可留下联系方式,开发完成你可以上传平台收费,不限制源码使用

3 回复

1196097915 加我qq, 这个插件我能做。


找到人做了吗?加我QQ 1804945430,价格好商量

开发一个无需root权限即可访问Android串口的原生uni-app插件,需要借助Android的串口通信API,并结合uni-app的自定义原生插件机制来实现。以下是一个简要的代码案例,展示如何在Android端实现串口访问,并在uni-app中调用。

Android端实现串口访问

  1. 添加串口通信依赖

    build.gradle文件中添加串口通信库依赖,例如android-serialport-api

    implementation 'com.github.mik3y:usb-serial-for-android:3.2.0'
    
  2. 创建串口管理类

    创建一个Java类(如SerialPortManager)来管理串口通信:

    import android.hardware.usb.UsbManager;
    import com.hoho.android.usbserial.driver.UsbSerialDriver;
    import com.hoho.android.usbserial.driver.UsbSerialPort;
    import com.hoho.android.usbserial.driver.UsbSerialProber;
    import java.io.IOException;
    
    public class SerialPortManager {
        private UsbSerialPort serialPort;
    
        public SerialPortManager(UsbManager usbManager, String deviceName) throws IOException {
            UsbSerialProber prober = new UsbSerialProber();
            UsbSerialDriver driver = prober.findAllDrivers(usbManager).get(0);
            serialPort = driver.getPorts().get(0);
            serialPort.open(usbManager.openDevice(driver.getDevice()));
            serialPort.setParameters(9600, 8, UsbSerialPort.STOPBITS_1, UsbSerialPort.PARITY_NONE);
        }
    
        public void write(byte[] data) throws IOException {
            serialPort.write(data, 1000);
        }
    
        public int read(byte[] buffer) throws IOException {
            return serialPort.read(buffer, 1000);
        }
    
        public void close() throws IOException {
            serialPort.close();
        }
    }
    

uni-app端调用原生插件

  1. 创建uni-app原生插件

    在uni-app项目中,创建一个原生插件目录,并添加manifest.jsonAndroidManifest.xml配置文件。

  2. 实现插件接口

    src/android/java/your/package/name目录下创建Java类实现插件接口,如SerialPortPlugin

    import io.dcloud.feature.uniapp.bridge.UniJSCallback;
    import io.dcloud.feature.uniapp.common.UniModule;
    
    public class SerialPortPlugin extends UniModule {
        // 实现插件方法,例如初始化串口、读写数据等
        @JSMethod(uiThread = false)
        public void initSerialPort(String deviceName, UniJSCallback callback) {
            try {
                SerialPortManager manager = new SerialPortManager(getUsbManager(), deviceName);
                callback.invokeAndKeepAlive(manager); // 保持manager对象不被GC
            } catch (Exception e) {
                callback.invokeAndKeepAlive(e.getMessage());
            }
        }
    
        private UsbManager getUsbManager() {
            return (UsbManager) getContext().getSystemService(Context.USB_SERVICE);
        }
    }
    
  3. 在uni-app中调用插件

    在uni-app的JavaScript代码中,通过uni.requireNativePlugin调用原生插件:

    const serialPortPlugin = uni.requireNativePlugin('SerialPortPlugin');
    serialPortPlugin.initSerialPort('deviceName', (res) => {
        console.log(res);
    });
    

注意,以上代码仅为示例,实际开发中需根据具体需求完善错误处理、资源管理等功能。同时,确保AndroidManifest.xml中已声明必要的USB权限。

回到顶部