当前位置 博文首页 > 文章内容

    APK:SerialPortFinder,显示串口列表

    作者: 栏目:未分类 时间:2020-07-06 14:04:14

    本站于2023年9月4日。收到“大连君*****咨询有限公司”通知
    说我们IIS7站长博客,有一篇博文用了他们的图片。
    要求我们给他们一张图片6000元。要不然法院告我们

    为避免不必要的麻烦,IIS7站长博客,全站内容图片下架、并积极应诉
    博文内容全部不再显示,请需要相关资讯的站长朋友到必应搜索。谢谢!

    另祝:版权碰瓷诈骗团伙,早日弃暗投明。

    相关新闻:借版权之名、行诈骗之实,周某因犯诈骗罪被判处有期徒刑十一年六个月

    叹!百花齐放的时代,渐行渐远!



    百分之50 https://blog.csdn.net/bfz_50/article/details/96483242

     

    MainActivity.java

    package com.gatsby.serialport;
    
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.BaseAdapter;
    import android.widget.ListView;
    import android.widget.TextView;
    import android.widget.Toast;
    
    import androidx.appcompat.app.AppCompatActivity;
    
    import java.io.File;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.util.ArrayList;
    import java.util.List;
    
    import android_serialport_api.SerialPort;
    import android_serialport_api.SerialPortFinder;
    
    public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    
        SerialPortFinder mSerialPortFinder;
    
        final String[] devices = new SerialPortFinder().getAllDevicesPath();
        final List<String> data = new ArrayList<>();
    
    
        protected SerialPort mSerialPort;
        protected InputStream mInputStream;
        protected OutputStream mOutputStream;
    
        private String prot = "/dev/ttyS3";
        private int baudrate = 9600;
        //数据
        private static long i = 0;
    
        private Toast mToast;
    
        private Thread receiveThread;
        private Thread sendThread;
    
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            ListView listView = findViewById(R.id.id_list);
            listView.setAdapter(bA);
    
            getSerialPortPression();
    
            initLayout();
    
            mToast = Toast.makeText(this, "", Toast.LENGTH_SHORT);
    
        }
    
        private void initLayout() {
            findViewById(R.id.btn_open).setOnClickListener(MainActivity.this);
            findViewById(R.id.btn_send).setOnClickListener(MainActivity.this);
            findViewById(R.id.btn_close).setOnClickListener(MainActivity.this);
        }
    
        @Override
        public void onClick(View v) {
            switch (v.getId()) {
                case R.id.btn_open:
                    showTip("btn_open");
    
                    // 打开
                    try {
                        mSerialPort = new SerialPort(new File(prot), baudrate,8,1,'N');
                        mInputStream = mSerialPort.getInputStream();
                        mOutputStream = mSerialPort.getOutputStream();
                        receiveThread();
                    } catch (SecurityException e) {
                        e.printStackTrace();
                    } catch (IOException e) {
                        //打开失败
                        Log.e("gatsby", "open serialport default");
                        e.printStackTrace();
                    }
    
                    break;
                case R.id.btn_send:
                    showTip("btn_send");
                    // 发送
                    sendThread = new Thread() {
                        @Override
                        public void run() {
                            while (true) {
                                try {
                                    i++;
                                    mOutputStream.write((String.valueOf(i)).getBytes());
                                    //发送成功
                                    Log.i("gatsby", "send serialport sucess!" + i);
                                    Thread.sleep(50);
                                } catch (Exception e) {
                                    //发送失败
                                    Log.i("gatsby", "send serialport default!");
                                    e.printStackTrace();
                                }
                            }
    
                        }
                    };
                    sendThread.start();
    
                    break;
                case R.id.btn_close:
                    showTip("btn_close");
    
                    closeSerialPort();
    
                    break;
                default:
                    break;
            }
        }
    
        private void receiveThread() {
            // 接收
            receiveThread = new Thread() {
                @Override
                public void run() {
                    while (true) {
                        int size;
                        try {
                            byte[] buffer = new byte[512];
                            if (mInputStream == null)
                                return;
                            size = mInputStream.read(buffer);
                            if (size > 0) {
                                String recinfo = new String(buffer, 0,
                                        size);
                                Log.i("gatsby", "recevier serialport info :" + recinfo);
    //                            sb = recinfo;
    //                            handler.sendEmptyMessage(1);
                            }
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                }
            };//111
            receiveThread.start();
        }
    
        /**
         * 关闭串口
         */
        public void closeSerialPort() {
    
            if (mSerialPort != null) {
                mSerialPort.close();
            }
            if (mInputStream != null) {
                try {
                    mInputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (mOutputStream != null) {
                try {
                    mOutputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
    
        }
    
        private void showTip(final String str) {
            mToast.setText(str);
            mToast.show();
        }
    
        public void getSerialPortPression() {
            if (devices.length > 0) {
                for (String device : devices) {
    
                    File file = new File(device);
                    String path = file.getAbsolutePath();
    
                    StringBuilder permission = new StringBuilder();
                    permission.append("[");
                    permission.append(file.canRead() ? " 可读" : "不可读");
                    permission.append(file.canWrite() ? "  可写 " : " 不可写 ");
                    permission.append(file.canExecute() ? "可执行" : "不可执行");
                    permission.append("]");
    
                    String msg = "(" + path + ")" + " 权限:" + permission;
                    data.add(msg);
                }
            }
        }
    
        BaseAdapter bA = new BaseAdapter() {
            @Override
            public int getCount() {
                return devices.length;
            }
    
            @Override
            public Object getItem(int position) {
                return devices[position];
            }
    
            @Override
            public long getItemId(int position) {
                return position;
            }
    
            @Override
            public View getView(int position, View convertView, ViewGroup parent) {
                if (convertView == null)
                    convertView = getLayoutInflater().inflate(R.layout.item_layout, null);
                TextView textView = convertView.findViewById(R.id.id_item_text);
                textView.setText(data.get(position));
    
                return convertView;
            }
        };
    }