Giter Site home page Giter Site logo

androidserialport's Introduction

说明

android-serialport-api

Step 1. Add the JitPack repository to your build file

Add it in your root build.gradle at the end of repositories:

allprojects {
    repositories {
        ...
        maven { url 'https://jitpack.io' }
    }
}

Step 2. Add the dependency

dependencies {
        compile 'com.github.kongqw:AndroidSerialPort:1.0.1'
}

查看串口

SerialPortFinder serialPortFinder = new SerialPortFinder();
ArrayList<Device> devices = serialPortFinder.getDevices();

打开串口

初始化

mSerialPortManager = new SerialPortManager();

添加打开串口监听

mSerialPortManager.setOnOpenSerialPortListener(new OnOpenSerialPortListener() {
    @Override
    public void onSuccess(File device) {
        
    }

    @Override
    public void onFail(File device, Status status) {

    }
});

添加数据通信监听

mSerialPortManager.setOnSerialPortDataListener(new OnSerialPortDataListener() {
    @Override
    public void onDataReceived(byte[] bytes) {
        
    }

    @Override
    public void onDataSent(byte[] bytes) {

    }
});

打开串口

  • 参数1:串口
  • 参数2:波特率
  • 返回:串口打开是否成功
boolean openSerialPort = mSerialPortManager.openSerialPort(device.getFile(), 115200);

发送数据

  • 参数:发送数据 byte[]
  • 返回:发送是否成功
boolean sendBytes = mSerialPortManager.sendBytes(sendContentBytes);

关闭串口

mSerialPortManager.closeSerialPort();

PS:传输协议需自行封装

androidserialport's People

Contributors

kongqw avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

androidserialport's Issues

无法接收超过8字节的数据

为什么一发送超过8字节的数据,程序就会卡住挂掉?有人遇到过这个问题吗?我是在PC上添加一对虚拟串口,将其中一个串口挂载到模拟器上,让模拟器与串口助手进行通信的

找不到包名

import com.kongqw.serialportlibrary.listener.OnOpenSerialPortListener;
import com.kongqw.serialportlibrary.listener.OnSerialPortDataListener;
import com.kongqw.serialportlibrary.Device;
import com.kongqw.serialportlibrary.SerialPortManager;

多个串口设备如何进行设置

多个串口设备进行数据的发送接收,如何判断自动连接串口 不用把串口地址写死,同时区分那个串口发送过来的数据

通信参数

校验位:N,数据位:8,停止位:1,请问这些参数怎么设置呢?不设置的话会有影响吗?

关闭串口时闪退,closeSerialPort方法里面close这行报错

也是关闭串口的时候报错

  if (null != mFd) {
        close();
        mFd = null;
    }

这个close这里

567 2658-2691/? E/art: JNI DETECTED ERROR IN APPLICATION: fid == null
2020-05-22 11:39:11.567 2658-2691/? E/art: in call to GetObjectField
2020-05-22 11:39:11.567 2658-2691/? E/art: from void com.kongqw.serialportlibrary.SerialPort.close()
2020-05-22 11:39:11.567 2658-2691/? E/art: "Timer-2" prio=5 tid=18 Runnable
2020-05-22 11:39:11.567 2658-2691/? E/art: | group="main" sCount=0 dsCount=0 obj=0x12f2fca0 self=0xb16ac600
2020-05-22 11:39:11.567 2658-2691/? E/art: | sysTid=2691 nice=0 cgrp=default sched=0/0 handle=0xb2ba6920
2020-05-22 11:39:11.567 2658-2691/? E/art: | state=R schedstat=( 1653461 1101693 8 ) utm=0 stm=0 core=3 HZ=100
2020-05-22 11:39:11.567 2658-2691/? E/art: | stack=0xb2aa4000-0xb2aa6000 stackSize=1038KB
2020-05-22 11:39:11.567 2658-2691/? E/art: | held mutexes= "mutator lock"(shared held)
2020-05-22 11:39:11.567 2658-2691/? E/art: native: #00 pc 0034f0ad /system/lib/libart.so (_ZN3art15DumpNativeStackERNSt3__113basic_ostreamIcNS0_11char_traitsIcEEEEiP12BacktraceMapPKcPNS_9ArtMethodEPv+128)
2020-05-22 11:39:11.567 2658-2691/? E/art: native: #1 pc 0032f96d /system/lib/libart.so (_ZNK3art6Thread9DumpStackERNSt3__113basic_ostreamIcNS1_11char_traitsIcEEEEbP12BacktraceMap+632)
2020-05-22 11:39:11.567 2658-2691/? E/art: native: #2 pc 00238381 /system/lib/libart.so (ZN3art9JavaVMExt8JniAbortEPKcS2+1188)
2020-05-22 11:39:11.567 2658-2691/? E/art: native: #3 pc 002393db /system/lib/libart.so (ZN3art9JavaVMExt9JniAbortFEPKcS2_z+66)
2020-05-22 11:39:11.567 2658-2691/? E/art: native: #4 pc 0026fad3 /system/lib/libart.so (ZN3art3JNI14GetObjectFieldEP7_JNIEnvP8_jobjectP9_jfieldID+514)
2020-05-22 11:39:11.567 2658-2691/? E/art: native: #5 pc 00000b67 /system/priv-app/rktools/rktools.apk (???)
2020-05-22 11:39:11.567 2658-2691/? E/art: native: #6 pc 0003996f /data/dalvik-cache/arm/system@priv-app@rktools@[email protected] (Java_com_kongqw_serialportlibrary_SerialPort_close
+74)
2020-05-22 11:39:11.567 2658-2691/? E/art: at com.kongqw.serialportlibrary.SerialPort.close(Native method)
2020-05-22 11:39:11.567 2658-2691/? E/art: at com.intelligym.rk3288tools.device.b.a.a(SerialPortManager.java:107)
2020-05-22 11:39:11.567 2658-2691/? E/art: at

