首页 > 代码库 > 蓝牙小车手机遥控软件

蓝牙小车手机遥控软件

BlueTooth_SmartCarActivity.java文件

package cn.BlueTooth_SmartCar;

import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.UUID;

import android.app.Activity;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothSocket;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.os.Vibrator;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.Button;
import android.widget.SeekBar;
import android.widget.TextView;
import android.widget.Toast;

public class BlueTooth_SmartCarActivity extends Activity {
	
	String information;
	public byte[] message = new byte[1];
	private Vibrator vibrator;//震动设置
	
	private BluetoothAdapter btAdapter = BluetoothAdapter.getDefaultAdapter();
	BluetoothDevice btDevice;
	BluetoothSocket bluetoothSocket = null;
	OutputStream tmpOut = null;
	
	
	private static final UUID MY_UUID = UUID.fromString("37849990-8AAD-4E9F-88D5-8E417CBF02C3");
	private String Address = "00:12:10:31:04:08";
	
	Button buttonUP;     //方向按键
	Button buttonDOWN;
	Button buttonLeftTop;
	Button buttonRightTop;
	Button buttonLeftDown;
	Button buttonRightDown;
	TextView textViewDeviceName;  
	TextView textViewSuccessed;
	TextView textViewProgress;
	SeekBar seekBar;
	int i = 70;     //初始速度值
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        buttonUP=(Button)findViewById(R.id.buttonUP);
        buttonDOWN=(Button)findViewById(R.id.buttonDOWN);
        buttonRightTop=(Button)findViewById(R.id.buttonRightTop);
        buttonLeftTop=(Button)findViewById(R.id.buttonLeftTop);
        buttonLeftDown=(Button)findViewById(R.id.buttonLeftDown);
        buttonRightDown=(Button)findViewById(R.id.buttonRightDown);
        textViewDeviceName=(TextView)findViewById(R.id.textViewDeviceName);
        textViewSuccessed=(TextView)findViewById(R.id.textViewSuccessed);
        textViewProgress=(TextView)findViewById(R.id.textViewProgress);
        seekBar=(SeekBar)findViewById(R.id.seekBar);
        
        buttonUP.setOnTouchListener(new ButtonOnTouchListener());
        buttonDOWN.setOnTouchListener(new ButtonOnTouchListener());
        buttonLeftTop.setOnTouchListener(new ButtonOnTouchListener());
        buttonRightTop.setOnTouchListener(new ButtonOnTouchListener());
        buttonLeftDown.setOnTouchListener(new ButtonOnTouchListener());
        buttonRightDown.setOnTouchListener(new ButtonOnTouchListener());
        seekBar.setOnSeekBarChangeListener(new SeekBarListener());
        
        //检测蓝牙适配器
        if(btAdapter != null){
        	System.out.println("蓝牙设备驱动正常");
        	if(!btAdapter.isEnabled()){
        		Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
        		startActivity(intent);
        		System.out.println("适配器不可用");
        	}
        	else System.out.println("适配器可用");
        } else System.out.println("蓝牙设备驱动异常");
        
