21

はい、Android が既に Bluetooth ヘッドセット プロファイルを実装していることは知っていますが、これはヘッドセット ロールではなく、オーディオ ゲートウェイ ロールにあります。

私がやりたいのは、Bluetooth ヘッドセットとして機能する Android フォンでアプリケーションを開発することです。これにより、Bluetooth でラップトップに接続できます。誰かに電話をかけようとすると、自分の電話を使って電話をかけることができ、アプリケーションが Bluetooth 経由で音声をラップトップに転送し、ラップトップで実行されている別のアプリケーションが音声データを取得して、Skype や GTalk などに転送します。その他の VoIP プログラム。

つまり、Android フォンのヘッドセット ロールでヘッドセット プロファイルを実装するにはどうすればよいですか? 前もって感謝します!

4

2 に答える 2

4

Android側から見ると、コンピューターでサービスへの接続を開くのが最善の解決策だと思います。

URL url = new URL("http://192.186.0.1/path/to/service");
URLConnection connection = url.openConnection();

OutputStream として取得します。

OutputStream out = new BufferedStream(connection.getOutputStream());

次に、 a を使用しAudioRecordて、記録されたデータを送信します。

public static final int DEFAULT_SAMPLE_RATE = 8000; 
private static final int DEFAULT_BUFFER_SIZE = 4096; 
private static final int CALLBACK_PERIOD = 4000;

AudioRecord recorder = new AudioRecord(MediaRecorder.AudioSource.DEFAULT, 
            DEFAULT_SAMPLE_RATE, AudioFormat.CHANNEL_CONFIGURATION_DEFAULT, 
            AudioFormat.ENCODING_DEFAULT, DEFAULT_BUFFER_SIZE);
recorder.setPositionNotificationPeriod(CALLBACK_PERIOD);

int bytesRead = 0;
ByteBuffer buffer = ByteBuffer.allocateDirect(DEFAULT_BUFFER_SIZE);
while ((bytesRead = recorder.read(buffer, DEFAULT_BUFFER_SIZE)) > 0) {
    out.write(buffer.array(), 0, bytesRead);
}

もちろん、これはすべて別のスレッドで実行して、アプリのクラッシュを回避し、記録が停止したり接続が失われたりしたときに処理するメカニズムを実行する必要があります。また、Bluetooth で同じになるかどうかはわかりませんが、Wi-Fi で動作するはずだと確信しています (ただし、BT を搭載したほとんどのデバイスには Wi-Fi があり、より多くの帯域幅が得られます)。

私はこのコードをテストしていないので、100% うまくいくとは確信していません。

次の作業は、マシン上でオーディオを欲望アプリに転送することですが、それは私の経験を超えています. 仮想ドライバーなどを実行する必要があると思います。また、デスクトップ アプリから電話に送信されるオーディオに対して逆のメカニズムを実行する必要があります (映画を見るための優れたワイヤレス ヘッドセットにもなるので、私はその部分にかなり興味があります)。

これが私の 2 セントです。それが機能するかどうか知りたいです。;)

于 2011-09-30T10:09:06.687 に答える
1

本当の質問を理解したのか、それともあなたの主な目標を理解したのかわかりません...しかし、アンドロイドでBluetooth経由でヘッドセットから音を送受信する方法をここに投稿しました。

お役に立てれば幸いです...

于 2013-06-01T19:38:34.373 に答える