android 串口通讯3-写个UI测试

本文介绍了一个基于Android平台的UART串口通信应用程序,通过JNI调用实现了串口的打开、关闭、波特率设置及数据收发等功能。该应用利用布局文件定义了UI元素,并在MainActivity中处理了相关逻辑。

uart/res/layout/activity_main.xml内容如下:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="horizontal" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"
    android:background="#000000">


    <TextView 
        android:id="@+id/uart_textview" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:text="android uart demo" 
        android:textSize="30sp" 
        android:textColor="#ffffffff" 
        android:layout_centerHorizontal="false" 
        android:layout_marginLeft="280dp"
        />


    <ScrollView 


        android:id="@+id/uart_scrollview" 
        android:layout_width="600dp" 
        android:layout_height="300dp" 
        android:layout_marginTop="20dp" 


        android:layout_marginLeft="280dp"
        android:layout_below="@+id/uart_textview"    
        android:background="#ffffffff">


        <TextView
            android:id="@+id/uart_view"
            android:layout_width="280dp"
            android:layout_height="150dp"
            android:textColor="#ff000000"
            android:textSize="20sp" />


    </ScrollView>


    <!--send 编辑区域 -->
    <EditText     
        android:id="@+id/uart_edit" 
        android:layout_width="500dp" 
        android:layout_height="50dp" 
        android:layout_marginTop="10dp"
        android:layout_marginLeft="280dp"
        android:layout_below="@+id/uart_scrollview" 
        android:background="#FFFFFF"
        />


    <!--send 边框 -->
    <Button
        android:id="@+id/uart_button4"
        android:layout_width="wrap_content"
        android:layout_height="40dp"
        android:layout_marginTop="10dp"
        android:layout_toRightOf="@+id/uart_edit"
        android:layout_below="@+id/uart_scrollview"
        android:text="SEND" />


    <!--波特率设置按钮 -->
    <Spinner
        android:id="@+id/uart_mode" 
        android:layout_width="180dp" 
        android:layout_height="45dp" 
        android:layout_below="@+id/uart_textview" 
        android:layout_marginLeft="70dp"
        android:background="#ffffff" 
        android:layout_marginTop="20dp"/>






    <!--打开串口按钮 -->
    <Button 
        android:id="@+id/uart_button0" 
        android:layout_width="180dp" 
        android:layout_height="45dp" 
        android:layout_marginLeft="70dp" 
        android:layout_below="@+id/uart_mode" 
        android:text="openUart"
        android:background="#ffffff" 
        android:layout_marginTop="40dp" />


    <!--clean按钮 -->
    <Button
        android:id="@+id/uart_button2" 
        android:layout_width="180dp" 
        android:layout_height="45dp" 
        android:layout_marginLeft="70dp" 
        android:layout_below="@+id/uart_button0" 
        android:text="clean"
        android:background="#ffffff" 
        android:layout_marginTop="40dp" />


    <!--exit按钮 -->
    <Button
        android:id="@+id/uart_button3" 
        android:layout_width="180dp" 
        android:layout_height="45dp" 
        android:layout_marginLeft="70dp" 
        android:layout_below="@+id/uart_button2" 
        android:text="exit" 
        android:background="#ffffff"
        android:layout_marginTop="40dp" />






</RelativeLayout>





uart/src/com/android/uart/MainActivity.java内容如下:

package com.android.uart;




import java.util.Timer;
import java.util.TimerTask;


import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;


import android.util.Log;


public class MainActivity extends Activity {
 
//定义变量
 TextView view1,view2,view;
 Spinner spinner1;
 String receiveMsg;
 String Msg,ReStr;
 EditText editmsg;
 Button myButton0,myButton2,myButton3,myButton4;
 private boolean sign1;
 public int fd,k=0;
 private static final String TAG = "Serialxxx->";
  
//定义下拉字符串数组 
 private static final String[] countriesStr =
   { "B1200", "B2400", "B4800", "B9600","B19200","B38400","B57600","B115200","B230400","B921600"};


 private static final int[]  baudrate=
   {    1200,    2400,    4800,    9600,   19200,   38400,   57600,   115200,   230400,   921600};
 
 
 private Spinner mySpinner;
 //定义字符串适配器
 private ArrayAdapter<String>  adapter;


