您的位置:首页 > 移动开发 > Android开发

android5.1蓝牙反向控制(Avrcp协议)流程

2017-06-22 17:15 1146 查看
参考


1.APP

  private BluetoothAvrcpController mAvrcpController;

  List<BluetoothDevice> devices = mAvrcpController.getConnectedDevices(); 

  for(BluetoothDevice device : devices)

  {

    mAvrcpController.sendPassThroughCmd(device, 68, BluetoothAvrcp.PASSTHROUGH_STATE_PRESS);

    mAvrcpController.sendPassThroughCmd(device, 68, BluetoothAvrcp.PASSTHROUGH_STATE_RELEASE);

  }

2.frameworks/base/core/java/android/bluetooth/BluetoothAvrcpController.java

  public void sendPassThroughCmd(BluetoothDevice device, int keyCode, int keyState)

  {

    mService.sendPassThroughCmd(device, keyCode, keyState);  

  }

3.packages/apps/Bluetooth/src/com/android/bluetooth/avrcp/AvrcpControllerService.java

     private native boolean sendPassThroughCommandNative(byte[] address, int keyCode, int keyState);

  (1)public void sendPassThroughCmd(BluetoothDevice device, int keyCode, int keyState)

     {

      Message msg = mHandler.obtainMessage(MESSAGE_SEND_PASS_THROUGH_CMD, keyCode, keyState, device);

      mHandler.sendMessage(msg);

     }

  (2)private final class AvrcpMessageHandler extends Handler

     {

        public void handleMessage(Message msg)

        {

         switch (msg.what)

         {                                                                                                                                                                                

           case MESSAGE_SEND_PASS_THROUGH_CMD:                                                                                                                                                                

               if (DBG) Log.v(TAG, "MESSAGE_SEND_PASS_THROUGH_CMD");                                                                                                                                          

               BluetoothDevice device = (BluetoothDevice)msg.obj;                                                                                                                                             

               sendPassThroughCommandNative(getByteAddress(device), msg.arg1, msg.arg2);                                                                                                                      

               break;                                                                                                                                                                                         

         }

     }

4.packages/apps/Bluetooth/jni/com_android_bluetooth_avrcp_controller.cpp

  static jboolean sendPassThroughCommandNative(JNIEnv *env, jobject object, jbyteArray address, jint key_code, jint key_state)

  {

    sBluetoothAvrcpInterface->send_pass_through_cmd((bt_bdaddr_t *)addr,uint8_t)key_code, (uint8_t)key_state))!= BT_STATUS_SUCCESS);

  } 

5.external/bluetooth/bluedroid/btif/src/btif_rc.c

  static bt_status_t send_passthrough_cmd(bt_bdaddr_t *bd_addr, uint8_t key_code, uint8_t key_state)

  {

    bt_status_t tran_status = get_transaction(&p_transaction); 

    BTA_AvRemoteCmd();

  }

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: