packagecom.gatsby.serialport;importandroid.os.Bundle;importandroid.util.Log;importandroid.view.View;importandroid.view.ViewGroup;importandroid.widget.BaseAdapter;importandroid.widget.ListView;importandroid.widget.TextView;importandroid.widget.Toast;importandroidx.appcompat.app.AppCompatActivity;importjava.io.File;importjava.io.IOException;importjava.io.InputStream;importjava.io.OutputStream;importjava.util.ArrayList;importjava.util.List;importandroid_serialport_api.SerialPort;importandroid_serialport_api.SerialPortFinder;public class MainActivity extends AppCompatActivity implementsView.OnClickListener {

SerialPortFinder mSerialPortFinder;final String[] devices = newSerialPortFinder().getAllDevicesPath();final List data = new ArrayList<>();protectedSerialPort mSerialPort;protectedInputStream mInputStream;protectedOutputStream mOutputStream;private String prot = "/dev/ttyS3";private int baudrate = 9600;//数据

private static long i = 0;privateToast mToast;privateThread receiveThread;privateThread sendThread;

@Overrideprotected voidonCreate(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 voidinitLayout() {

findViewById(R.id.btn_open).setOnClickListener(MainActivity.this);

findViewById(R.id.btn_send).setOnClickListener(MainActivity.this);

findViewById(R.id.btn_close).setOnClickListener(MainActivity.this);

}

@Overridepublic voidonClick(View v) {switch(v.getId()) {caseR.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;caseR.id.btn_send:

showTip("btn_send");//发送

sendThread = newThread() {

@Overridepublic voidrun() {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;caseR.id.btn_close:

showTip("btn_close");

closeSerialPort();break;default:break;

}

}private voidreceiveThread() {//接收

receiveThread = newThread() {

@Overridepublic voidrun() {while (true) {intsize;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 voidcloseSerialPort() {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(finalString str) {

mToast.setText(str);

mToast.show();

}public voidgetSerialPortPression() {if (devices.length > 0) {for(String device : devices) {

File file= newFile(device);

String path=file.getAbsolutePath();

StringBuilder permission= newStringBuilder();

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= newBaseAdapter() {

@Overridepublic intgetCount() {returndevices.length;

}

@Overridepublic Object getItem(intposition) {returndevices[position];

}

@Overridepublic long getItemId(intposition) {returnposition;

}

@Overridepublic View getView(intposition, 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));returnconvertView;

}

};

}

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