 //打开串口,前提是设置了串口波特率
 private Button.OnClickListener myButton0_listener=new Button.OnClickListener()
 {
  //打开函数 uart3
  public void onClick(View arg0) {
   // TODO Auto-generated method stub


 Log.e(TAG, "--open devices ");
      fd=Uartjni.openUart("/dev/ttyS7");
      if(fd>0)
      {
          setTitle("open device sucess!"+String.valueOf(fd));
          Log.e(TAG, "--set  devices baudrate ="+ baudrate[k]);
          Uartjni.setUart(baudrate[k]);
          sign1=true;
      }
      else
      {
          setTitle("open device false!"+fd); 
          sign1=false;
      }
     
      view1.setText("open ttyS7 ");
      


  }


 };
 
 //Clean
 private Button.OnClickListener myButton2_listener=new Button.OnClickListener()
 {
     public void onClick(View v) {
         view.setText(null);
     }


 };
 
 //exit
 private Button.OnClickListener myButton3_listener=new Button.OnClickListener()
 {


     public void onClick(View v) {
         // TODO Auto-generated method stub
         timer.cancel();
         Uartjni.closeUart();
         finish();
         System.exit(0);
     }


 };


 //send
 private Button.OnClickListener myButton4_listener=new Button.OnClickListener()
 {


     public void onClick(View v)
     {
         // TODO Auto-generated method stub
         Msg=editmsg.getText().toString();
         Uartjni.sendMsgUart(Msg);
     }


 };


 //定义时间线程,通过调用本地方法不断接受数据
 Timer timer = new Timer();
 //新建一个定时器任务task
 TimerTask task = new TimerTask()
 {
     public void run() {
         runOnUiThread(new Runnable()  {
             public void run() {


         if (sign1){
               ReStr=Uartjni.receiveMsgUart();
         if(ReStr!=null)
         {
             Log.e(TAG, "-receiveMsguart = "+ ReStr);
             view.append(ReStr);
             view.append("\n");
             ReStr=null;
         }


                 }
             }
         });
     }
 };




//重构onDestroy方法,关闭串口和释放资源


@Override
public void onDestroy()
{
    sign1=false;
    timer.cancel();
    Uartjni.closeUart();
    finish();
}




//实现程序第一次启动时调用的方法onCreate
 @Override
 public void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);


    //现实布局
     setContentView(R.layout.activity_main);               
    //时间线程调度
     timer.schedule(task, 8000, 8000);


     //获取资源ID,实例化变量,设置编辑框宽度
     mySpinner=(Spinner)findViewById(R.id.uart_mode);
     view1=(TextView)findViewById(R.id.uart_textview);
     view=(TextView)findViewById(R.id.uart_view);
     editmsg=(EditText)findViewById(R.id.uart_edit);
     editmsg.setWidth(200);


     myButton0=(Button)findViewById(R.id.uart_button0);
     myButton2=(Button)findViewById(R.id.uart_button2);
     myButton3=(Button)findViewById(R.id.uart_button3);
     myButton4=(Button)findViewById(R.id.uart_button4);


     //为组件设置监听事件
     myButton0.setOnClickListener(myButton0_listener);   
     myButton2.setOnClickListener(myButton2_listener); 
     myButton3.setOnClickListener(myButton3_listener); 
     myButton4.setOnClickListener(myButton4_listener); 


     //实例化字符串适配器
     adapter = new ArrayAdapter<String>(this,
             android.R.layout.simple_spinner_item, countriesStr);


     //mySpinner绑定适配器
     adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
     mySpinner.setAdapter(adapter);




     //mySpinner的OnItemSelectedListener事件监听,调用本地方法设置串口波特率
     mySpinner.setOnItemSelectedListener(new Spinner.OnItemSelectedListener()
             {


                 public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3)
     {
     if(fd>0)
     {
         Log.e(TAG, "setUart baudrate=  "+ arg2);
         //Uartjni.setUart(arg2);
         Uartjni.setUart(baudrate[arg2]);
     }
     else
     {
         k=arg2;
         Log.e(TAG, "select setUart baudrate= "+ arg2);
         arg0.setVisibility(View.VISIBLE);
     }
     }


     public void onNothingSelected(AdapterView<?> arg0)
     {
         // TODO Auto-generated method stub
     }


     });
 }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值