实例介绍
【实例截图】
【核心代码】
package com.bjw.ComAssistant; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.security.InvalidParameterException; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; import java.util.Queue; import com.bjw.bean.AssistBean; import com.bjw.bean.ComBean; import android.app.Activity; import android.content.Context; import android.content.SharedPreferences; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.content.res.Configuration; import android.os.Bundle; import android.text.InputType; import android.text.method.KeyListener; import android.text.method.NumberKeyListener; import android.text.method.TextKeyListener; import android.text.method.TextKeyListener.Capitalize; import android.util.Base64; import android.view.KeyEvent; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.EditText; import android.widget.RadioButton; import android.widget.Spinner; import android.widget.TextView; import android.widget.Toast; import android.widget.ToggleButton; import android_serialport_api.SerialPortFinder; /** * serialport api和jni取自http://code.google.com/p/android-serialport-api/ * @author * 串口助手,支持4串口同时读写 * 程序载入时自动搜索串口设备 * n,8,1,没得选 */ public class ComAssistantActivity extends Activity { EditText editTextRecDisp,editTextLines,editTextCOMA,editTextCOMB,editTextCOMC,editTextCOMD; EditText editTextTimeCOMA,editTextTimeCOMB,editTextTimeCOMC,editTextTimeCOMD; CheckBox checkBoxAutoClear,checkBoxAutoCOMA,checkBoxAutoCOMB,checkBoxAutoCOMC,checkBoxAutoCOMD; Button ButtonClear,ButtonSendCOMA,ButtonSendCOMB,ButtonSendCOMC,ButtonSendCOMD; ToggleButton toggleButtonCOMA,toggleButtonCOMB,toggleButtonCOMC,toggleButtonCOMD; Spinner SpinnerCOMA,SpinnerCOMB,SpinnerCOMC,SpinnerCOMD; Spinner SpinnerBaudRateCOMA,SpinnerBaudRateCOMB,SpinnerBaudRateCOMC,SpinnerBaudRateCOMD; RadioButton radioButtonTxt,radioButtonHex; SerialControl ComA,ComB,ComC,ComD;//4个串口 DispQueueThread DispQueue;//刷新显示线程 SerialPortFinder mSerialPortFinder;//串口设备搜索 AssistBean AssistData;//用于界面数据序列化和反序列化 int iRecLines=0;//接收区行数 /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); ComA = new SerialControl(); ComB = new SerialControl(); ComC = new SerialControl(); ComD = new SerialControl(); DispQueue = new DispQueueThread(); DispQueue.start(); AssistData = getAssistData(); setControls(); } @Override public void onDestroy(){ saveAssistData(AssistData); CloseComPort(ComA); CloseComPort(ComB); CloseComPort(ComC); CloseComPort(ComD); super.onDestroy(); } @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); CloseComPort(ComA); CloseComPort(ComB); CloseComPort(ComC); CloseComPort(ComD); setContentView(R.layout.main); setControls(); } //---------------------------------------------------- private void setControls() { String appName = getString(R.string.app_name); try { PackageInfo pinfo = getPackageManager().getPackageInfo("com.bjw.ComAssistant", PackageManager.GET_CONFIGURATIONS); String versionName = pinfo.versionName; // String versionCode = String.valueOf(pinfo.versionCode); setTitle(appName " V" versionName); } catch (NameNotFoundException e) { e.printStackTrace(); } editTextRecDisp=(EditText)findViewById(R.id.editTextRecDisp); editTextLines=(EditText)findViewById(R.id.editTextLines); editTextCOMA=(EditText)findViewById(R.id.editTextCOMA); editTextCOMB=(EditText)findViewById(R.id.editTextCOMB); editTextCOMC=(EditText)findViewById(R.id.editTextCOMC); editTextCOMD=(EditText)findViewById(R.id.editTextCOMD); editTextTimeCOMA = (EditText)findViewById(R.id.editTextTimeCOMA); editTextTimeCOMB= (EditText)findViewById(R.id.editTextTimeCOMB); editTextTimeCOMC= (EditText)findViewById(R.id.editTextTimeCOMC); editTextTimeCOMD= (EditText)findViewById(R.id.editTextTimeCOMD); checkBoxAutoClear=(CheckBox)findViewById(R.id.checkBoxAutoClear); checkBoxAutoCOMA=(CheckBox)findViewById(R.id.checkBoxAutoCOMA); checkBoxAutoCOMB=(CheckBox)findViewById(R.id.checkBoxAutoCOMB); checkBoxAutoCOMC=(CheckBox)findViewById(R.id.checkBoxAutoCOMC); checkBoxAutoCOMD=(CheckBox)findViewById(R.id.checkBoxAutoCOMD); ButtonClear=(Button)findViewById(R.id.ButtonClear); ButtonSendCOMA=(Button)findViewById(R.id.ButtonSendCOMA); ButtonSendCOMB=(Button)findViewById(R.id.ButtonSendCOMB); ButtonSendCOMC=(Button)findViewById(R.id.ButtonSendCOMC); ButtonSendCOMD=(Button)findViewById(R.id.ButtonSendCOMD); toggleButtonCOMA=(ToggleButton)findViewById(R.id.toggleButtonCOMA); toggleButtonCOMB=(ToggleButton)findViewById(R.id.ToggleButtonCOMB); toggleButtonCOMC=(ToggleButton)findViewById(R.id.ToggleButtonCOMC); toggleButtonCOMD=(ToggleButton)findViewById(R.id.ToggleButtonCOMD); SpinnerCOMA=(Spinner)findViewById(R.id.SpinnerCOMA); SpinnerCOMB=(Spinner)findViewById(R.id.SpinnerCOMB); SpinnerCOMC=(Spinner)findViewById(R.id.SpinnerCOMC); SpinnerCOMD=(Spinner)findViewById(R.id.SpinnerCOMD); SpinnerBaudRateCOMA=(Spinner)findViewById(R.id.SpinnerBaudRateCOMA); SpinnerBaudRateCOMB=(Spinner)findViewById(R.id.SpinnerBaudRateCOMB); SpinnerBaudRateCOMC=(Spinner)findViewById(R.id.SpinnerBaudRateCOMC); SpinnerBaudRateCOMD=(Spinner)findViewById(R.id.SpinnerBaudRateCOMD); radioButtonTxt=(RadioButton)findViewById(R.id.radioButtonTxt); radioButtonHex=(RadioButton)findViewById(R.id.radioButtonHex); editTextCOMA.setOnEditorActionListener(new EditorActionEvent()); editTextCOMB.setOnEditorActionListener(new EditorActionEvent()); editTextCOMC.setOnEditorActionListener(new EditorActionEvent()); editTextCOMD.setOnEditorActionListener(new EditorActionEvent()); editTextTimeCOMA.setOnEditorActionListener(new EditorActionEvent()); editTextTimeCOMB.setOnEditorActionListener(new EditorActionEvent()); editTextTimeCOMC.setOnEditorActionListener(new EditorActionEvent()); editTextTimeCOMD.setOnEditorActionListener(new EditorActionEvent()); editTextCOMA.setOnFocusChangeListener(new FocusChangeEvent()); editTextCOMB.setOnFocusChangeListener(new FocusChangeEvent()); editTextCOMC.setOnFocusChangeListener(new FocusChangeEvent()); editTextCOMD.setOnFocusChangeListener(new FocusChangeEvent()); editTextTimeCOMA.setOnFocusChangeListener(new FocusChangeEvent()); editTextTimeCOMB.setOnFocusChangeListener(new FocusChangeEvent()); editTextTimeCOMC.setOnFocusChangeListener(new FocusChangeEvent()); editTextTimeCOMD.setOnFocusChangeListener(new FocusChangeEvent()); radioButtonTxt.setOnClickListener(new radioButtonClickEvent()); radioButtonHex.setOnClickListener(new radioButtonClickEvent()); ButtonClear.setOnClickListener(new ButtonClickEvent()); ButtonSendCOMA.setOnClickListener(new ButtonClickEvent()); ButtonSendCOMB.setOnClickListener(new ButtonClickEvent()); ButtonSendCOMC.setOnClickListener(new ButtonClickEvent()); ButtonSendCOMD.setOnClickListener(new ButtonClickEvent()); toggleButtonCOMA.setOnCheckedChangeListener(new ToggleButtonCheckedChangeEvent()); toggleButtonCOMB.setOnCheckedChangeListener(new ToggleButtonCheckedChangeEvent()); toggleButtonCOMC.setOnCheckedChangeListener(new ToggleButtonCheckedChangeEvent()); toggleButtonCOMD.setOnCheckedChangeListener(new ToggleButtonCheckedChangeEvent()); checkBoxAutoCOMA.setOnCheckedChangeListener(new CheckBoxChangeEvent()); checkBoxAutoCOMB.setOnCheckedChangeListener(new CheckBoxChangeEvent()); checkBoxAutoCOMC.setOnCheckedChangeListener(new CheckBoxChangeEvent()); checkBoxAutoCOMD.setOnCheckedChangeListener(new CheckBoxChangeEvent()); ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.baudrates_value,android.R.layout.simple_spinner_item); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); SpinnerBaudRateCOMA.setAdapter(adapter); SpinnerBaudRateCOMB.setAdapter(adapter); SpinnerBaudRateCOMC.setAdapter(adapter); SpinnerBaudRateCOMD.setAdapter(adapter); SpinnerBaudRateCOMA.setSelection(12); SpinnerBaudRateCOMB.setSelection(12); SpinnerBaudRateCOMC.setSelection(12); SpinnerBaudRateCOMD.setSelection(12); mSerialPortFinder= new SerialPortFinder(); String[] entryValues = mSerialPortFinder.getAllDevicesPath(); List<String> allDevices = new ArrayList<String>(); for (int i = 0; i < entryValues.length; i ) { allDevices.add(entryValues[i]); } ArrayAdapter<String> aspnDevices = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, allDevices); aspnDevices.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); SpinnerCOMA.setAdapter(aspnDevices); SpinnerCOMB.setAdapter(aspnDevices); SpinnerCOMC.setAdapter(aspnDevices); SpinnerCOMD.setAdapter(aspnDevices); if (allDevices.size()>0) { SpinnerCOMA.setSelection(0); } if (allDevices.size()>1) { SpinnerCOMB.setSelection(1); } if (allDevices.size()>2) { SpinnerCOMC.setSelection(2); } if (allDevices.size()>3) { SpinnerCOMD.setSelection(3); } SpinnerCOMA.setOnItemSelectedListener(new ItemSelectedEvent()); SpinnerCOMB.setOnItemSelectedListener(new ItemSelectedEvent()); SpinnerCOMC.setOnItemSelectedListener(new ItemSelectedEvent()); SpinnerCOMD.setOnItemSelectedListener(new ItemSelectedEvent()); SpinnerBaudRateCOMA.setOnItemSelectedListener(new ItemSelectedEvent()); SpinnerBaudRateCOMB.setOnItemSelectedListener(new ItemSelectedEvent()); SpinnerBaudRateCOMC.setOnItemSelectedListener(new ItemSelectedEvent()); SpinnerBaudRateCOMD.setOnItemSelectedListener(new ItemSelectedEvent()); DispAssistData(AssistData); } //----------------------------------------------------串口号或波特率变化时,关闭打开的串口 class ItemSelectedEvent implements Spinner.OnItemSelectedListener{ public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) { if ((arg0 == SpinnerCOMA) || (arg0 == SpinnerBaudRateCOMA)) { CloseComPort(ComA); checkBoxAutoCOMA.setChecked(false); toggleButtonCOMA.setChecked(false); }else if ((arg0 == SpinnerCOMB) || (arg0 == SpinnerBaudRateCOMB)) { CloseComPort(ComB); checkBoxAutoCOMA.setChecked(false); toggleButtonCOMB.setChecked(false); }else if ((arg0 == SpinnerCOMC) || (arg0 == SpinnerBaudRateCOMC)) { CloseComPort(ComC); checkBoxAutoCOMA.setChecked(false); toggleButtonCOMC.setChecked(false); }else if ((arg0 == SpinnerCOMD) || (arg0 == SpinnerBaudRateCOMD)) { CloseComPort(ComD); checkBoxAutoCOMA.setChecked(false); toggleButtonCOMD.setChecked(false); } } public void onNothingSelected(AdapterView<?> arg0) {} } //----------------------------------------------------编辑框焦点转移事件 class FocusChangeEvent implements EditText.OnFocusChangeListener{ public void onFocusChange(View v, boolean hasFocus) { if (v==editTextCOMA) { setSendData(editTextCOMA); } else if (v==editTextCOMB) { setSendData(editTextCOMB); } else if (v==editTextCOMC) { setSendData(editTextCOMC); } else if (v==editTextCOMD) { setSendData(editTextCOMD); }else if (v==editTextTimeCOMA) { setDelayTime(editTextTimeCOMA); }else if (v==editTextTimeCOMB) { setDelayTime(editTextTimeCOMB); }else if (v==editTextTimeCOMC) { setDelayTime(editTextTimeCOMC); }else if (v==editTextTimeCOMD) { setDelayTime(editTextTimeCOMD); } } } //----------------------------------------------------编辑框完成事件 class EditorActionEvent implements EditText.OnEditorActionListener{ public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { if (v==editTextCOMA) { setSendData(editTextCOMA); } else if (v==editTextCOMB) { setSendData(editTextCOMB); } else if (v==editTextCOMC) { setSendData(editTextCOMC); } else if (v==editTextCOMD) { setSendData(editTextCOMD); }else if (v==editTextTimeCOMA) { setDelayTime(editTextTimeCOMA); }else if (v==editTextTimeCOMB) { setDelayTime(editTextTimeCOMB); }else if (v==editTextTimeCOMC) { setDelayTime(editTextTimeCOMC); }else if (v==editTextTimeCOMD) { setDelayTime(editTextTimeCOMD); } return false; } } //----------------------------------------------------Txt、Hex模式选择 class radioButtonClickEvent implements RadioButton.OnClickListener{ public void onClick(View v) { if (v==radioButtonTxt) { KeyListener TxtkeyListener = new TextKeyListener(Capitalize.NONE, false); editTextCOMA.setKeyListener(TxtkeyListener); editTextCOMB.setKeyListener(TxtkeyListener); editTextCOMC.setKeyListener(TxtkeyListener); editTextCOMD.setKeyListener(TxtkeyListener); AssistData.setTxtMode(true); }else if (v==radioButtonHex) { KeyListener HexkeyListener = new NumberKeyListener() { public int getInputType() { return InputType.TYPE_CLASS_TEXT; } @Override protected char[] getAcceptedChars() { return new char[]{'0','1','2','3','4','5','6','7','8','9', 'a','b','c','d','e','f','A','B','C','D','E','F'}; } }; editTextCOMA.setKeyListener(HexkeyListener); editTextCOMB.setKeyListener(HexkeyListener); editTextCOMC.setKeyListener(HexkeyListener); editTextCOMD.setKeyListener(HexkeyListener); AssistData.setTxtMode(false); } editTextCOMA.setText(AssistData.getSendA()); editTextCOMB.setText(AssistData.getSendB()); editTextCOMC.setText(AssistData.getSendC()); editTextCOMD.setText(AssistData.getSendD()); setSendData(editTextCOMA); setSendData(editTextCOMB); setSendData(editTextCOMC); setSendData(editTextCOMD); } } //----------------------------------------------------自动发送 class CheckBoxChangeEvent implements CheckBox.OnCheckedChangeListener{ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (buttonView == checkBoxAutoCOMA){ if (!toggleButtonCOMA.isChecked() && isChecked) { buttonView.setChecked(false); return; } SetLoopData(ComA,editTextCOMA.getText().toString()); SetAutoSend(ComA,isChecked); } else if(buttonView == checkBoxAutoCOMB){ if (!toggleButtonCOMB.isChecked() && isChecked) { buttonView.setChecked(false); return; } SetLoopData(ComB,editTextCOMB.getText().toString()); SetAutoSend(ComB,isChecked); } else if(buttonView == checkBoxAutoCOMC){ if (!toggleButtonCOMC.isChecked() && isChecked) { buttonView.setChecked(false); return; } SetLoopData(ComC,editTextCOMC.getText().toString()); SetAutoSend(ComC,isChecked); } else if(buttonView == checkBoxAutoCOMD){ if (!toggleButtonCOMD.isChecked() && isChecked) { buttonView.setChecked(false); return; } SetLoopData(ComD,editTextCOMD.getText().toString()); SetAutoSend(ComD,isChecked); } } } //----------------------------------------------------清除按钮、发送按钮 class ButtonClickEvent implements View.OnClickListener { public void onClick(View v) { if (v == ButtonClear){ editTextRecDisp.setText(""); } else if (v== ButtonSendCOMA){ sendPortData(ComA, editTextCOMA.getText().toString()); }else if (v== ButtonSendCOMB){ sendPortData(ComB, editTextCOMB.getText().toString()); }else if (v== ButtonSendCOMC){ sendPortData(ComC, editTextCOMC.getText().toString()); }else if (v== ButtonSendCOMD){ sendPortData(ComD, editTextCOMD.getText().toString()); } } } //----------------------------------------------------打开关闭串口 class ToggleButtonCheckedChangeEvent implements ToggleButton.OnCheckedChangeListener{ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (buttonView == toggleButtonCOMA){ if (isChecked){ if (toggleButtonCOMB.isChecked() && SpinnerCOMA.getSelectedItemPosition()==SpinnerCOMB.getSelectedItemPosition()) { ShowMessage("串口" SpinnerCOMA.getSelectedItem().toString() "已打开"); buttonView.setChecked(false); }else if (toggleButtonCOMC.isChecked() && SpinnerCOMA.getSelectedItemPosition()==SpinnerCOMC.getSelectedItemPosition()) { ShowMessage("串口" SpinnerCOMA.getSelectedItem().toString() "已打开"); buttonView.setChecked(false); }else if (toggleButtonCOMD.isChecked() && SpinnerCOMA.getSelectedItemPosition()==SpinnerCOMD.getSelectedItemPosition()) { ShowMessage("串口" SpinnerCOMA.getSelectedItem().toString() "已打开"); buttonView.setChecked(false); }else { // ComA=new SerialControl("/dev/s3c2410_serial0", "9600"); ComA.setPort(SpinnerCOMA.getSelectedItem().toString()); ComA.setBaudRate(SpinnerBaudRateCOMA.getSelectedItem().toString()); OpenComPort(ComA); } }else { CloseComPort(ComA); checkBoxAutoCOMA.setChecked(false); } } else if (buttonView == toggleButtonCOMB){ if (isChecked){ if (toggleButtonCOMA.isChecked() && SpinnerCOMB.getSelectedItemPosition()==SpinnerCOMA.getSelectedItemPosition()) { ShowMessage("串口" SpinnerCOMB.getSelectedItem().toString() "已打开"); buttonView.setChecked(false); }else if (toggleButtonCOMC.isChecked() && SpinnerCOMB.getSelectedItemPosition()==SpinnerCOMC.getSelectedItemPosition()) { ShowMessage("串口" SpinnerCOMB.getSelectedItem().toString() "已打开"); buttonView.setChecked(false); }else if (toggleButtonCOMD.isChecked() && SpinnerCOMB.getSelectedItemPosition()==SpinnerCOMD.getSelectedItemPosition()) { ShowMessage("串口" SpinnerCOMB.getSelectedItem().toString() "已打开"); buttonView.setChecked(false); }else { // ComB=new SerialControl("/dev/s3c2410_serial1", "9600"); ComB.setPort(SpinnerCOMB.getSelectedItem().toString()); ComB.setBaudRate(SpinnerBaudRateCOMB.getSelectedItem().toString()); OpenComPort(ComB); } }else { CloseComPort(ComB); checkBoxAutoCOMB.setChecked(false); } }else if (buttonView == toggleButtonCOMC){ if (isChecked){ if (toggleButtonCOMA.isChecked() && SpinnerCOMC.getSelectedItemPosition()==SpinnerCOMA.getSelectedItemPosition()) { ShowMessage("串口" SpinnerCOMC.getSelectedItem().toString() "已打开"); buttonView.setChecked(false); }else if (toggleButtonCOMB.isChecked() && SpinnerCOMC.getSelectedItemPosition()==SpinnerCOMB.getSelectedItemPosition()) { ShowMessage("串口" SpinnerCOMC.getSelectedItem().toString() "已打开"); buttonView.setChecked(false); }else if (toggleButtonCOMD.isChecked() && SpinnerCOMC.getSelectedItemPosition()==SpinnerCOMD.getSelectedItemPosition()) { ShowMessage("串口" SpinnerCOMC.getSelectedItem().toString() "已打开"); buttonView.setChecked(false); }else { // ComC=new SerialControl("/dev/s3c2410_serial2", "9600"); ComC.setPort(SpinnerCOMC.getSelectedItem().toString()); ComC.setBaudRate(SpinnerBaudRateCOMC.getSelectedItem().toString()); OpenComPort(ComC); } }else { CloseComPort(ComC); checkBoxAutoCOMC.setChecked(false); } }else if (buttonView == toggleButtonCOMD){ if (isChecked){ if (toggleButtonCOMA.isChecked() && SpinnerCOMD.getSelectedItemPosition()==SpinnerCOMA.getSelectedItemPosition()) { ShowMessage("串口" SpinnerCOMD.getSelectedItem().toString() "已打开"); buttonView.setChecked(false); }else if (toggleButtonCOMB.isChecked() && SpinnerCOMD.getSelectedItemPosition()==SpinnerCOMB.getSelectedItemPosition()) { ShowMessage("串口" SpinnerCOMD.getSelectedItem().toString() "已打开"); buttonView.setChecked(false); }else if (toggleButtonCOMC.isChecked() && SpinnerCOMD.getSelectedItemPosition()==SpinnerCOMC.getSelectedItemPosition()) { ShowMessage("串口" SpinnerCOMD.getSelectedItem().toString() "已打开"); buttonView.setChecked(false); }else { // ComD=new SerialControl("/dev/s3c2410_serial3", "9600"); ComD.setPort(SpinnerCOMD.getSelectedItem().toString()); ComD.setBaudRate(SpinnerBaudRateCOMD.getSelectedItem().toString()); OpenComPort(ComD); } }else { CloseComPort(ComD); checkBoxAutoCOMD.setChecked(false); } } } } //----------------------------------------------------串口控制类 private class SerialControl extends SerialHelper{ // public SerialControl(String sPort, String sBaudRate){ // super(sPort, sBaudRate); // } public SerialControl(){ } @Override protected void onDataReceived(final ComBean ComRecData) { //数据接收量大或接收时弹出软键盘,界面会卡顿,可能和6410的显示性能有关 //直接刷新显示,接收数据量大时,卡顿明显,但接收与显示同步。 //用线程定时刷新显示可以获得较流畅的显示效果,但是接收数据速度快于显示速度时,显示会滞后。 //最终效果差不多-_-,线程定时刷新稍好一些。 DispQueue.AddQueue(ComRecData);//线程定时刷新显示(推荐) /* runOnUiThread(new Runnable()//直接刷新显示 { public void run() { DispRecData(ComRecData); } });*/ } } //----------------------------------------------------刷新显示线程 private class DispQueueThread extends Thread{ private Queue<ComBean> QueueList = new LinkedList<ComBean>(); @Override public void run() { super.run(); while(!isInterrupted()) { final ComBean ComData; while((ComData=QueueList.poll())!=null) { runOnUiThread(new Runnable() { public void run() { DispRecData(ComData); } }); try { Thread.sleep(100);//显示性能高的话,可以把此数值调小。 } catch (Exception e) { e.printStackTrace(); } break; } } } public synchronized void AddQueue(ComBean ComData){ QueueList.add(ComData); } } //----------------------------------------------------刷新界面数据 private void DispAssistData(AssistBean AssistData) { editTextCOMA.setText(AssistData.getSendA()); editTextCOMB.setText(AssistData.getSendB()); editTextCOMC.setText(AssistData.getSendC()); editTextCOMD.setText(AssistData.getSendD()); setSendData(editTextCOMA); setSendData(editTextCOMB); setSendData(editTextCOMC); setSendData(editTextCOMD); if (AssistData.isTxt()) { radioButtonTxt.setChecked(true); } else { radioButtonHex.setChecked(true); } editTextTimeCOMA.setText(AssistData.sTimeA); editTextTimeCOMB.setText(AssistData.sTimeB); editTextTimeCOMC.setText(AssistData.sTimeC); editTextTimeCOMD.setText(AssistData.sTimeD); setDelayTime(editTextTimeCOMA); setDelayTime(editTextTimeCOMB); setDelayTime(editTextTimeCOMC); setDelayTime(editTextTimeCOMD); } //----------------------------------------------------保存、获取界面数据 private void saveAssistData(AssistBean AssistData) { AssistData.sTimeA = editTextTimeCOMA.getText().toString(); AssistData.sTimeB = editTextTimeCOMB.getText().toString(); AssistData.sTimeC = editTextTimeCOMC.getText().toString(); AssistData.sTimeD = editTextTimeCOMD.getText().toString(); SharedPreferences msharedPreferences = getSharedPreferences("ComAssistant", Context.MODE_PRIVATE); try { ByteArrayOutputStream baos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(baos); oos.writeObject(AssistData); String sBase64 = new String(Base64.encode(baos.toByteArray(),0)); SharedPreferences.Editor editor = msharedPreferences.edit(); editor.putString("AssistData", sBase64); editor.commit(); } catch (IOException e) { e.printStackTrace(); } } //---------------------------------------------------- private AssistBean getAssistData() { SharedPreferences msharedPreferences = getSharedPreferences("ComAssistant", Context.MODE_PRIVATE); AssistBean AssistData = new AssistBean(); try { String personBase64 = msharedPreferences.getString("AssistData", ""); byte[] base64Bytes = Base64.decode(personBase64.getBytes(),0); ByteArrayInputStream bais = new ByteArrayInputStream(base64Bytes); ObjectInputStream ois = new ObjectInputStream(bais); AssistData = (AssistBean) ois.readObject(); return AssistData; } catch (Exception e) { e.printStackTrace(); } return AssistData; } //----------------------------------------------------设置自动发送延时 private void setDelayTime(TextView v){ if (v==editTextTimeCOMA) { AssistData.sTimeA = v.getText().toString(); SetiDelayTime(ComA, v.getText().toString()); }else if (v==editTextTimeCOMB) { AssistData.sTimeB = v.getText().toString(); SetiDelayTime(ComB, v.getText().toString()); }else if (v==editTextTimeCOMC) { AssistData.sTimeC = v.getText().toString(); SetiDelayTime(ComC, v.getText().toString()); }else if (v==editTextTimeCOMD) { AssistData.sTimeD = v.getText().toString(); SetiDelayTime(ComD, v.getText().toString()); } } //----------------------------------------------------设置自动发送数据 private void setSendData(TextView v){ if (v==editTextCOMA) { AssistData.setSendA(v.getText().toString()); SetLoopData(ComA, v.getText().toString()); } else if (v==editTextCOMB) { AssistData.setSendB(v.getText().toString()); SetLoopData(ComB, v.getText().toString()); } else if (v==editTextCOMC) { AssistData.setSendC(v.getText().toString()); SetLoopData(ComC, v.getText().toString()); } else if (v==editTextCOMD) { AssistData.setSendD(v.getText().toString()); SetLoopData(ComD, v.getText().toString()); } } //----------------------------------------------------设置自动发送延时 private void SetiDelayTime(SerialHelper ComPort,String sTime){ ComPort.setiDelay(Integer.parseInt(sTime)); } //----------------------------------------------------设置自动发送数据 private void SetLoopData(SerialHelper ComPort,String sLoopData){ if (radioButtonTxt.isChecked()) { ComPort.setTxtLoopData(sLoopData); } else if (radioButtonHex.isChecked()) { ComPort.setHexLoopData(sLoopData); } } //----------------------------------------------------显示接收数据 private void DispRecData(ComBean ComRecData){ StringBuilder sMsg=new StringBuilder(); sMsg.append(ComRecData.sRecTime); sMsg.append("["); sMsg.append(ComRecData.sComPort); sMsg.append("]"); if (radioButtonTxt.isChecked()) { sMsg.append("[Txt] "); sMsg.append(new String(ComRecData.bRec)); }else if (radioButtonHex.isChecked()) { sMsg.append("[Hex] "); sMsg.append(MyFunc.ByteArrToHex(ComRecData.bRec)); } sMsg.append("\r\n"); editTextRecDisp.append(sMsg); iRecLines ; editTextLines.setText(String.valueOf(iRecLines)); if ((iRecLines > 500) && (checkBoxAutoClear.isChecked()))//达到500项自动清除 { editTextRecDisp.setText(""); editTextLines.setText("0"); iRecLines=0; } } //----------------------------------------------------设置自动发送模式开关 private void SetAutoSend(SerialHelper ComPort,boolean isAutoSend){ if (isAutoSend) { ComPort.startSend(); } else { ComPort.stopSend(); } } //----------------------------------------------------串口发送 private void sendPortData(SerialHelper ComPort,String sOut){ if (ComPort!=null && ComPort.isOpen()) { if (radioButtonTxt.isChecked()) { ComPort.sendTxt(sOut); }else if (radioButtonHex.isChecked()) { ComPort.sendHex(sOut); } } } //----------------------------------------------------关闭串口 private void CloseComPort(SerialHelper ComPort){ if (ComPort!=null){ ComPort.stopSend(); ComPort.close(); } } //----------------------------------------------------打开串口 private void OpenComPort(SerialHelper ComPort){ try { ComPort.open(); } catch (SecurityException e) { ShowMessage("打开串口失败:没有串口读/写权限!"); } catch (IOException e) { ShowMessage("打开串口失败:未知错误!"); } catch (InvalidParameterException e) { ShowMessage("打开串口失败:参数错误!"); } } //------------------------------------------显示消息 private void ShowMessage(String sMsg) { Toast.makeText(this, sMsg, Toast.LENGTH_SHORT).show(); } }
标签: Android串口开发Demo
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论