web-dev-qa-db-ja.com

Android携帯電話をBluetoothヘッドセットとして作成する方法は?

はい、わかりましたAndroidはすでにBluetoothヘッドセットプロファイルを実装していますが、ヘッドセットロールではなく、オーディオゲートウェイロールにあります。

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

言い換えれば、Android電話?)のヘッドセットロールにヘッドセットプロファイルを実装するにはどうすればよいですか。

21
ET Worker

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

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

それをOutputStreamとして取得します。

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

次に、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を搭載したほとんどのデバイスでは、現在1日でWi-Fiを利用でき、より多くの帯域幅を利用できます)。

私はこのコードをテストしていないので、機能するかどうかは100%わかりません。

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

これが私の2セントです。うまくいくかどうか知りたいです。 ;)

4
pablisco

私は本当の質問またはあなたの主な目標を理解したかどうかわかりません...しかし、私は投稿しました here AndroidでBluetoothを介してヘッドセットから音を受信および送信する方法。

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

1
SerSánGal