web-dev-qa-db-ja.com

Bluetooth OBEXオブジェクトプッシュプロファイル(OPP)を使用したファイルの送信

Android OBEXを使用するBluetooth APIを使用してファイルを送信する方法はありますか?

OBEX OPPのみをサポートするプリンターにファイルを送信する必要があります。

AndroidインテントACTION_SENDを使用して問題なくプリンターにファイルを送信できますが、プログラムで送信する必要があります。

CreateRfcommSocketToServiceRecord()メソッドでOBEX OPP UUID(1105)を使用してBluetoothプリンターに接続できますが、OBEXを使用してファイルを送信するにはobex仕様に従う必要があります。出力ソケットにバイトを書き込むほど簡単ではありません。 。

しかし、ACTION_SENDインテントがこれを処理できる場合、開発者がファイルを送信するためのAPIがないのはなぜですか?

BlueCoveのようないくつかのサードパーティのライブラリもチェックしましたが、動作しませんでした。(Nexus One&Galaxy Tabは、ネイティブライブラリbluecove_armv71が利用できないことを示す例外をスローします..およびLG Optimus Oneによると、bluecove_armv61は使用できません。

私は行き詰まっています、何かアイデアはありますか?

実用的なソリューション

運が悪いのでBluetoothデバイスにファイルを送信しようとする人のために、コンテンツプロバイダーを使用した実用的なソリューションを提供します(KPBirdに感謝):

JavaクラスBluetoothSharehere から取得します

次のコードは、SDカード上のファイルをBluetoothデバイスに送信します。

BluetoothDevice device;
String filePath = Environment.getExternalStorageDirectory().toString() + "/file.jpg";

ContentValues values = new ContentValues();
values.put(BluetoothShare.URI, Uri.fromFile(new File(filePath)).toString());
values.put(BluetoothShare.DESTINATION, device.getAddress());
values.put(BluetoothShare.DIRECTION, BluetoothShare.DIRECTION_OUTBOUND);
Long ts = System.currentTimeMillis();
values.put(BluetoothShare.TIMESTAMP, ts);
Uri contentUri = getContentResolver().insert(BluetoothShare.CONTENT_URI, values);

[〜#〜]更新[〜#〜]

上記のソリューションで問題が発生している人もいます。次のデバイスでテストされています。

動作します:

  • LG Optimus One(Android 2.1)
  • HTC Desire(Android 2.2)
  • Google Nexus One(Android 2.2および2.3)
  • Samsung Galaxy S2(Android 4.0.3)
  • HTC Amaze(Android 2.3.4)

に問題があります:

  • LG P500(Android 2.3.3)
  • Galaxy TAB P500(Android 2.2)
  • Google Nexus S(Android 4.1.2)

上記以外のデバイスでこのスニペットをテストできる場合は、デバイスの詳細を提供してください(ブランド、名前、Androidバージョンなど)テストしたテスト結果とテスト結果を、以下のコメントで、あなたのデータを含めて質問を更新します。

23
BFil

提供された答えをテストするために サンプルアプリケーション を作成しました。残念ながらそれは私にとってはうまくいきませんので、この質問は完全に答えられていないと思います。

4
Diego

Androidでサポートがあると思います。Android/ packages/apps/Bluetooth /...../ opp/*。Javaにパスがあります

あなたのバージョンにこれがない場合、私はAndroidでOBEX OPPを使用するのに役立つ便利なリンクを見つけました。 Androidここでフレームワークの変更が必要です。

http://i-miss-erin.blogspot.in/2009/10/how-to-have-obex-function-in-Android.html

3
Ajay Soman

OBEXにアクセスするためのパブリックAPIはありません。なぜAPIがないのか-Googleが最もよく知っています:)

2
Dennis Mathews

一部のSamsung製の携帯電話では問題なく機能するが、他のSamsungの携帯電話では機能しないとのことです。次に、「BluetoothShare」を使用して簡単なテストプログラムを作成し、テストのために電話を借りるように友達に依頼しました...

  1. HTC Incredibleでは機能しません
  2. SonyEricsson Xperia arc Sで動作します

したがって、一部の電話はこれらのBluetoothShareコードと互換性がないと思います...

0
Arthur Huang