我需要通過簡單按下按鈕連接定義的BT設備。
要求是用戶不應該收到任何通知對話框,因爲在使用標準套接字方法的情況下。
在我的項目中我使用了this solution。 代碼爲下一:如何在Android 4.2上使用反射連接配對的藍牙A2dp設備?
/**
* Return system service to work with A2DP
*
* @return bluetooth interface
*/
private static IBluetoothA2dp getIBluetoothA2dp() {
IBluetoothA2dp ibta = null;
try {
final Class serviceManager = Class.forName("android.os.ServiceManager");
final Method getService = serviceManager.getDeclaredMethod("getService", String.class);
final IBinder iBinder = (IBinder) getService.invoke(null, "bluetooth_a2dp");
final Class iBluetoothA2dp = Class.forName("android.bluetooth.IBluetoothA2dp");
final Class[] declaredClasses = iBluetoothA2dp.getDeclaredClasses();
final Class c = declaredClasses[0];
final Method asInterface = c.getDeclaredMethod("asInterface", IBinder.class);
asInterface.setAccessible(true);
ibta = (IBluetoothA2dp) asInterface.invoke(null, iBinder);
} catch (final Exception e) {
Log.e("Error " + e.getMessage());
}
return ibta;
}
它運作良好,直到我開始了我的應用程序在Android 4.2。現在我無法獲得IBluetoothA2dp接口,因爲getService()方法不會返回帶有「bluetooth_a2dp」鍵的IBinder。
有人可以幫我嗎?
在此先感謝!
你不需要爲此反思,是嗎?這是一種黑客攻擊,並且可能不可靠。 –
其實我需要反思。我有要求避免任何對話和通知,這就是爲什麼我使用這種黑客。是的,這絕對是不可靠的,但直到谷歌改變英國電信協議棧之前,它在2.3到4.1之間沒有任何問題。 – dmitriyzaitsev
你在說什麼對話框? –