顯示具有 android 標籤的文章。 顯示所有文章
顯示具有 android 標籤的文章。 顯示所有文章

2015年7月23日

Android App - Bluetooth 初探 ( 2 )

BluetoothDevice
接下來要熟悉的是BluetoothDevice這個類別。我們已經知道BluetoothAdapter代表的是Android手機裡的藍芽裝置,那麼就可以把BluetoothDevice想像成其它的藍芽裝置,比如說;藍芽耳機、藍芽喇叭、小米手環...等各式各樣的裝置。

現在,我們的App已經可以利用BluetoothAdapter來開關Android手機裡的藍芽設備,接著我們可以再利用BluetoothAdapter這個類別來找出已經和我們的Android手機配對完成的藍芽裝置,並顯示它們的名稱以及位址。延續之前的程式碼,我們在MainActivity.java中加入
public void findDevice(View view) {
    ArrayAdapter<String> mArrayAdapter = new ArrayAdapter(this, 
                                  android.R.layout.simple_list_item_1);
    Set<BluetoothDevice> pairedDevices = mBTadapter.getBondedDevices();
    if ( pairedDevices.size() > 0 ) {
        for (BluetoothDevice device : pairedDevices) {
            mArrayAdapter.add(device.getName() + "\n" + device.getAddress());
            ListView listview = (ListView)findViewById(R.id.listView);
            listview.setAdapter(mArrayAdapter);
        }
    }
}
利用BluetoothAdapter提供的getBondedDevices()方法可以取得已經和我們的Android手機配對完成的裝置。這個方法會回傳BluetoothDevice物件,而且存放於Set這種型式的container裡。我們可以利用BluetoothDevice類別裡的getName()與getAddress()分別取得藍芽裝置的名稱以及位址。最後,使用ListView把藍芽裝置的名稱與位址一筆一筆地顯示出來。
activity_main.xml 加入

<Button 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:onClick="findDevice" 
android:text="@string/find_device" 
android:layout_alignParentTop="true" 
android:layout_alignParentRight="true" 
android:layout_alignParentEnd="true" /> 

<ListView 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:id="@+id/listView" 
android:layout_below="@+id/button" 
android:layout_alignParentLeft="true" 
android:layout_alignParentStart="true" 
android:layout_marginTop="51dp" />

strings.xml 加入

<string name="find_device">搜尋裝置</string>

新增一個按鈕「搜尋裝置」




按下搜尋裝置按鈕之後,會顯示已經配對完成的裝置名稱,以我的Android手機來說,總共有兩個配對完成的藍芽裝置。



2015年7月19日

Android App - Bluetooth 初探 ( 1 )

在Bluetooth API中,有幾個基本類別必須熟悉

BluetoothAdapter
可以把它想像成,這個類別就等同於Android手機裡的藍芽裝置。這樣就很容易理解了!很直覺地,當我們想要操作Bluetooth裝置,就可以透過BluetoothAdapter這個類別來執行。
那麼,要使用它必須先物件化,可以透過getDefaultAdapter()這個方法來產生BluetoothAdapter類別的物件,例如;下列的程式碼宣告且產生一個BluetoothAdapter類別的物件,其名稱為mBTadapter;

BluetoothAdapter mBTadapter = BluetoothAdapter.getDefaultAdapter();

我們要先判斷mBTadapter是否物件化成功,即mBTadapter != null,如果mBTadapter == null,就表示我們的Android 手機沒有藍芽功能。

接著,我們可以嘗試使用幾個BluetoothAdapter提供的方法,例如; isEnabled(), disable()
isEnabled()用來判斷藍芽裝置目前是否已經準備好了可以開啟,如果回傳值是true,表示可以打開藍芽裝置。要開啟藍芽裝置可以透過startActivityForResult()這個方法來達成,程式片段如下;
Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(intent, REQUEST_BT_ENABLE);
其中,REQUEST_BT_ENABLE是自己定義的整數其值必須大於零。

disable(),則是用來關閉藍芽裝置。

整個程式的原始碼加入藍色字體的部分即可

public class MainActivity extneds ActionBarActivity {
    private static final int REQUEST_BT_ENABLE = 2;
    BluetoothAdapter mBTadapter = BluetoothAdapter.getDefaultAdapter();

    public void BTOn(View view) {
        if(!mBTadapter.isEnable()) {
            Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
            startActivityForResult(intent, REQUEST_BT_ENABLE);
        } else {
            Toast.makeText(getApplicationContext(), "已經開啟", Toast.LENGTH_LONG).show();
        }
    }
    
    public void BTOff(View view) {
          if(mBTadapter.isEnable()) {
            mBTadapter.disable();
            Toast.makeText(getApplicationContext(), "關閉藍芽", Toast.LENGTH_LONG).show();
        } else {
            Toast.makeText(getApplicationContext(), "已經開啟", Toast.LENGTH_LONG).show();
        }
    }
}

activity_main.xml 加入
<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:onClick="BTOn"
    android:text="@string/button_on"
    android:id="@+id/button" />
<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:onClick="BTOff"
    android:text="@string/button_off"
    android:layout_alignTop="@+id/button"
    android:layout_centerHorizontal="true" />

strings.xml加入
<string name="button_on">開啟藍芽</string>
<string name="button_off">關閉藍芽</string>

最後,AndroidManifest.xml要加入
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>

程式開始執行的畫面





















按下開啟藍芽之後,請求允許開啟藍芽的權限




















按下關閉藍芽之後,藍芽裝置即被關閉