BluetoothDevice.getName

BluetoothDevice.getNameで、Bluetooth機器名を取得する。

BluetoothDevice  |  Android Developers

CustomReceiver.javaで、

bluetoothDevice.getNameで取得した名前をToast表示。

nullが多い
nullが多い

nullが多い。

1個だけ
1個だけ

1個だけ。

DesireだとEssentialとれた
DesireだとEssentialとれた

DesireだとEssentialとれた。

Sample/android/BluetoothDevice/getName/src/BluetoothDevice at master · bg1bgst333/Sample · GitHub

BluetoothDevice

BluetoothDevice.ACTION_FOUNDによって、Bluetooth機器が見つかった時、見つかった機器の情報はBluetoothDeviceオブジェクトで渡される。

BluetoothDevice  |  Android Developers

CustomReceiver.javaで、

BluetoothDevice.ACTION_FOUNDの時、intent.getParcelableExtraでBluetoothDevice.EXTRA_DEVICEを指定すると、見つかった機器情報がBluetoothDeviceオブジェクトとして取得できる。
bluetoothDevice.toStringでそのままToast表示するようにしてみる。

起動時
起動時

起動時。

ダイアログで許可
ダイアログで許可

ダイアログで許可。

探索開始
探索開始

探索開始。

toStringでアドレスが出た
toStringでアドレスが出た

toStringでアドレスが出た。

また別のが出てきた
また別のが出てきた

また別のが出てきた。

他にもたくさん出てきた後に探索終了
他にもたくさん出てきた後に探索終了

他にもたくさん出てきた後に探索終了。

Sample/android/BluetoothDevice/BluetoothDevice/src/BluetoothDevice at master · bg1bgst333/Sample · GitHub

BluetoothDevice.ACTION_FOUND

Bluetooth機器が見つかった時は、BluetoothDevice.ACTION_FOUNDが来るはずである。

BluetoothDevice  |  Android Developers

Desireでやってみると、

起動時
起動時

起動時はこうで、Button1を押すと、

ダイアログが出てきて
ダイアログが出てきて

はいを押すと、

ACTION_DISCOVERY_STARTED
ACTION_DISCOVERY_STARTED

ACTION_DISCOVERY_STARTEDの後に、

ACTION_FOUNDが来る
ACTION_FOUNDが来る

ACTION_FOUNDが来る。

利用可能なデバイスを発見する方法 - Bluetooth - Android 開発入門

Essentialは、6.0以降なので、ACCESS_FINE_LOCATIONが必要。
AndroidManifest.xmlで、

こうすると、Essentialでも、

ACTION_DISCOVERY_STARTED
ACTION_DISCOVERY_STARTED

ACTION_DISCOVERY_STARTEDの後に、

ACTION_FOUND
ACTION_FOUND

ACTION_FOUNDが来る。

Sample/android/BluetoothDevice/ACTION_FOUND/src/BluetoothDevice at master · bg1bgst333/Sample · GitHub

BluetoothAdapter.startDiscovery

BluetoothAdapter.startDiscoveryで、Bluetooth機器を探索する。

BluetoothAdapter  |  Android Developers

AndroidManifest.xmlで、

探索する場合は、uses-permissionに"android.permission.BLUETOOTH_ADMIN"が無いと落ちてしまう。
あとは、CustomReceiverのインテントフィルタをセット。
"android.bluetooth.adapter.action.DISCOVERY_STARTED", "android.bluetooth.adapter.action.DISCOVERY_FINISHED", "android.bluetooth.device.action.FOUND"の3つをとりあえずおいておく。
CustomReceiver.javaを追加し、

それぞれのactionが来たらToastを出す。
MainActivity.javaで、

許可を押したらstartDiscoveryで探索。
BluetoothをOFFにしておいて、

許可を押す
許可を押す

許可を押す。

ACTION_DISCOVERY_STARTEDで開始
ACTION_DISCOVERY_STARTEDで開始