呃呃呃,大神那个关于粘包那块我看了GitHub上另一个大神的项目,稍微修改了一下SerialPortReadThread的代码,好像没啥问题了,您有空的话可以看看,我也不太明白啥原理

    while (!isInterrupted()) {
        try {
            if (null == mInputStream) {
                return;
            }

            int available = mInputStream.available();

            if(available > 0){
                Log.i(TAG, "run: ");
                int size = mInputStream.read(mReadBuffer);

                if (-1 == size || 0 >= size) {
                    return;
                }

                if(size > 0){
                    byte[] readBytes = new byte[size];
                    System.arraycopy(mReadBuffer, 0, readBytes, 0, size);
                    Log.i(TAG, "run: readBytes = " + new String(readBytes));
                    onDataReceived(readBytes);
                }
            }else {
                SystemClock.sleep(50);
            }

打开串口失败

PC上面 是可以的,Android设备上面提示波特率不对 是什么原因。

I/SerialPortManager: openSerialPort: 打开串口 /dev/ttyUSB0 波特率 8000000
E/serial_port: Invalid baudrate
W/System.err: java.lang.NullPointerException: fd == null
W/System.err: at java.io.FileInputStream.(FileInputStream.java:91)
W/System.err: at com.kongqw.serialportlibrary.SerialPortManager.openSerialPort(SerialPortManager.java:61)
W/System.err: at com.sendinfo.rtcw.MainActivity$onCreate$3.onClick(MainActivity.kt:67)
W/System.err: at android.view.View.performClick(View.java:4785)
W/System.err: at android.view.View$PerformClick.run(View.java:19888)
W/System.err: at android.os.Handler.handleCallback(Handler.java:739)
W/System.err: at android.os.Handler.dispatchMessage(Handler.java:95)
W/System.err: at android.os.Looper.loop(Looper.java:135)
W/System.err: at android.app.ActivityThread.main(ActivityThread.java:5258)
W/System.err: at java.lang.reflect.Method.invoke(Native Method)
W/System.err: at java.lang.reflect.Method.invoke(Method.java:372)
W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:940)
W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:735)

混淆后,关闭串口闪退

at com.kongqw.serialportlibrary.SerialPort.close(Native method)
at com.kongqw.serialportlibrary.SerialPortManager.a(SerialPortManager.java:87)
at com.ubains.aide.VoiceActivity.onDestroy(VoiceActivity.java:883)
at android.app.Activity.performDestroy(Activity.java:6437)
at android.app.Instrumentation.callActivityOnDestroy(Instrumentation.java:1142) at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3818)
at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:3849)
at android.app.ActivityThread.-wrap5(ActivityThread.java:-1)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1398)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke!(Native method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:772)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:662)

为什么使用了C文件还要使用so库?可以不使用so库吗?

你好,下面代码有点不太明白,第一行应该是直接使用了SerialPort.c文件把?为什么第二行还要再次使用so库呢?第二行的代码运行会出错啊。
java System.loadLibrary("SerialPort"); System.loadLibrary("serial_port");
错误如下:
java java.lang.UnsatisfiedLinkError: dlopen failed: /data/app/qingwei.kong.kqwserialportdemo-1/lib/arm/libserial_port.so: has text relocations at java.lang.Runtime.loadLibrary(Runtime.java:372) at java.lang.System.loadLibrary(System.java:1076) at qingwei.kong.serialportlibrary.SerialPort.<clinit>(SerialPort.java:86) at qingwei.kong.kqwserialportdemo.MyApplication.getSerialPort(MyApplication.java:31) at qingwei.kong.kqwserialportdemo.SerialPortActivity.onCreate(SerialPortActivity.java:101) at qingwei.kong.kqwserialportdemo.MainActivity.onCreate(MainActivity.java:18) at android.app.Activity.performCreate(Activity.java:6303) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1108) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2376) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2483) at android.app.ActivityThread.access$900(ActivityThread.java:153) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1349) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5441) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:738) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:628)

