2010-07-02 38 views
21

Có, tôi biết Android đã triển khai Tai nghe Bluetooth Tiểu sử, nhưng nó nằm trong Vai trò cổng âm thanh, không có trong Vai trò HeadSet.Làm cách nào để biến điện thoại Android thành tai nghe bluetooth?

Điều tôi muốn làm là phát triển một ứng dụng trên điện thoại Android mà sẽ hoạt động như tai nghe bluetooth, vì vậy nó có thể kết nối với máy tính xách tay của tôi bằng cách bluetooth. Khi tôi gọi điện cho ai đó, tôi có thể sử dụng điện thoại để gọi cho anh ấy và ứng dụng sẽ chuyển tiếp giọng nói qua bluetooth tới máy tính xách tay của tôi, và một ứng dụng khác chạy trên máy tính xách tay sẽ nhận dữ liệu thoại và chuyển tiếp đến Skype hoặc GTalk hoặc một số chương trình VoIP khác.

Nói cách khác, làm cách nào để triển khai Hồ sơ tai nghe trong Tai nghe Vai trò trên điện thoại Android? Cảm ơn trước!

+0

Tôi muốn có tính năng tương tự. tôi muốn thực hiện cuộc gọi từ máy tính có âm thanh (VOICE_DOWNLINK) gửi lại cho máy tính như một chiếc điện thoại loa. nhưng giữ micrô ở điện thoại – Mark

+0

Đây không phải là yêu cầu tầm thường; trong bluez ở mức tối thiểu bạn sẽ cần a) thêm vai trò rảnh tay vào bản ghi SDP. b) Xóa cổng âm thanh khỏi bản ghi SDP. c) Thay đổi loại thiết bị của điện thoại để bắt chước tai nghe. Đây chỉ là kết nối qua cấu hình rảnh tay. Theo như gửi âm thanh, vv, đó là một thách thức khác. Tôi không chắc chắn rằng bluedroid thậm chí có hỗ trợ cho điều này, bạn có thể cần một hạt nhân tùy chỉnh. – TwinPrimesAreEz

Trả lời

4

Từ phía bên android, tôi nghĩ rằng giải pháp tốt nhất là để mở kết nối với dịch vụ trong máy tính của bạn:

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

Nhận nó như một OutputStream:

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

và sau đó sử dụng số AudioRecord để gửi dữ liệu được ghi lại:

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); 
} 

Tất cả điều này nên được thực hiện trên một chuỗi riêng biệt của khóa học để tránh bị rơi ứng dụng và một cơ chế để xử lý khi dừng ghi hoặc kết nối bị mất. Ngoài ra, tôi khá chắc chắn nó sẽ làm việc qua wifi mặc dù tôi không chắc chắn nếu nó sẽ giống nhau với bluetooth (mặc dù hầu hết các thiết bị với BT có wifi bây giờ một ngày và bạn nhận được nhiều băng thông)

Tôi chưa kiểm tra mã này vì vậy tôi không chắc chắn 100% nó sẽ hoạt động.

Điều tiếp theo sẽ có trên máy để chuyển âm thanh vào ứng dụng mong muốn, nhưng đó là trên kinh nghiệm của tôi. Tôi tưởng tượng bạn sẽ phải làm một trình điều khiển ảo hoặc một cái gì đó như thế. Cũng sẽ phải thực hiện cơ chế nghịch đảo cho âm thanh được gửi từ ứng dụng dành cho máy tính để bàn vào điện thoại (tôi khá quan tâm đến phần đó vì sẽ tạo ra tai nghe không dây tốt để xem phim).

Dưới đây là 2 xu của tôi; Tôi háo hức muốn biết nếu nó hoạt động. ;)

+0

Ghi lại luồng âm thanh từ đường dây điện thoại trong khi cuộc gọi thoại bị chặn trên hầu hết các điện thoại Android ở cấp độ phần mềm/trình điều khiển. Bạn có thể sử dụng hạt nhân tùy chỉnh để mở khóa chức năng như vậy trên một số điện thoại. – kord

1

Tôi không biết nếu tôi hiểu câu hỏi thực sự hay mục tiêu chính của bạn ... nhưng tôi đã đăng here cách nhận và gửi âm thanh từ tai nghe của bạn qua bluetooth trong Android.

Tôi hy vọng sẽ giúp bạn ...

Các vấn đề liên quan