        textViewProgress.setText("当前速度:"+i);
        seekBar.setProgress(70);
    }
    
    
    
    /******发送信息方法*********/
    public void bluesend(byte[] msg){
    	try{
    		tmpOut = bluetoothSocket.getOutputStream();
    		System.out.println("生成输出流");
    		Log.d("send",Arrays.toString(msg));
    		System.out.println("正在把输出流送到缓存区");
    		tmpOut.write(msg);
    		System.out.println("成功输出流送到缓存区");
    	}catch(IOException e){
           e.printStackTrace();
           System.out.println("无法生成输出流或把输出流送到缓存区");
    	}
    }
    
    /******震动10ms方法******/
    public void vibrator(){  
    	vibrator = (Vibrator)getSystemService(Context.VIBRATOR_SERVICE);
    	vibrator.vibrate(20);
    	System.out.println("震动20ms");
    }
    
    /*****SeekBar********/
    private class SeekBarListener implements SeekBar.OnSeekBarChangeListener{
    	@Override//进度条改变时
    	public void onProgressChanged(SeekBar seekBar, int progress,
    			boolean fromUser) {
    		// TODO Auto-generated method stub
    		i = seekBar.getProgress();
            textViewProgress.setText("当前速度:"+i);
    	}
    	@Override//开始拖动滑块时
    	public void onStartTrackingTouch(SeekBar seekBar) {
    		// TODO Auto-generated method stub
    		i= seekBar.getProgress();
            textViewProgress.setText("当前速度:"+i);
    	}
    	@Override//结束拖动滑块时
    	public void onStopTrackingTouch(SeekBar seekBar) {
    		// TODO Auto-generated method stub
    		i= seekBar.getProgress();
    		textViewProgress.setText("当前速度:"+i);
    		int  k; 
    		k = i/10;
    		if(k==10) k=9;
    		//将整型转变为字符串型
    		String j = String.valueOf(k);
    	    byte[] msgBuffer = j.getBytes();
    	    bluesend(msgBuffer);
    	}
    }
    
    /********按键监听器**************/
    class ButtonOnTouchListener implements OnTouchListener{

		@Override
		public boolean onTouch(View v, MotionEvent event) {
			// TODO Auto-generated method stub
			int action = event.getAction();
			action = event.getAction();
			switch(action){
			case MotionEvent.ACTION_DOWN:
				switch(v.getId()){
				case R.id.buttonUP: 
					message[0] = (byte)0x41;//A的ASCII码65;
					vibrator();//震动10ms
					bluesend(message);
					System.out.println("前进");
					break;
				case R.id.buttonDOWN:
					message[0] = (byte)0x42;//B的ASCII码66;
					vibrator();//震动10ms
					bluesend(message);
					System.out.println("后退");
					break;
			    case R.id.buttonLeftTop:
			    	message[0] = (byte)0x43;//S的ASCII码69;
					vibrator();//震动10ms
					bluesend(message);
					System.out.println("左上");
					break;
			    case R.id.buttonRightTop:
			    	message[0] = (byte)0x44;//F的ASCII码70;
					vibrator();//震动10ms
					bluesend(message);
					System.out.println("右上");
					break;
			    case R.id.buttonLeftDown:
			    	message[0] = (byte)0x45;//G的ASCII码71;
					vibrator();//震动10ms
					bluesend(message);
					System.out.println("左下");
					break;
			    case R.id.buttonRightDown:
			    	message[0] = (byte)0x46;//H的ASCII码72;
					vibrator();//震动10ms
					bluesend(message);
					System.out.println("右下");
					break;
			    }
			break;
			case MotionEvent.ACTION_UP:
				message[0] = (byte)0x61;//a的ASCII码;
				vibrator();//震动10ms
				bluesend(message);
				System.out.println("松手停止");
			break;
		    }
			return false;
		}
    	
    }
    
    /*********菜单************/
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
    	// TODO Auto-generated method stub
    	menu.add(0, 0, 0, "退出");
    	menu.add(0, 1, 1, "遥控");
    	menu.add(0, 2, 2, "循迹");
    	menu.add(0, 3, 3, "红外");
    	menu.add(0, 4, 4, "金探");
    	menu.add(0, 5, 5, "测温");
    	menu.add(0, 6, 6, "测湿");
    	menu.add(0, 7, 7, "测速");
    	menu.add(0, 8, 8, "避障");
    	return super.onCreateOptionsMenu(menu);
    }
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
    	// TODO Auto-generated method stub
    	byte[] msgBufferWay = new byte[1] ;
    	if(item.getItemId()==0){
    		finish();
    	}
    	if(item.getItemId()==1){
    		msgBufferWay[0] = (byte)0x62;//b的ASCII码;
    	    bluesend(msgBufferWay);
    	}
    	if(item.getItemId()==2){
    		msgBufferWay[0] = (byte)0x63;//c的ASCII码;
    	    bluesend(msgBufferWay);
    	}
    	if(item.getItemId()==3){
    		msgBufferWay[0] = (byte)0x64;//d的ASCII码;;
    	    bluesend(msgBufferWay);
    	}
    	if(item.getItemId()==4){
    		msgBufferWay[0] = (byte)0x65;//e的ASCII码;;
    	    bluesend(msgBufferWay);
    	}
    	if(item.getItemId()==5){
    		msgBufferWay[0] = (byte)0x66;//f的ASCII码;;
    	    bluesend(msgBufferWay);
    	}
    	if(item.getItemId()==6){
    		msgBufferWay[0] = (byte)0x67;//g的ASCII码;;
    	    bluesend(msgBufferWay);
    	}
    	if(item.getItemId()==7){
    		msgBufferWay[0] = (byte)0x68;//h的ASCII码;;
    	    bluesend(msgBufferWay);
    	}
    	if(item.getItemId()==8){
    		msgBufferWay[0] = (byte)0x69;//i的ASCII码;;
    	    bluesend(msgBufferWay);
    	}
    	
    	return super.onOptionsItemSelected(item);
    }
    
    
    /******onResume阶段***********/
    @Override
    protected void onResume() {
    	// TODO Auto-generated method stub
    	super.onResume();
    	btDevice = btAdapter.getRemoteDevice(Address);
    	System.out.println("根据地址获取到远程蓝牙设备");
    	if(btDevice!=null){
    		textViewDeviceName.setText("你所连接的设备是:"+btDevice.getName());
    	}
    	try {
//			bluetoothSocket = btDevice.createRfcommSocketToServiceRecord(MY_UUID);
    		/*******蓝牙连接***********/
    		Method m;
    		try {
    		    m = btDevice.getClass().getMethod("createRfcommSocket", new Class[] {int.class});
    		    bluetoothSocket = (BluetoothSocket) m.invoke(btDevice, Integer.valueOf(1));
    		              } catch (SecurityException e1) {
    		                  // TODO Auto-generated catch block
    		                  e1.printStackTrace();
    		              } catch (NoSuchMethodException e1) {
    		                  // TODO Auto-generated catch block
    		                  e1.printStackTrace();
    		              } catch (IllegalArgumentException e) {
    		                  // TODO Auto-generated catch block
    		                  e.printStackTrace();
    		              } catch (IllegalAccessException e) {
    		                  // TODO Auto-generated catch block
    		                  e.printStackTrace();
    		              } catch (InvocationTargetException e) {
    		                  // TODO Auto-generated catch block
    		                  e.printStackTrace();
    		           } 
    		  
			System.out.println("根据UUID获取到远程蓝牙设备客户端");
			bluetoothSocket.connect();
			System.out.println("已连接到远程设备");
			textViewSuccessed.setText("设备连接:成功");
		} catch (IOException e) {
			// TODO Auto-generated catch block
			textViewSuccessed.setText("设备连接:未成功");
			e.printStackTrace();
		}
    }
    
    
    /********销毁阶段********/
    @Override
    protected void onDestroy() {
    	// TODO Auto-generated method stub
    	super.onDestroy();
    	try {
			bluetoothSocket.close();
			System.out.println("正在关闭客户端");
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
    }
    
}



蓝牙小车手机遥控软件