2016-08-22 96 views
0

我目前正在製作一個根據您連接的藍牙設備調整音量的應用程序。設備連接時的Android藍牙檢測問題

我有問題,當我想改變音樂的音量

當一個藍牙設備連接我的應用程序檢測,它可以改變音量,但它像它去得太快

這裏是一些代碼:

private final BroadcastReceiver mReceiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     String action = intent.getAction(); 
     BluetoothDevice d = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); 

     if (BluetoothDevice.ACTION_ACL_CONNECTED.equals(action)) { 
      deviceConnected(d); 
     } 
     else if (BluetoothDevice.ACTION_ACL_DISCONNECTED.equals(action)) { 
      deviceDisconnected(d); 
     } 
    } 
}; 

private void deviceConnected(BluetoothDevice bluetoothDevice) { 
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); 
    boolean showToasts = prefs.getBoolean("show_toasts", false); 
    if (showToasts) { Toast.makeText(this, getResources().getString(R.string.connected_to) + " " + bluetoothDevice.getName(), Toast.LENGTH_SHORT).show(); } 

    mDeviceDAO = new DeviceDAO(this); 
    mDeviceDAO.open(); 

    DeviceOptions device = mDeviceDAO.select(bluetoothDevice.getAddress()); 
    if (device == null) { return; } 

    if(device.getActivated() == 0) { 
     return; 
    } 

    int v = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC); 
    saveLastVolume(v); 

    int volume = device.getVolume(); 

    int flag = 0; 
    if(prefs.getBoolean("show_am_ui", false)) { 
     flag = AudioManager.FLAG_SHOW_UI; 
    } 
    mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, 
      volume, 
      flag); 
} 

如果當我改變音量周圍添加3000ms的延遲,它會正常工作,但它不是一個乾淨的解決方案。事實上,連接的祝酒會在藍牙設備「完全」連接之前顯示。

我還發現一個應用程序可以做同樣的事情,但似乎我正在做同樣的事情。

Here is its githublink

回答

0

什麼是你的捕捉是ACL connectedACL disconnected,是的,你是對的,一旦你的麪包出現即連接並不意味着連接藍牙配置文件(你說什麼「完全」連接)的ACL,它僅意味着兩個設備之間建立的物理連接,您可能還會接收其他事件,例如HFP/A2dp連接,這是連接的真實配置文件。

但是ACL disconnected是藍牙連接真正斷開的里程碑。

+0

謝謝你的awnser,我做了一些研究,並且發現了類「BluetoothA2dp」,這裏有getConnectionState函數可以幫助我。但我需要一個偵聽器來檢測變化,但我找不到注意。 –

+0

你也可以參考'BluetoothHeadset'的ACTION_CONNECTION_STATE_CHANGED。這也是Android上最常用的配置文件連接的參考。 –

+0

謝謝你的awnsers,我最終設法通過監聽BluetoothA2dp.ACTION_PLAYING_STATE_CHANGED(用於連接)和BluetoothA2dp.ACTION_CONNECTION_STATE_CHANGED(當它斷開連接時) –