2014-04-23 135 views
0

我和我的團隊正在嘗試讓我們的android應用程序向我們的arduino發送一個信號,並帶有藍牙外殼。無論如何,信號並不需要有意義,只要arduino知道已經發送了一個信號。我已經看到了許多關於這方面的在線資料,但似乎沒有一個似乎是一致的,它似乎並沒有爲我工作。Android信號到Arduino藍牙外殼

我當前的代碼:(我們只需要發送一個信號時,onRecieve()被調用)

package com.example.alarmquiz2; 

import android.provider.Settings.Secure; 
import java.io.InputStream; 
import java.io.OutputStream; 
import java.io.IOException; 
import java.util.UUID; 
import android.telephony.TelephonyManager; 
import android.bluetooth.BluetoothSocket; 
import android.util.Log; 
import android.bluetooth.BluetoothClass.Device; 
import android.bluetooth.BluetoothDevice; 
import android.bluetooth.BluetoothAdapter; 
import android.content.Context; 
import android.widget.Toast; 
import android.content.Intent; 
import android.content.BroadcastReceiver; 

public class AlarmReceiver 
    extends BroadcastReceiver 
{ 
    Sound     s  = new Sound(); 
    private BluetoothAdapter blue; 
    private Context   contexxt; 
    private Device   arduino; 
    private BluetoothSocket btSocket; 
    private TelephonyManager tManager; 
    private UUID    uuid; 
    private OutputStream  outStream; 
    private InputStream  inStream; 
    private static String address = "00:14:03:18:42:19"; 


    public void onReceive(Context context, Intent intent) 
    { 
     TelephonyManager tManager = 
      (TelephonyManager)context 
       .getSystemService(Context.TELEPHONY_SERVICE); 
     uuid = UUID.fromString(tmanager.getDeviceID()); 
     contexxt = context; 
     this.CheckBt(); 
     this.Connect(); 
     this.writeData("meh"); 
     if (!s.isPlaying()) 
     { 
      s.setSound(context); 
      s.startSound(); 

      Intent i = new Intent(context, MainActivity.class); 
      i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      context.startActivity(i); 
     } 
     else if (s.isPlaying()) 
     { 

     s.stopSound(); 
     Intent i = new Intent(context, SecondscreenActivity.class); 
     i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     context.startActivity(i); 
     } 
    } 


    private void CheckBt() 
    { 
     blue = BluetoothAdapter.getDefaultAdapter(); 

     if (!blue.isEnabled()) 
     { 
      Toast 
       .makeText(contexxt, "Bluetooth Disabled !", Toast.LENGTH_SHORT) 
       .show(); 
     /* 
     * It tests if the bluetooth is enabled or not, if not the app will 
     * show a message. 
     */ 
     } 

     if (blue == null) 
     { 
      Toast.makeText(contexxt, "Bluetooth null !", Toast.LENGTH_SHORT) 
       .show(); 
     } 
    } 


    public void Connect() 
    { 
     BluetoothDevice device = blue.getRemoteDevice(address); 
     Log.d("", "Connecting to ... " + device); 
     blue.cancelDiscovery(); 

     try 
     { 
      btSocket = device.createRfcommSocketToServiceRecord(uuid); 
/* 
* Here is the part the connection is made, by asking the device to create a 
* RfcommSocket (Unsecure socket I guess), It map a port for us or something 
* like that 
*/ 


     btSocket.connect(); 
      Log.d("", "Connection made."); 
     } 
     catch (IOException e) 
     { 
      try 
      { 
       btSocket.close(); 
      } 
      catch (IOException e2) 
      { 
       Log.d("", "Unable to end the connection"); 
      } 
      Log.d("", "Socket creation failed"); 
     } 

     /* 
     * this is a method used to read what the Arduino says for example when 
     * you write Serial.print("Hello world.") in your Arduino code 
     */ 
    } 


    private void writeData(String data) 
    { 
     try 
     { 
      outStream = btSocket.getOutputStream(); 
     } 
     catch (IOException e) 
     { 
      Log.d("", "Bug BEFORE Sending stuff", e); 
     } 

     String message = data; 
/* In my example, I put a button that invoke this method and send a string to it */ 
     byte[] msgBuffer = message.getBytes(); 

     try 
     { 
      outStream.write(msgBuffer); 
     } 
     catch (IOException e) 
     { 
      Log.d("", "Bug while sending stuff", e); 
     } 
    } 

} 

香港專業教育學院也給我自己都在我的清單中所需的權限。我現在正在接觸我的朋友電話的問題是,「getDeviceID()」返回一個14位數字而不是「00000000-0000-0000-0000-000000000000」格式。任何建議,訓斥或建議將是最受歡迎的。

+0

「盾」不是「殼」 –

回答

0

此:

uuid = UUID.fromString(tmanager.getDeviceID()); 
... 
btSocket = device.createRfcommSocketToServiceRecord(uuid); 

肯定不是你想要做什麼。

是什麼讓你認爲手機(?)的「設備ID」在某種程度上與UUID相關,UUID用於識別其他設備上的某個藍牙服務?

順便說一句,你看過the docs嗎?

您一定需要知道您必須使用哪個UUID連接到目標設備在其BT接口上提供的特定服務。例如,可以找到衆所周知的標準UUID列表here

許多設備爲基本的面向流的數據交換提供「串行端口配置文件」(SPP)。你可能想先嚐試一下。

Here's另一個可能有用的來源。