BlueTooth_SmartCarActivity.java文件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(); } } }