注释掉System.loadLibrary("serial_port");后可以正常运行,但是在调用open方法的时候返回的是null值,但是串口和比特率都是对的,请问这是什么原因导致的呢?

android 7.0 手机没有可用串口

06-11 23:28:03.046 27226-27226/com.kongqw.serialport I/SerialPortFinder: SerialPortFinder: file.canRead() = true
06-11 23:28:03.047 27226-27226/com.kongqw.serialport D/SerialPortFinder: Found new driver rfcomm on /dev/rfcomm
06-11 23:28:03.047 27226-27226/com.kongqw.serialport D/SerialPortFinder: Found new driver g_serial on /dev/ttyGS
06-11 23:28:03.048 27226-27226/com.kongqw.serialport D/SerialPortFinder: Found new driver usbserial on /dev/ttyUSB
06-11 23:28:03.048 27226-27226/com.kongqw.serialport D/SerialPortFinder: Found new driver acm on /dev/ttyACM
06-11 23:28:03.048 27226-27226/com.kongqw.serialport D/SerialPortFinder: Found new driver smd_tty_driver on /dev/smd
06-11 23:28:03.048 27226-27226/com.kongqw.serialport I/Driver: getDevices: /dev 没有读取权限
06-11 23:28:03.049 27226-27226/com.kongqw.serialport I/Driver: getDevices: /dev 没有读取权限
06-11 23:28:03.049 27226-27226/com.kongqw.serialport I/Driver: getDevices: /dev 没有读取权限
06-11 23:28:03.049 27226-27226/com.kongqw.serialport I/Driver: getDevices: /dev 没有读取权限
06-11 23:28:03.049 27226-27226/com.kongqw.serialport I/Driver: getDevices: /dev 没有读取权限

Could not resolve com.github.kongqw:AndroidSerialPort:1.0.1.

Hi @kongqw,你好

添加了maven

allprojects { repositories { google() jcenter() maven { url "https://jitpack.io" } } }

还是报错:

ERROR: Unable to resolve dependency for ':app@debugAndroidTest/compileClasspath': Could not resolve com.github.kongqw:AndroidSerialPort:1.0.1.
Show Details

jitpack上是不是删除?

项目运行总是报错

java.lang.NegativeArraySizeException: -1
at com.kongqw.serialportlibrary.thread.SerialPortReadThread.run(SerialPortReadThread.java:39)

项目运行报错啊

