Bluetooth自動ペアリングは可能か

8,908 views
Skip to first unread message

Hiro

unread,
Oct 7, 2010, 11:39:37 AM10/7/10
to 日本Androidの会
こんにちは、Hiroakiと申します。

私はAndroidアプリでBluetoothペアリングを自動で行えないかを検討しています。
リフレクションでsetPin()によりPINを設定し、createBond()によってペアリングを試みているのですが、
通常のペアリングのようにPIN要求画面が出てきてしまいます。
ログをとってみると以下の表記があありました。

10-06 17:26:23.035: WARN/BluetoothDeviceService(979): setPin(00:1B:
41:02:B4:86) called but no native data available, ignoring. Maybe the
PasskeyAgent Request was cancelled by the remote device or by bluez.

setPin()はbooleanですが、falseが返ってきてしまいます。
具体的な引数は、setPin(相手デバイスアドレス,PIN); です。
記述のタイミングが間違っている可能性も考えましたが、
何よりsetPin()をどのタイミングで使えばいいか分からないので困っています。
(例えば、REQUEST_PAIRINGなど)

私が考えている方法では自動ペアリングはできないでしょうか。
ご意見お聞かせください。宜しくお願いします。


Hiroaki

比嘉健太郎

unread,
Oct 7, 2010, 9:03:40 PM10/7/10
to android-g...@googlegroups.com
To Hiroakiさん

こんにちは、Ramencozoと申します。
自分も同じことをやっていましたので、お伝えします。

自分のプロジェクトの場合:
Android ver -> 1.6
基にしたプロジェクト -> esmasui先生の「backport-android-bluetooth」の「BluetoothChat」
PINコード -> 0000 に固定
確認した実機 -> HT-03(DoCoMo)

下記「BluetoothChat.java」内の記述、最下部の抜粋です。

// BluetoothChat.java
private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Log.d(TAG, "--onReceive(Context context, Intent intent)--");
String action = intent.getAction();
Log.d(TAG, "Action:" + action);

if (BluetoothDevice.ACTION_BOND_STATE_CHANGED.equals(action)) {
Log.d(TAG, "ACTION_BOND_STATE_CHANGED");
BluetoothDevice device = intent
.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
// If it's already paired, skip it, because it's been listed
// already

//Added
boolean a = device.createBond(device.getAddress());
boolean b = device.setPin(device.getAddress(), BluetoothDevice
.convertPinToBytes("0000"));
Log.d(TAG, "createBond:" + a + ", setPin:" + b);
if (a && b) {
Log.d(TAG, "AutoPairing Success !");
//Added_
}
}
}
};
 
「BluetoothChatService.java」内のconnectメソッドとconnectedメソッド内にも
上記コードの「//Added~//Added_」で囲ってある部分を書き足してます。
これで自分はうまくいきました。

ただし、セキュリティ等の観点から積極的に使用するのはどうか、
といったご意見もあるようです。(自分はとりあえずやってみたい、ということでやってみた次第です)

以上です。お役に立てれば幸いです。

Ramencozo

2010年10月8日0:39 Hiro <hiroaki...@gmail.com>:

--
このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
このグループから退会するには、android-group-j...@googlegroups.com にメールを送信してください。
詳細については、http://groups.google.com/group/android-group-japan?hl=ja からこのグループにアクセスしてください。


Hiro

unread,
Oct 8, 2010, 4:34:45 AM10/8/10
to 日本Androidの会
こんにちは、Ramencozoさん。
ご返信ありがとうございます。

同じことは既に試されていたのですね。
失礼いたしました。
Ramencozoさんの書いていただいた方法で後ほど試そうと思います。

>ただし、セキュリティ等の観点から積極的に使用するのはどうか、
>といったご意見もあるようです。

はい、Bluetoothに関しては十分にセキュリティに気をつけるべきだと考えています。

ご返信下さいましてありがとうございました。

以上

Hiroaki
> 2010年10月8日0:39 Hiro <hiroaki.emir...@gmail.com>:
>
>
>
> > こんにちは、Hiroakiと申します。
>
> > 私はAndroidアプリでBluetoothペアリングを自動で行えないかを検討しています。
> > リフレクションでsetPin()によりPINを設定し、createBond()によってペアリングを試みているのですが、
> > 通常のペアリングのようにPIN要求画面が出てきてしまいます。
> > ログをとってみると以下の表記があありました。
>
> > 10-06 17:26:23.035: WARN/BluetoothDeviceService(979): setPin(00:1B:
> > 41:02:B4:86) called but no native data available, ignoring. Maybe the
> > PasskeyAgent Request was cancelled by the remote device or by bluez.
>
> > setPin()はbooleanですが、falseが返ってきてしまいます。
> > 具体的な引数は、setPin(相手デバイスアドレス,PIN); です。
> > 記述のタイミングが間違っている可能性も考えましたが、
> > 何よりsetPin()をどのタイミングで使えばいいか分からないので困っています。
> > (例えば、REQUEST_PAIRINGなど)
>
> > 私が考えている方法では自動ペアリングはできないでしょうか。
> > ご意見お聞かせください。宜しくお願いします。
>
> > Hiroaki
>
> > --
> > このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
> > このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
> > このグループから退会するには、android-group-j...@googlegroups.com<android-gro-up-japan%2Bunsu...@googlegroups.com>にメールを送信してください。
> > 詳細については、http://groups.google.com/group/android-group-japan?hl=jaからこのグループにアクセスしてください。- 引用テキストを表示しない -
>
> - 引用テキストを表示 -
Reply all
Reply to author
Forward
0 new messages