2012-10-22 38 views
11

Tôi có hai thiết bị bluetooth được ghép nối (đơn vị đầu của ô tô cho âm thanh điện thoại và bộ thu bluetooth riêng biệt cho A2DP). Trên điện thoại của tôi có một hộp kiểm cho "Sử dụng cho âm thanh phương tiện truyền thông" mà tôi phải tự chuyển đổi cho đầu ra A2DP của tôi để đi đến loa của chiếc xe của tôi. Mục tiêu của tôi là để chuyển đổi chương trình này.Toggling Thiết bị A2DP (Android)

Tôi đã thử sử dụng cả lớp AudioManager với setBluetoothA2dpOn không dùng nữa và setBluetoothScoOn nhưng dường như không có hiệu ứng nào. Tôi đã có thể nhận được một danh sách các thiết bị ghép nối bluetooth và có được một xử lý để kết nối tôi muốn chuyển đổi nhưng tôi dường như không thể làm cho nó khá đúng. Tôi cũng đã cố gắng nhận được bộ điều hợp bluetooth mặc định và sau đó sử dụng getProfileProxy nhưng tôi cảm thấy như tôi đang sủa cây sai ở đó.

Có ai có thể chỉ cho tôi đúng hướng không? Về cơ bản tất cả những gì tôi muốn làm là tương đương với việc kiểm tra hộp "Sử dụng cho âm thanh đa phương tiện".

+1

điện thoại này là gì, cài đặt có xuất hiện trên dòng thiết bị nexus không? – nandeesh

+0

Chiếc điện thoại tôi đang sử dụng là Galaxy S3 w/AT & T. Tôi không thể chắc chắn liệu nó sẽ có mặt ở đó, nhưng tôi sẽ tưởng tượng nó sẽ xảy ra. – JamesB41

Trả lời

0

Trước tiên, bạn cần phải thiết lập chương trình để kích hoạt Bluetooth trên điện thoại và chọn thiết bị mà nó nên ghép với qua

bluetoothAdapter.disable()/enable() 

(im không chắc chắn về các cặp đôi nhưng điều này phải được thực hiện thông qua một số cấu hình hoạt động)

Sau đó, bạn nên thiết lập A2DP để kết nối với xe stereo

theo liên kết này để thử và tìm ra mã cho nó, nếu tôi có thời gian tôi sẽ cố gắng và tìm thấy nó cho bạn, nhưng một sự khởi đầu của nó = ]

hidden & internal api's

3

Cách đây một thời gian ngắn, tôi đã gặp sự cố tương tự khi thử kết nối thiết bị bluetooth với điện thoại Android. Mặc dù hồ sơ thiết bị của bạn khác nhau, tôi nghĩ rằng giải pháp là như nhau.

Trước tiên, bạn cần tạo ra một gói phần mềm trong dự án của bạn được đặt tên android.bluetooth và đặt sau IBluetoothA2dp.aidl trong đó:

package android.bluetooth; 

import android.bluetooth.BluetoothDevice; 

/** 
* System private API for Bluetooth A2DP service 
* 
* {@hide} 
*/ 
interface IBluetoothA2dp { 
    boolean connectSink(in BluetoothDevice device); 
    boolean disconnectSink(in BluetoothDevice device); 
    boolean suspendSink(in BluetoothDevice device); 
    boolean resumeSink(in BluetoothDevice device); 
    BluetoothDevice[] getConnectedSinks(); 
    BluetoothDevice[] getNonDisconnectedSinks(); 
    int getSinkState(in BluetoothDevice device); 
    boolean setSinkPriority(in BluetoothDevice device, int priority); 
    int getSinkPriority(in BluetoothDevice device); 

    boolean connectSinkInternal(in BluetoothDevice device); 
    boolean disconnectSinkInternal(in BluetoothDevice device); 
} 

Sau đó, để truy cập vào các chức năng, đặt lớp sau trong dự án của bạn:

public class BluetoothA2dpConnection { 

private IBluetoothA2dp mService = null; 

public BluetoothA2dpConnection() { 

    try { 
     Class<?> classServiceManager = Class.forName("android.os.ServiceManager"); 
     Method methodGetService = classServiceManager.getMethod("getService", String.class); 
     IBinder binder = (IBinder) methodGetService.invoke(null, "bluetooth_a2dp"); 
     mService = IBluetoothA2dp.Stub.asInterface(binder); 
    } catch (ClassNotFoundException e) { 
     e.printStackTrace(); 
    } catch (SecurityException e) { 
     e.printStackTrace(); 
    } catch (NoSuchMethodException e) { 
     e.printStackTrace(); 
    } catch (IllegalArgumentException e) { 
     e.printStackTrace(); 
    } catch (IllegalAccessException e) { 
     e.printStackTrace(); 
    } catch (InvocationTargetException e) { 
     e.printStackTrace(); 
    } 
} 

public boolean connect(BluetoothDevice device) { 
    if (mService == null || device == null) { 
     return false; 
    } 
    try { 
     mService.connectSink(device); 
    } catch (RemoteException e) { 
     e.printStackTrace(); 
     return false; 
    } 
    return true; 
} 

public boolean disconnect(BluetoothDevice device) { 
    if (mService == null || device == null) { 
     return false; 
    } 
    try { 
     mService.disconnectSink(device); 
    } catch (RemoteException e) { 
     e.printStackTrace(); 
     return false; 
    } 
    return true; 
} 

}

Cuối cùng, để kết nối điện thoại của bạn A2DP, chọn một Blu etoothDevice từ danh sách các thiết bị được ghép đôi và gửi nó làm tham số của phương thức connect. Đảm bảo chọn thiết bị có cấu hình chính xác, nếu không bạn sẽ có ngoại lệ.

Tôi đã thử nghiệm giải pháp này trong điện thoại có phiên bản Android 2.3 và nó hoạt động tốt.

Xin lỗi vì bất kỳ lỗi nào về tiếng Anh. Tôi hy vọng điều này có thể giúp bạn.

+0

Tôi không thấy nơi "Stub" được triển khai trong loại IBluetoothA2dp, vui lòng làm rõ? – digiphd

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