08-17 17:46:21.448 11850-11850/qingwei.kong.kqwserialportdemo E/AndroidRuntime: FATAL EXCEPTION: main
Process: qingwei.kong.kqwserialportdemo, PID: 11850
java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/qingwei.kong.kqwserialportdemo-1/base.apk", zip file "/data/app/qingwei.kong.kqwserialportdemo-1/split_lib_dependencies_apk.apk", zip file "/data/app/qingwei.kong.kqwserialportdemo-1/split_lib_slice_0_apk.apk", zip file "/data/app/qingwei.kong.kqwserialportdemo-1/split_lib_slice_1_apk.apk", zip file "/data/app/qingwei.kong.kqwserialportdemo-1/split_lib_slice_2_apk.apk", zip file "/data/app/qingwei.kong.kqwserialportdemo-1/split_lib_slice_3_apk.apk", zip file "/data/app/qingwei.kong.kqwserialportdemo-1/split_lib_slice_4_apk.apk", zip file "/data/app/qingwei.kong.kqwserialportdemo-1/split_lib_slice_5_apk.apk", zip file "/data/app/qingwei.kong.kqwserialportdemo-1/split_lib_slice_6_apk.apk", zip file "/data/app/qingwei.kong.kqwserialportdemo-1/split_lib_slice_7_apk.apk", zip file "/data/app/qingwei.kong.kqwserialportdemo-1/split_lib_slice_8_apk.apk", zip file "/data/app/qingwei.kong.kqwserialportdemo-1/split_lib_slice_9_apk.apk"],nativeLibraryDirectories=[/data/app/qingwei.kong.kqwserialportdemo-1/lib/arm64, /data/app/qingwei.kong.kqwserialportdemo-1/base.apk!/lib/arm64-v8a, /data/app/qingwei.kong.kqwserialportdemo-1/split_lib_dependencies_apk.apk!/lib/arm64-v8a, /data/app/qingwei.kong.kqwserialportdemo-1/split_lib_slice_0_apk.apk!/lib/arm64-v8a, /data/app/qingwei.kong.kqwserialportdemo-1/split_lib_slice_1_apk.apk!/lib/arm64-v8a, /data/app/qingwei.kong.kqwserialportdemo-1/split_lib_slice_2_apk.apk!/lib/arm64-v8a, /data/app/qingwei.kong.kqwserialportdemo-1/split_lib_slice_3_apk.apk!/lib/arm64-v8a, /data/app/qingwei.kong.kqwserialportdemo-1/split_lib_slice_4_apk.apk!/lib/arm64-v8a, /data/app/qingwei.kong.kqwserialportdemo-1/split_lib_slice_5_apk.apk!/lib/arm64-v8a, /data/app/qingwei.kong.kqwserialportdemo-1/split_lib_slice_6_apk.apk!/lib/arm64-v8a, /data/app/qingwei.kong.kqwserialportdemo-1/split_lib_slice_7_apk.apk!/lib/arm64-v8a, /data/app/qingwei.kong.kqwserialportdemo-1/split_lib_slice_8_apk.apk!/lib/arm64-v8a, /data/app/qingwei.kong.kqwserialportdemo-1/split_lib_slice_9_apk.apk!/lib/arm64-v8a, /system/lib64, /vendor/lib64]]] couldn't find "libserial_port.so"
at java.lang.Runtime.loadLibrary0(Runtime.java:972)
at java.lang.System.loadLibrary(System.java:1567)
at qingwei.kong.serialportlibrary.SerialPort.(SerialPort.java:86)
at qingwei.kong.kqwserialportdemo.MyApplication.getSerialPort(MyApplication.java:25)
at qingwei.kong.kqwserialportdemo.SerialPortActivity.onCreate(SerialPortActivity.java:101)
at qingwei.kong.kqwserialportdemo.MainActivity.onCreate(MainActivity.java:16)
at android.app.Activity.performCreate(Activity.java:6912)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1126)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2870)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2978)
at android.app.ActivityThread.-wrap14(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1628)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6646)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1468)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358)

UnsatisfiedLinkError

错误信息:java.lang.UnsatisfiedLinkError: Couldn't load SerialPort from loader dalvik.system.PathClassLoader[DexPathList[[zip file "/system/app/video.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]]: findLibrary returned null

错误代码:mSerialPortManager = new SerialPortManager();

openSerialPort: 没有读写权限

System.err: java.io.IOException: Cannot run program "/system/bin/su": error=2, No such file or directory

您好,提示这个错误怎么解决呢

添加依赖后编译不通过

Manifest merger failed with multiple errors, see logs,一直报这个问题,试了大众化的解决方法都无果

Could not find method implementation() for arguments [com.github.kongqw:AndroidSerialPort:1.0.1]...

报错信息

Build file 'D:\myapps\AndroidSerialPort\build.gradle' line: 25

A problem occurred evaluating root project 'AndroidSerialPort'.
> Could not find method implementation() for arguments [com.github.kongqw:AndroidSerialPort:1.0.1] on object of type org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler.

build.gradle

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:+'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        google()
        jcenter()
        maven { url 'https://jitpack.io' }
    }
}

dependencies {
    implementation 'com.github.kongqw:AndroidSerialPort:1.0.1'
}


task clean(type: Delete) {
    delete rootProject.buildDir
}

gradle-wrapper.properties

#Wed Dec 13 14:32:36 CST 2017
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-all.zip

不可执行

不可执行是啥意思,我设备的串口都是不可执行的

Android手机获取不到String[] mDevices = serialPortFinder.getAllDevicesPath();,mDevices大小为0

java.io.FileNotFoundException: /proc/tty/drivers: open failed: EACCES (Permission denied)
W/System.err: at libcore.io.IoBridge.open(IoBridge.java:496)
W/System.err: at java.io.FileInputStream.(FileInputStream.java:159)
W/System.err: at java.io.FileInputStream.(FileInputStream.java:115)
W/System.err: at java.io.FileReader.(FileReader.java:58)
W/System.err: at android.serialport.SerialPortFinder.getDrivers(SerialPortFinder.java:71)

请问一下大神

数据接收的时候接收字符串数据正常,跑着跑着就乱码了。不知道什么原因,请问一下大神有思路吗
wechatimg4728

区分哪个串口发送

如果同时打开连个串口,在发送和接收的时候怎么区分是那个串口呢?谢了

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.