ACTION_DISCOVERY_STARTEDで探索の開始。

ACTION_DISCOVERY_FINISHEDで探索の終了
ACTION_DISCOVERY_FINISHEDで探索の終了

ACTION_DISCOVERY_FINISHEDで探索の終了。
ACTION_FOUNDが出てこなかったなあ・・・。

Sample/android/BluetoothAdapter/startDiscovery/src/BluetoothAdapter at master · bg1bgst333/Sample · GitHub

BluetoothAdapter.ACTION_REQUEST_ENABLE

BluetoothAdapter.ACTION_REQUEST_ENABLEを投げる事で、Bluetooth利用許可ダイアログを出せる。

BluetoothAdapter  |  Android Developers

MainActivity.javaで、

startActivityForResultにして、onActivityResultでどっちが選択されたかを判定できる。

OFFの時
OFFの時

OFFの時。

この状態でButton1を押す
この状態でButton1を押す

この状態でButton1を押す。

ダイアログが出る
ダイアログが出る

ダイアログが出る。
バックキーや許可しないを押すと、

Cancel
Cancel

Cancel。
許可だと、

OK
OK

OK。
(バックキーと許可しないで動作が違ったらどうしようかとおもったけど、そんなことはなかった。)

で、ちゃんとONになってる。
で、ちゃんとONになってる。

で、ちゃんとONになってる。

Sample/android/BluetoothAdapter/ACTION_REQUEST_ENABLE/src/BluetoothAdapter at master · bg1bgst333/Sample · GitHub

BluetoothAdapter.isEnabled

BluetoothAdapter.isEnabledで、利用可能かどうかをチェックする。

BluetoothAdapter  |  Android Developers

利用可能でない場合だけ、利用可能にする許可ダイアログを表示する。
MainActivity.javaで、

bluetoothAdapter.isEnabledが偽の時だけ、BluetoothAdapter.ACTION_REQUEST_ENABLEのIntentを投げる。

ONの時
ONの時

ONの時。

Button1押しても何も起きない
Button1押しても何も起きない

Button1押しても何も起きない。

OFFの時
OFFの時

OFFの時。

これのButton1を押してみる
これのButton1を押してみる

これのButton1を押してみる。

このメッセージが出るので許可すると
このメッセージが出るので許可すると

このメッセージが出るので許可すると、

ONに切り替わる
ONに切り替わる

ONに切り替わる。

Sample/android/BluetoothAdapter/isEnabled/src/BluetoothAdapter at master · bg1bgst333/Sample · GitHub

BluetoothAdapter.getDefaultAdapter

AndroidBluetooth関連トピックを再開。

BluetoothAdapter  |  Android Developers

getDefaultAdapterでデフォルトのアダプタインスタンスを取得。
実機の場合は取得できたが、エミュレータの場合はどうなるか。
strings.xmlで、

Button1。
activity_main.xmlで、

Button。
MainActivity.javaで、

BluetoothAdapter.getDefaultAdapterでインスタンス取得できるかnullかを試す。
AndroidManifest.xmlで、

android.permission.BLUETOOTHを書いている。

右下のSettingsを押す
右下のSettingsを押す

右下のSettingsを押す。

BluetoothはOFF
BluetoothはOFF

BluetoothはOFF。

起動時
起動時

起動時。
Button1を押すと、

not supportedなのでnullが返ってきてる
not supportedなのでnullが返ってきてる

not supportedなのでnullが返ってきてる。

BluetoothをONにする
BluetoothをONにする

BluetoothをONにする。

ONOFF関係なくエミュレータはnot supportedみたい
ONOFF関係なくエミュレータはnot supportedみたい

ONOFF関係なくエミュレータはnot supportedみたい。

Sample/android/BluetoothAdapter/getDefaultAdapter/src/BluetoothAdapter at master · bg1bgst333/Sample · GitHub