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

参考

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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Android系统攻城狮

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值