日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

android车载蓝牙开发,车载蓝牙开发二

發布時間:2023/12/10 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android车载蓝牙开发,车载蓝牙开发二 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本篇主要實現藍牙電話,藍牙音樂,同步通訊錄通話記錄。藍牙的查找,連接可以看上一篇。

一:藍牙電話

藍牙電話主要用到BluetoothHeadsetClient這個類,目錄地址為frameworks\base\core\java\android\bluetooth\BluetoothHeadsetClient.java。

里面定義了很多廣播意圖,最有用的是這個action

/**

* Intent sent whenever state of a call changes.

*

*

It includes:

* {@link #EXTRA_CALL},

* with value of {@link BluetoothHeadsetClientCall} instance,

* representing actual call state.

*/

public static final String ACTION_CALL_CHANGED =

"android.bluetooth.headsetclient.profile.action.AG_CALL_CHANGED";

它監聽來電,接聽來電,去電,通話中等狀態,要想在車載設備中操作電話需要知道這些狀態。

private final BroadcastReceiver mReceiver = new BroadcastReceiver() {

@Override

public void onReceive(Context context, Intent intent) {

if (null != intent) {

String action = intent.getAction();

Log.i(TAG, "BTService receiver action == "+action);

//監聽來電

if (BluetoothHeadsetClient.ACTION_CALL_CHANGED.equals(action)) {

BluetoothHeadsetClientCall mCall = (BluetoothHeadsetClientCall) intent.getExtra(BluetoothHeadsetClient.EXTRA_CALL, null);

if (mCall != null) {

int callState = mCall.getState();

Log.d(TAG, "when call status changes: mConnStat is " + mConnStat+" number == "+mCall.getNumber());

if (callState == BluetoothHeadsetClientCall.CALL_STATE_INCOMING) {

//來電

} else if (callState == BluetoothHeadsetClientCall.CALL_STATE_DIALING) {

//去電

} else if (callState == BluetoothHeadsetClientCall.CALL_STATE_ACTIVE) {

//接聽中

} else if (callState == BluetoothHeadsetClientCall.CALL_STATE_TERMINATED) {

//結束

}

}

}

看下它的構造方法

BluetoothHeadsetClient(Context context, ServiceListener l) {

mContext = context;

mServiceListener = l;

mAdapter = BluetoothAdapter.getDefaultAdapter();

IBluetoothManager mgr = mAdapter.getBluetoothManager();

if (mgr != null) {

try {

mgr.registerStateChangeCallback(mBluetoothStateChangeCallback);

} catch (RemoteException e) {

Log.e(TAG,"",e);

}

}

doBind();

}

mBluetoothStateChangeCallback監聽藍牙打開或關閉狀態,重點看下doBind方法

boolean doBind() {

Intent intent = new Intent(IBluetoothHeadsetClient.class.getName());

ComponentName comp = intent.resolveSystemService(mContext.getPackageManager(), 0);

intent.setComponent(comp);

if (comp == null || !mContext.bindServiceAsUser(intent, mConnection, 0,

android.os.Process.myUserHandle())) {

Log.e(TAG, "Could not bind to Bluetooth Headset Client Service with " + intent);

return false;

}

return true;

}

其實就是去綁定一個service

private final ServiceConnection mConnection = new ServiceConnection() {

@Override

public void onServiceConnected(ComponentName className, IBinder service) {

if (DBG) Log.d(TAG, "Proxy object connected");

mService = IBluetoothHeadsetClient.Stub.asInterface(Binder.allowBlocking(service));

if (mServiceListener != null) {

mServiceListener.onServiceConnected(BluetoothProfile.HEADSET_CLIENT,

BluetoothHeadsetClient.this);

}

}

@Override

public void onServiceDisconnected(ComponentName className) {

if (DBG) Log.d(TAG, "Proxy object disconnected");

mService = null;

if (mServiceListener != null) {

mServiceListener.onServiceDisconnected(BluetoothProfile.HEADSET_CLIENT);

}

}

};

當服務連接時返回IBluetoothHeadsetClient并通知協議請求成功,這是aidl的客戶端,不了解aidl的去查看一下android跨進程通信相關知識。

/**

* Connects to remote device.

*

* Currently, the system supports only 1 connection. So, in case of the

* second connection, this implementation will disconnect already connected

* device automatically and will process the new one.

*

* @param device a remote device we want connect to

* @return true if command has been issued successfully;

* false otherwise;

* upon completion HFP sends {@link #ACTION_CONNECTION_STATE_CHANGED}

* intent.

*/

public boolean connect(BluetoothDevice device) {

if (DBG) log("connect(" + device + ")");

final IBluetoothHeadsetClient service = mService;

if (service != null && isEnabled() && isValidDevice(device)) {

try {

return service.connect(device);

} catch (RemoteException e) {

Log.e(TAG, Log.getStackTraceString(new Throwable()));

return false;

}

}

if (service == null) Log.w(TAG, "Proxy not attached to service");

return false;

}

連接設備就是調用服務端的connect方法。服務端的實現在packages\apps\Bluetooth\src\com\android\bluetooth\hfpclient\HeadsetClientService.java,有興趣的可以自己去看看服務端是如何實現的。

接聽電話

/**

* Accepts a call

*

* @param device remote device

* @param flag action policy while accepting a call. Possible values

* {@link #CALL_ACCEPT_NONE}, {@link #CALL_ACCEPT_HOLD},

* {@link #CALL_ACCEPT_TERMINATE}

* @return true if command has been issued successfully;

* false otherwise;

* upon completion HFP sends {@link #ACTION_CALL_CHANGED}

* intent.

*/

public boolean acceptCall(BluetoothDevice device, int flag)

撥打電話

/**

* Places a call with specified number.

*

* @param device remote device

* @param number valid phone number

* @return {@link BluetoothHeadsetClientCall} call if command has been

* issued successfully;

* {@link null} otherwise;

* upon completion HFP sends {@link #ACTION_CALL_CHANGED}

* intent in case of success; {@link #ACTION_RESULT} is sent

* otherwise;

*/

public BluetoothHeadsetClientCall dial(BluetoothDevice device, String number)

拒接接聽

/**

* Rejects a call.

*

* @param device remote device

* @return true if command has been issued successfully;

* false otherwise;

* upon completion HFP sends {@link #ACTION_CALL_CHANGED}

* intent.

*

*

Feature required for successful execution is being reported by:

* {@link #EXTRA_AG_FEATURE_REJECT_CALL}.

* This method invocation will fail silently when feature is not supported.

*/

public boolean rejectCall(BluetoothDevice device)

掛斷電話

/**

* Rejects a call.

*

* @param device remote device

* @return true if command has been issued successfully;

* false otherwise;

* upon completion HFP sends {@link #ACTION_CALL_CHANGED}

* intent.

*

*

Feature required for successful execution is being reported by:

* {@link #EXTRA_AG_FEATURE_REJECT_CALL}.

* This method invocation will fail silently when feature is not supported.

*/

public boolean rejectCall(BluetoothDevice device)

發送DTMF編碼

/**

* Sends DTMF code.

*

* Possible code values : 0,1,2,3,4,5,6,7,8,9,A,B,C,D,*,#

*

* @param device remote device

* @param code ASCII code

* @return true if command has been issued successfully;

* false otherwise;

* upon completion HFP sends {@link #ACTION_RESULT} intent;

*/

public boolean sendDTMF(BluetoothDevice device, byte code)

根據自己的需求直接調用對應的方法,這里只列舉了常用的,更多api 自己可以去frameworks\base\core\java\android\bluetooth\BluetoothHeadsetClient.java 中查看

二.藍牙音樂

A2DP和AVRCP協議的請求和連接與上面完全一樣,實現方式也一模一樣。只要BluetoothProfile.A2DP_SINK連接成功,聲音就能傳輸的車載藍牙設備上。8.1源碼音樂控制有一個坑,客戶端去掉了藍牙指令發送的方法sendPassThroughCmd(BluetoothDevice device,int keyCode,int keyState),但是服務端還保留了這方法的實現,不知道是這邊移植代碼時漏掉了還是google去掉的,如果碰巧你開發的版本也沒有這個方法可以加上。

先在frameworks\base\core\java\android\bluetooth\BluetoothAvrcpController.java中添加

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

Log.d(TAG, "sendPassThroughCmd dev = " + device + " key " + keyCode + " State = "

+ keyState);

final IBluetoothAvrcpController service = mService;

if (mService != null && isEnabled()) {

try {

mService.sendPassThroughCmd(device, keyCode, keyState);

return;

} catch (RemoteException e) {

Log.e(TAG, "Error talking to BT service in sendPassThroughCmd()", e);

return;

}

}

if (mService == null) Log.w(TAG, "Proxy not attached to service");

}

在frameworks\base\core\java\android\bluetooth\IBluetoothAvrcpController.aidl 中添加方法void sendPassThroughCmd (in BluetoothDevice device, int keyCode, int keyState);

藍牙指令都放在frameworks\base\core\java\android\bluetooth\BluetoothAvrcp.java 中

暫停音樂sendPassThroughCmd(BluetoothDevice,BluetoothAvrcp.PASSTHROUGH_ID_PAUSE,BluetoothAvrcp.PASSTHROUGH_STATE_PRESS);

sendPassThroughCmd(BluetoothDevice,BluetoothAvrcp.PASSTHROUGH_ID_PAUSE,PASSTHROUGH_STATE_RELEASE);

注意要發送兩次一次press狀態,一次relsease狀態。

播放音樂指令BluetoothAvrcp.PASSTHROUGH_ID_PLAY

下一首指令BluetoothAvrcp.PASSTHROUGH_ID_FORWARD

上一首指令BluetoothAvrcp.PASSTHROUGH_ID_BACKWARD

這幾種協議所對應的功能實現方式都差不多,例如這個AvrcpControllerService

//Binder object: Must be static class or memory leak may occur

private static class BluetoothAvrcpControllerBinder extends IBluetoothAvrcpController.Stub

implements IProfileServiceBinder {

private AvrcpControllerService mService;

private AvrcpControllerService getService() {

if (!Utils.checkCaller()) {

Log.w(TAG, "AVRCP call not allowed for non-active user");

return null;

}

if (mService != null && mService.isAvailable()) {

return mService;//得到自己本身

}

return null;

}

BluetoothAvrcpControllerBinder(AvrcpControllerService svc) {

mService = svc;

}

@Override

public void sendGroupNavigationCmd(BluetoothDevice device, int keyCode, int keyState) {

Log.v(TAG, "Binder Call: sendGroupNavigationCmd");

AvrcpControllerService service = getService();

if (service == null) {

return;

}

if (device == null) {

throw new IllegalStateException("Device cannot be null!");

}

調用自身的sendGroupNavigationCmd方法

service.sendGroupNavigationCmd(device, keyCode, keyState);

}

......

首先實現了aidl方法,自己可以去看看,都是調用自身的方法。啟動狀態機StateMachine,然后與狀態機進行交互,狀態機的作用是藍牙不同狀態下處理不同的邏輯。藍牙,wifi等都用到了狀態機模式,所以要看懂代碼,先要把狀態機模式搞懂。

protected boolean start() {

HandlerThread thread = new HandlerThread("BluetoothAvrcpHandler");

thread.start();

mAvrcpCtSm = new AvrcpControllerStateMachine(this);

mAvrcpCtSm.start();//開啟狀態機

setAvrcpControllerService(this);

return true;

}

public synchronized void sendGroupNavigationCmd(BluetoothDevice device, int keyCode, int keyState) {

Log.v(TAG, "sendGroupNavigationCmd keyCode: " + keyCode + " keyState: " + keyState);

if (device == null) {

Log.e(TAG, "sendGroupNavigationCmd device is null");

}

if (!(device.equals(mConnectedDevice))) {

Log.e(TAG, " Device does not match " + device + " connected " + mConnectedDevice);

return;

}

enforceCallingOrSelfPermission(BLUETOOTH_PERM, "Need BLUETOOTH permission");//判斷權限

Message msg = mAvrcpCtSm.obtainMessage(AvrcpControllerStateMachine.

MESSAGE_SEND_GROUP_NAVIGATION_CMD, keyCode, keyState, device);

mAvrcpCtSm.sendMessage(msg);//發送消息給狀態機處理

}

class Connected extends State {//在連接狀態下處理邏輯

@Override

public boolean processMessage(Message msg){

.....

case MESSAGE_SEND_PASS_THROUGH_CMD:

BluetoothDevice device = (BluetoothDevice) msg.obj;

AvrcpControllerService 又回去調用native方法

.sendPassThroughCommandNative(Utils.getByteAddress(device), msg.arg1,

msg.arg2);

if (a2dpSinkService != null) {

Log.d(TAG, " inform AVRCP Commands to A2DP Sink ");

a2dpSinkService.informAvrcpPassThroughCmd(device, msg.arg1, msg.arg2);

}

break;

.....

}

基本上服務端的實現都是這種模式,哪個api調不通或有問題都能找到實現從而分析出原因,可以追蹤到jni層。

監聽音樂暫停與播放

我是監聽BluetoothAvrcpController.ACTION_TRACK_EVENT這個廣播,在AvrcpControllerStateMachine中會回調播放消息。

class Connected extends State {

@Override

public boolean processMessage(Message msg) {

Log.d(TAG, " HandleMessage: " + dumpMessageString(msg.what));

A2dpSinkService a2dpSinkService = A2dpSinkService.getA2dpSinkService();

synchronized (mLock) {

switch (msg.what) {

case MESSAGE_STOP_METADATA_BROADCASTS:

mBroadcastMetadata = false;

broadcastPlayBackStateChanged(new PlaybackState.Builder().setState(

PlaybackState.STATE_PAUSED, mAddressedPlayer.getPlayTime(),

0).build());

break;

case MESSAGE_START_METADATA_BROADCASTS:

mBroadcastMetadata = true;

broadcastPlayBackStateChanged(mAddressedPlayer.getPlaybackState());

if (mAddressedPlayer.getCurrentTrack() != null) {

broadcastMetaDataChanged(

mAddressedPlayer.getCurrentTrack().getMediaMetaData());

}

break;

連接狀態下,會接收聲音信息并發出一個廣播

private void broadcastPlayBackStateChanged(PlaybackState state) {

Intent intent = new Intent(AvrcpControllerService.ACTION_TRACK_EVENT);

intent.putExtra(AvrcpControllerService.EXTRA_PLAYBACK, state);

if (DBG) {

Log.d(TAG, " broadcastPlayBackStateChanged = " + state.toString());

}

mContext.sendBroadcast(intent, ProfileService.BLUETOOTH_PERM);

}

三、同步通訊錄和通話記錄

在7.0之前可以參考https://blog.csdn.net/bingsiju123123/article/details/53065108,8.0源碼中這部分代碼改了,改成pbap profile一連接上馬上去同步通訊錄與通話記錄,然后批處理寫入到ContentProvider中。

class Connected extends State {

@Override

public void enter() {

Log.d(TAG, "Enter Connected: " + getCurrentMessage().what);

onConnectionStateChanged(mCurrentDevice, mMostRecentState,

BluetoothProfile.STATE_CONNECTED);

mMostRecentState = BluetoothProfile.STATE_CONNECTED;

if (mUserManager.isUserUnlocked()) {

mConnectionHandler.obtainMessage(PbapClientConnectionHandler.MSG_DOWNLOAD)

.sendToTarget();

}

}

@Override

public boolean processMessage(Message message) {

if (DBG) Log.d(TAG, "Processing MSG " + message.what + " from " + this.getName());

switch (message.what) {

case MSG_DISCONNECT:

if ((message.obj instanceof BluetoothDevice) &&

((BluetoothDevice) message.obj).equals(mCurrentDevice)) {

transitionTo(mDisconnecting);

}

break;

default:

Log.w(TAG, "Received unexpected message while Connected");

return NOT_HANDLED;

}

return HANDLED;

}

}

當profile連接成功之后會PbapClientConnectionHandler發出MSG_DOWNLOAD消息

try {

//創建賬號

mAccountCreated = addAccount(mAccount);

if (mAccountCreated == false) {

Log.e(TAG, "Account creation failed.");

return;

}

// Start at contact 1 to exclued Owner Card PBAP 1.1 sec 3.1.5.2

//下載通訊錄

BluetoothPbapRequestPullPhoneBook request =

new BluetoothPbapRequestPullPhoneBook(

PB_PATH, mAccount, PBAP_REQUESTED_FIELDS, VCARD_TYPE_30, 0, 1);

request.execute(mObexSession);

PhonebookPullRequest processor =

new PhonebookPullRequest(mPbapClientStateMachine.getContext(),

mAccount);

Log.d(TAG, "request.getList().size() == "+request.getList().size());

processor.setResults(request.getList());

processor.onPullComplete();

//下載來電、去電、未接來電

downloadCallLog(MCH_PATH);

downloadCallLog(ICH_PATH);

downloadCallLog(OCH_PATH);

//因為下載完沒有通知或回調,所以這里我自己做是發送一個廣播給應用去contentproview中取數據

mContext.sendBroadcast(new Intent(ACTION_DOWNLOAD_COMPLETE));

} catch (IOException e) {

mContext.sendBroadcast(new Intent(ACTION_DOWNLOAD_EXCEPTION));

Log.w(TAG, "DOWNLOAD_CONTACTS Failure" + e.toString());

}

這里還有一個坑,源碼中下載通話記錄沒有把名稱存進去,有需要的可以在onPullComplete()時for循環中加上

if (TextUtils.isEmpty(vcard.getDisplayName())) {

values.put(CallLog.Calls.CACHED_NAME, "");

} else {

values.put(CallLog.Calls.CACHED_NAME, vcard.getDisplayName());

}

總結

以上是生活随笔為你收集整理的android车载蓝牙开发,车载蓝牙开发二的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

国产精品四虎 | av免费在线播放 | 丁香 婷婷 激情 | 久草视频2 | 天天综合网~永久入口 | 免费观看国产成人 | 人人插人人 | 婷婷日日| 国产精品久久久久久久久久久不卡 | 91豆花在线观看 | 国产精品入口麻豆 | 久久精品免费观看 | 天天操天天操天天干 | 欧美日韩二区在线 | 久久综合中文字幕 | 香蕉视频免费看 | 天天插综合 | 97在线超碰 | 中文字幕 国产专区 | 24小时日本在线www免费的 | 日韩电影一区二区三区在线观看 | 久久超碰97| 国产录像在线观看 | www.av在线播放 | 一区二区三区免费在线观看视频 | 在线 你懂 | 中文视频在线播放 | bbbb操bbbb| 国产一卡二卡在线 | av大片免费| 欧美一级黄色片 | 免费日韩一区二区 | 伊人热 | 久草精品在线播放 | 精品一二三区视频 | 亚洲精品影视在线观看 | 成人毛片在线观看 | 国产在线观看一 | 国产在线视频一区二区三区 | 97中文字幕 | 四虎影视av | 探花视频免费在线观看 | 天天摸日日操 | 日本三级吹潮在线 | 中文字幕电影在线 | 久久国产一区 | 一级黄毛片| 午夜精品久久久久久99热明星 | 久久久精品 一区二区三区 国产99视频在线观看 | 五月天激情综合 | 成人免费在线播放视频 | www.五月婷| 国产成人免费网站 | 国产精品欧美激情在线观看 | 九九久久影院 | 日韩欧美视频在线免费观看 | 亚洲免费av在线 | 免费看国产曰批40分钟 | 干干日日 | www日韩在线观看 | 成人av直播 | 免费在线色电影 | 亚洲夜夜爽 | av在线h | 久久精品99国产国产精 | 九九色视频| 久久综合亚洲鲁鲁五月久久 | 波多野结衣一区三区 | 国产成人一区三区 | 97超碰色偷偷| 欧女人精69xxxxxx| 久久观看最新视频 | 美女久久久久 | 免费看麻豆 | 日韩一区精品 | 欧美 日韩 性 | 欧美人交a欧美精品 | 日日夜夜人人精品 | 8090yy亚洲精品久久 | 狠狠操狠狠干天天操 | 日韩视频在线不卡 | 在线精品视频免费播放 | 日韩精品偷拍 | 99视频导航| 波多野结衣在线播放一区 | 中文区中文字幕免费看 | 国内精品久久久久久久久久清纯 | 国产又黄又爽又猛视频日本 | 国产精品久久久久久久久费观看 | 在线91播放 | 国产精品嫩草影视久久久 | 在线精品视频免费播放 | 日日婷婷夜日日天干 | 91麻豆精品国产 | 日本中文一区二区 | 国产婷婷vvvv激情久 | 欧美精品久久久久久久免费 | 丁香av| 99资源网 | 婷婷色综合色 | 国产精品一区二区久久精品爱微奶 | av免费网站在线观看 | 久久中国精品 | 波多野结衣电影久久 | 96久久欧美麻豆网站 | 免费在线电影网址大全 | 成人a免费 | 中文字幕色婷婷在线视频 | 久久免费电影 | 在线观看不卡的av | 成人av手机在线 | av短片在线观看 | 黄色的网站免费看 | 中国一 片免费观看 | 国产精品欧美久久久久三级 | 亚洲精品麻豆视频 | 国产精品女人网站 | 在线看黄网站 | 日韩在线视频免费观看 | 色综合久久天天 | 国产一级片直播 | 国产日韩在线一区 | 一级黄色毛片 | 色狠狠一区二区 | 亚州视频在线 | 九九影视理伦片 | 五月婷婷六月丁香 | 美女视频黄免费 | 国产精品淫片 | 亚洲国产精品视频在线观看 | 欧美精品久久久久久久亚洲调教 | 久久久久久久久久久久久久免费看 | 91视频久久久 | 91视频这里只有精品 | 三级黄色片在线观看 | 99久久日韩精品视频免费在线观看 | 欧美一级视频免费看 | 美女av免费看 | 国产精品久久久免费 | 国产又粗又猛又黄视频 | 亚洲午夜激情网 | 免费看黄20分钟 | 特级a毛片 | 男女日麻批 | a爱爱视频 | 悠悠av资源片 | 久久在线视频在线 | 91精品视频一区二区三区 | 国产特级毛片aaaaaa高清 | 夜夜骑日日 | 亚洲国产成人av网 | 亚洲aⅴ一区二区三区 | 99这里都是精品 | 二区在线播放 | 国产a高清 | 久久视讯 | 在线免费观看涩涩 | 国产视频亚洲精品 | 日韩欧美视频一区二区三区 | 日本公妇色中文字幕 | 国产精品久久久久免费 | 超碰久热 | 欧美精品久久久久久久久久白贞 | 97成人精品 | 日韩中午字幕 | 国产一线二线三线性视频 | 干综合网 | 在线观看av麻豆 | 亚洲精品五月 | 亚洲一区二区精品 | 国产精品xxxx18a99 | 人人插人人搞 | 一区二区三区视频 | 国产美腿白丝袜足在线av | 国产精品嫩草影视久久久 | 97视频免费观看 | 综合精品在线 | 亚洲劲爆av | 992tv在线观看网站 | 国产精品久久久久久久久大全 | 91资源在线免费观看 | 成人精品视频 | 51久久成人国产精品麻豆 | 91九色性视频 | 91久久丝袜国产露脸动漫 | 国产精品久久久久婷婷 | 不卡av电影在线观看 | 天天射天天射 | 亚洲精品乱码 | 国产福利中文字幕 | 91亚洲网| 综合色站导航 | 精品999在线观看 | 精品久久久国产 | 依人成人综合网 | 美女搞黄国产视频网站 | 久久视频在线视频 | 国产黄色免费观看 | 国产精品99久久久久久小说 | 婷婷综合国产 | 日本精品xxxx | 久久调教视频 | 国产拍揄自揄精品视频麻豆 | 国产精品亚洲成人 | 激情婷婷综合网 | 欧洲精品久久久久毛片完整版 | 久久伊人精品一区二区三区 | 日韩专区视频 | 综合色站导航 | 免费看片黄色 | 国产午夜精品一区二区三区嫩草 | 国产午夜精品一区二区三区 | 久久男人影院 | 日韩大片在线播放 | 成人小视频在线播放 | 中文字幕在线观看免费高清电影 | 成人永久免费 | 亚洲精品福利视频 | 国产少妇在线观看 | 国产一级在线观看视频 | 999久久久久久久久6666 | 黄色www| 在线欧美a| 国产精品亚洲视频 | 最新av观看 | 中文字幕精品一区二区三区电影 | 亚洲国产三级在线 | 欧美黄污视频 | 国产五月天婷婷 | 久久婷婷精品 | 91精品一区二区三区蜜臀 | 日韩一区二区免费播放 | 91香蕉国产在线观看软件 | 91天天操| 国产精品免费看久久久8精臀av | 99久久精品免费看国产一区二区三区 | 伊人www22综合色 | 久久久久黄色 | 亚洲人人爱 | 精品视频区 | 久久免费视频精品 | 最近中文字幕视频完整版 | 日韩欧美在线影院 | 日韩美女av在线 | 欧美日韩久| 亚洲欧美乱综合图片区小说区 | 黄色福利 | 怡红院成人在线 | 国产成人精品在线观看 | 色婷婷久久久综合中文字幕 | 久久久wwww | 久久国产一区二区 | 欧美日韩免费视频 | 婷婷六月天综合 | 五月婷在线播放 | 国产精品女主播一区二区三区 | 中文字幕一二三区 | 国产又黄又猛又粗 | 天天插天天射 | 日本精品一二区 | 国产九九精品视频 | 天天干天天射天天爽 | 亚欧日韩av | av网站在线观看免费 | 91人人澡人人爽 | 久久久久久久毛片 | 天天操天天操天天操天天 | 亚洲精品视频久久 | 一区二区三区 中文字幕 | www.av在线.com | 黄色在线小网站 | 国产精品第72页 | 国产成人性色生活片 | 91精品视频在线免费观看 | 欧美一区二区三区在线视频观看 | 黄色片网站av| 日韩在线视频精品 | 99在线视频免费观看 | 日韩av一卡二卡三卡 | 国产精品久久毛片 | 日韩在线观看精品 | 在线观看av免费 | 天堂网一区二区三区 | 成片视频免费观看 | 中文在线中文a | 国产美女无遮挡永久免费 | 日韩在线色视频 | 久久视频精品在线观看 | 在线影院 国内精品 | 99精品国产aⅴ | 婷婷色综合色 | 欧美日韩不卡在线视频 | 黄色tv视频| 欧美日韩国产伦理 | 97碰视频| 国产精品日韩在线播放 | av电影av在线 | 激情大尺度视频 | 91中文在线视频 | 91激情视频在线观看 | 亚洲视频1| 欧美国产不卡 | 69久久久久久久 | 天天爽天天爽夜夜爽 | 黄a在线观看 | 激情久久综合 | 亚洲精品自拍视频在线观看 | 久久久久久黄 | 一级片色播影院 | 久久精品艹 | 国产不卡在线观看视频 | 久久亚洲美女 | 久久久久久久久影院 | 久久草草影视免费网 | 免费在线观看av网站 | 国产精品久久久久四虎 | 欧美99精品| 久久久综合香蕉尹人综合网 | 亚洲日本成人网 | 亚洲五月激情 | 亚洲视频免费在线观看 | 精品国产一区二区三区噜噜噜 | 中文字幕 在线 一 二 | 国产玖玖精品视频 | 六月丁香在线观看 | 91免费版在线观看 | 欧美成人性网 | 天天天综合网 | 中文字幕在线看 | 91污视频在线 | 久草在线视频免赞 | 国产一区免费 | 国产精品久久人 | 亚洲伊人av| 96av麻豆蜜桃一区二区 | 91精品国产91久久久久福利 | 亚洲精品18日本一区app | 九色精品在线 | 一区二区三区在线观看免费视频 | 最新动作电影 | 日韩视频中文字幕在线观看 | av视屏在线 | 五月婷婷欧美视频 | 日韩免费成人 | 精品国产一二三 | 狠狠激情中文字幕 | 99九九热只有国产精品 | 国产精彩视频一区二区 | 日韩一区二区三免费高清在线观看 | 国产视频资源在线观看 | 人成免费网站 | 国产一区二区在线影院 | 国产二区精品 | 久久国产一区二区三区 | 国产免费国产 | 中文字幕在线观看资源 | 久久久精品一区二区 | 超碰免费久久 | 丁香六月综合网 | 9在线观看免费高清完整版 玖玖爱免费视频 | 一区二区视频免费在线观看 | 色偷偷中文字幕 | 日日夜夜精品视频 | 成人免费在线视频 | 黄色大全免费网站 | 久草久草在线观看 | 亚洲aaa毛片 | 江苏妇搡bbbb搡bbbb | 美女黄濒 | 丁香婷婷射 | 国产精品久久久久久久久久新婚 | 亚洲精选视频在线 | 九九涩涩av台湾日本热热 | 最近能播放的中文字幕 | 精品国产一区二区在线 | 亚洲一区二区精品3399 | 国产在线视频一区 | 韩日精品在线 | 日韩一二三区不卡 | 精品久久久成人 | 欧美另类交在线观看 | 亚洲精品美女久久久 | 91精品久久久久久综合五月天 | 三级黄色a| 久久久久免费精品国产小说色大师 | 欧美国产一区在线 | 久久毛片视频 | 日韩精品免费一区二区在线观看 | 久久久久久久久免费 | 中文字幕在线视频网站 | 国产高清 不卡 | www.大网伊人 | 久久综合婷婷国产二区高清 | av电影免费在线看 | 国产在线观看国语版免费 | 99精品视频在线观看免费 | 国产精品96久久久久久吹潮 | 综合国产在线观看 | 狠狠色丁香婷综合久久 | 综合久久影院 | 国产色爽| 亚洲精品在线网站 | 日韩精选在线观看 | av在线播放不卡 | 成人片在线播放 | 日本不卡123区 | 日韩免费电影一区二区 | 综合网av | 福利一区二区在线 | 精品国产一区二区三区不卡 | 五月天中文字幕 | 亚洲日本欧美在线 | 成人av一区二区在线观看 | 国产精品视频全国免费观看 | 亚洲天堂精品视频在线观看 | 天天操操操操操操 | 亚洲精品在线看 | 日韩在线视频在线观看 | 精品国产乱码久久久久久1区2匹 | 天天爱天天操天天爽 | 精品欧美在线视频 | 久草久草久草久草 | 四虎影视成人精品 | 日韩精品免费专区 | 91毛片视频 | 国产精品网红直播 | 日本黄色黄网站 | 黄色特级片 | 国产精品一区二区美女视频免费看 | 婷婷电影网| 99视频精品 | 麻豆国产在线视频 | 欧美一级电影在线观看 | 女人18片| 97碰视频| 91久久精品一区二区三区 | 97视频在线免费 | 欧美日韩国内在线 | 日韩精品观看 | 在线视频成人 | 日韩视频免费观看高清完整版在线 | 久久国内免费视频 | 五月天婷婷在线观看视频 | 在线观看黄色国产 | 97电影院网| 国产亚洲精品久 | 亚洲人久久 | av免费在线免费观看 | 狠狠躁日日躁狂躁夜夜躁av | 亚洲毛片一区二区三区 | 日日夜夜操av | 久久久一本精品99久久精品66 | 亚洲最大av网站 | 国产精品永久在线 | 久久99久久精品 | 91成人精品一区在线播放 | 亚洲精品国精品久久99热 | 91在线91拍拍在线91 | 欧美九九视频 | 日韩免费视频一区二区 | 亚洲视频1 | 狠狠插狠狠干 | 天天干天天做天天爱 | 久久久91精品国产一区二区三区 | 操操操综合 | 少妇bbbb搡bbbb搡bbbb | 成人午夜网 | 国产91成人 | 亚洲最大激情中文字幕 | 香蕉影视app | 日韩狠狠操| 最新免费中文字幕 | 高清国产在线一区 | 日韩中文字幕免费 | 日韩精品电影在线播放 | 9在线观看免费高清完整版 玖玖爱免费视频 | 亚洲欧洲精品视频 | 日韩av免费在线电影 | 日韩av免费大片 | 欧美最猛性xxx | 一区二区三区日韩在线 | 久久a级片 | 97在线视频网站 | 狠狠躁夜夜躁人人爽超碰97香蕉 | 91成人精品一区在线播放69 | 久久99久久99久久 | 一本到视频在线观看 | 日韩在线视频国产 | 欧美在线视频精品 | 色综合夜色一区 | 狠狠躁夜夜躁人人爽视频 | avav片 | 欧美坐爱视频 | 精品国产_亚洲人成在线 | 国产一区二区视频在线播放 | a在线一区 | 成人黄大片视频在线观看 | 国产精品一区二区视频 | 亚洲激情在线 | 中文字幕在线高清 | 黄色成年 | 欧美 日韩 国产 中文字幕 | 97超级碰碰碰碰久久久久 | 久久久999精品视频 国产美女免费观看 | 日本不卡一区二区 | 成人一区影院 | 久久久影视 | 麻豆传媒视频观看 | 韩国av在线播放 | 日韩精品免费在线观看视频 | 国产人免费人成免费视频 | 久草色在线观看 | 国产精品中文字幕在线观看 | 91看片在线| 亚洲 中文 在线 精品 | 国产精品理论在线观看 | 午夜av不卡 | 豆豆色资源网xfplay | 激情婷婷欧美 | 国产成人一区二区三区久久精品 | 在线天堂中文www视软件 | 人人干人人超 | 国产99久久久久久免费看 | 国产成人99久久亚洲综合精品 | 超碰免费观看 | 超碰在线日本 | 日本三级久久 | 久久精品国产一区 | 亚洲精品乱码久久久一二三 | 国产国语在线 | 色婷婷啪啪免费在线电影观看 | 欧美人人爱 | 人人插人人干 | 天天要夜夜操 | 美女禁18| 久久精品99国产国产精 | 99色在线观看视频 | 91人人干| 福利视频精品 | 97国产在线播放 | 午夜影院一级片 | 96视频免费在线观看 | 中文字幕资源站 | av丝袜在线 | 91精品国自产拍天天拍 | 日韩免费在线 | 久操中文字幕在线观看 | 久久免费99精品久久久久久 | 日批在线看| 免费在线日韩 | 天天曰天天爽 | 日韩理论在线 | 久久丁香 | 美女视频永久黄网站免费观看国产 | 亚洲成人av一区二区 | av电影久久 | 亚洲 欧美 变态 国产 另类 | 日韩高清免费在线 | 欧美热久久| 成人a视频片观看免费 | 干狠狠| av不卡中文| 日韩在线观看网址 | 久久久久福利视频 | 国产又粗又长的视频 | 国产日韩欧美自拍 | 99在线精品视频在线观看 | 国内精品二区 | 国产精华国产精品 | 日韩精品视频在线观看网址 | 亚洲三级黄色 | 蜜臀精品久久久久久蜜臀 | www.黄色片网站 | 黄色一级大片在线免费看国产一 | 国产精品精品国产色婷婷 | 久久观看免费视频 | 国产成人精品av在线 | 国产精品免费久久久久 | 天堂av中文字幕 | 三级免费黄 | 最近中文字幕大全中文字幕免费 | 免费看久久久 | 人人爽人人 | 日韩电影中文字幕在线观看 | 在线观看av国产 | 在线观看中文字幕dvd播放 | av免费看网站 | 日本三级不卡视频 | 国产在线a| 国产 日韩 中文字幕 | 国产高清精 | 免费在线观看不卡av | 国产又粗又猛又爽又黄的视频免费 | 日韩av中文字幕在线 | 99国产免费网址 | 国产一区在线观看视频 | 性色大片在线观看 | 成人黄色小说视频 | 精品久久久久久亚洲 | 久99久在线视频 | 西西www4444大胆在线 | 久久a级片 | 欧美日韩性视频在线 | 免费 在线 中文 日本 | 蜜臀久久99精品久久久无需会员 | 国产精品1000 | 五月婷婷,六月丁香 | 激情视频免费观看 | 欧美日韩国产mv | a级国产乱理论片在线观看 伊人宗合网 | 久久国语露脸国产精品电影 | 五月激情视频 | 成人毛片一区 | 欧美狠狠操| 日韩国产欧美视频 | 久久精品香蕉视频 | 欧美成人精品三级在线观看播放 | 99热最新 | 国产成人精品av在线 | 天干啦夜天干天干在线线 | 天天色综合久久 | 激情五月伊人 | 成年人视频在线免费 | 国产精品久久久久亚洲影视 | 成人午夜在线观看 | 日本黄色特级片 | 久草a在线 | 日日夜夜狠狠操 | 午夜视频一区二区 | 久草在线视频免赞 | 亚洲精品在线二区 | 久久99精品国产麻豆婷婷 | 九九国产视频 | 亚洲国产日韩欧美在线 | 免费看搞黄视频网站 | 精品在线一区二区 | 精品国产乱码久久久久久三级人 | 久草视频在线看 | 在线观看激情av | 综合色狠狠 | 日日日视频 | 中文字幕资源在线 | 国精产品999国精产品视频 | 亚洲日本成人网 | 久草视频免费播放 | 久草视频播放 | 久草国产在线观看 | 97在线视频免费播放 | 日韩精品一区二区免费 | 97在线观看免费观看高清 | 97电影在线 | a级片在线播放 | 久久精品中文字幕一区二区三区 | 久久99视频免费观看 | 九九免费在线观看 | 一本—道久久a久久精品蜜桃 | 国产视频日韩视频欧美视频 | 极品久久久久久久 | 999国产 | www最近高清中文国语在线观看 | 黄色片软件网站 | 精品一区二区三区在线播放 | 欧美午夜精品久久久久 | 99精品在线视频播放 | 欧美精品久久99 | 伊人天天综合 | 免费在线观看毛片网站 | 国产一区免费在线观看 | 免费男女羞羞的视频网站中文字幕 | 青青河边草免费直播 | 黄色字幕网 | 国产一级电影网 | 久久国产精品99久久久久久老狼 | 特级毛片aaa | 麻豆久久久久久久 | 国产精品99久久久久人中文网介绍 | 爱情影院aqdy鲁丝片二区 | 中文字幕中文字幕在线一区 | 久久福利在线 | 久久久免费少妇 | 国产资源 | 视频国产一区二区三区 | 五月婷色 | 国产又粗又猛又黄又爽视频 | 久久夜夜夜 | 成人性生交大片免费观看网站 | 日韩动漫免费观看高清完整版在线观看 | 欧洲精品二区 | av免费在线观看网站 | 美女视频黄是免费的 | 日批网站免费观看 | 欧美精品免费在线 | 久久高清国产视频 | 亚洲区精品 | 韩国三级一区 | 欧美日韩精品在线免费观看 | 黄色免费大全 | 亚洲免费在线观看视频 | 美女视频久久黄 | 99精品国产在热久久 | 奇米影视777影音先锋 | 欧美在线不卡一区 | 五月天激情在线 | 西西444www大胆高清图片 | 久久中文字幕在线视频 | 国产成人一区二区三区在线观看 | 91系列在线 | 五月天久久久 | 超碰在线观看av | 福利久久久 | 精品久久久久久久久久久久 | 人人爽久久涩噜噜噜网站 | 日韩精品一区二区三区在线播放 | 97视频在线免费观看 | av视屏在线播放 | 爱色av.com | 黄色成人av| 久草网站 | 又黄又爽又无遮挡免费的网站 | av在线免费播放网站 | 九九免费在线看完整版 | 五月天欧美精品 | 最新中文在线视频 | 日日干干 | 在线综合 亚洲 欧美在线视频 | 欧美成人猛片 | 欧美日韩国产一区二区在线观看 | 成年人视频在线免费观看 | 成片免费观看视频大全 | 国产一级精品在线观看 | 天堂在线一区二区 | 激情av资源| 欧美一区在线看 | 毛片在线网 | 国产成人久 | 特级黄色视频毛片 | 久久视频6 | 五月天激情婷婷 | 18国产精品白浆在线观看免费 | 天天射天天操天天色 | 精品久久中文 | 日本在线观看中文字幕无线观看 | 99在线精品视频观看 | 精品国偷自产在线 | 国产一区二区不卡在线 | 在线 你懂 | 一区二区精 | 国产精品av电影 | 国产一级黄色av | 国产精品嫩草影院99网站 | 激情综合网五月激情 | 中文字幕国产一区二区 | 狠狠狠狠狠干 | 曰韩在线 | 国产精品网红直播 | 在线视频成人 | 久久精品国产精品亚洲 | 2019久久精品 | 日韩网站在线免费观看 | 国产福利91精品一区二区三区 | 九九九九精品九九九九 | 人人射人人插 | av成人黄色 | 探花视频免费观看 | 久久综合影视 | 99在线播放 | 国产欧美精品一区二区三区四区 | 久久久久影视 | 国产一区在线观看视频 | 久久久91精品国产一区二区精品 | 亚洲精品中文在线 | 久久久网址 | 久草手机视频 | 欧美日韩中文字幕视频 | 国产精品免费观看视频 | 亚洲精品国产精品乱码在线观看 | 精品av网站 | 国产精品久久久久久久婷婷 | 日韩综合视频在线观看 | 国产成人91 | 少妇搡bbbb搡bbb搡忠贞 | av电影免费在线播放 | 日韩99热 | 91精品国产91久久久久久三级 | 500部大龄熟乱视频使用方法 | 蜜臀av性久久久久av蜜臀三区 | 欧美午夜性 | 久热爱 | 精品国产一区二 | av五月婷婷| 国产欧美在线一区二区三区 | www.色婷婷.com | 在线观看中文字幕一区二区 | 日批视频在线观看免费 | 久久亚洲欧美日韩精品专区 | 亚洲黄色成人网 | 九九在线精品视频 | 国产高清精 | 国产精品岛国久久久久久久久红粉 | 亚洲精品91天天久久人人 | 国产精品美女免费看 | 黄色三级久久 | 97国产超碰 | 成人中文字幕+乱码+中文字幕 | 黄色免费在线看 | 久久99精品国产麻豆宅宅 | 久久亚洲免费视频 | 亚洲一二三久久 | 九九热免费在线视频 | 7777精品伊人久久久大香线蕉 | 欧美专区日韩专区 | 日日夜夜免费精品 | 国产片免费在线观看视频 | 91在线观看视频网站 | 99视频在线看 | 成人动漫一区二区 | 欧美在线视频一区二区三区 | 亚洲精品资源在线 | 成人在线免费观看网站 | 激情综合啪啪 | 一区二区三区手机在线观看 | 操处女逼| 天天超碰 | 国产成人精品久久亚洲高清不卡 | 成人91视频 | 91在线视频在线 | 国产91成人在在线播放 | 国产剧情一区二区在线观看 | 96亚洲精品久久久蜜桃 | 亚洲视频1 | 国产精品久久久久久久午夜 | 欧美肥妇free | 久久人人精品 | 免费观看xxxx9999片 | 激情五月五月婷婷 | 免费在线观看污 | 日本黄色片一区二区 | 亚洲精品国产高清 | 不卡的av片 | 免费日韩 精品中文字幕视频在线 | 久久这里只有精品视频首页 | 97视频在线| 婷婷丁香花五月天 | 人人澡人人干 | 美女黄视频免费看 | 夜夜躁狠狠躁日日躁视频黑人 | 久久99精品国产一区二区三区 | 国产精品久久久久久久久免费看 | 黄色大全视频 | 免费看黄在线 | 97人人模人人爽人人喊中文字 | 久久99精品久久久久久清纯直播 | 国产理论在线 | 在线91网| 久久蜜臀一区二区三区av | 五月婷婷丁香综合 | 久久av影视 | 91刺激视频 | 中文字幕在线播放一区二区 | 久草在线免费看视频 | 欧美国产日韩在线观看 | 四虎成人精品在永久免费 | 国产高清成人 | 精品在线观看视频 | 99视频一区二区 | 制服丝袜在线 | 婷婷国产视频 | 亚洲精品在线免费观看视频 | 日韩免费一区二区 | 日韩欧美综合视频 | 欧美一级特黄高清视频 | 成人av在线影院 | 日本最新一区二区三区 | 在线观看免费成人av | 在线只有精品 | 亚洲欧美国产视频 | 美女很黄免费网站 | 波多野结衣资源 | 一级黄色片在线播放 | 久久激情片 | 91福利国产在线观看 | 91视频在线播放视频 | 不卡的av电影 | 日本三级久久久 | 国产黄色av网站 | 久久精彩免费视频 | 婷婷六月激情 | 福利一区在线视频 | 黄色天堂在线观看 | 欧美日韩精品在线观看视频 | 五月天婷亚洲天综合网精品偷 | 久久成人综合视频 | av网址aaa | 日日操操| 黄网站色| 天天爱av导航 | 日韩影视大全 | 午夜精品一二区 | 免费色视频在线 | 中文网丁香综合网 | 黄色av电影在线观看 | 亚洲精品视频免费在线观看 | 日日夜夜天天综合 | 成人a级免费视频 | 天天干天天摸天天操 | 91成人短视频在线观看 | 欧美激情精品久久久久久免费 | 日韩特级毛片 | 国产青草视频在线观看 | 日韩av在线网站 | 97在线观看视频国产 | 精品国产一二区 | 狠狠狠综合 | 国产高清一区二区 | 五月天色丁香 | 久久黄色网页 | 国产日韩欧美在线看 | 久久久久久久综合色一本 | 亚洲a在线观看 | 黄色成人91 | 久久久久久国产精品999 | 男女全黄一级一级高潮免费看 | 精品v亚洲v欧美v高清v | av在线网站免费观看 | www免费在线观看 | av三级av| 日本黄色免费播放 | 国产精品午夜久久 | 在线观看视频91 | 91中文字幕在线视频 | www.午夜色.com | 国产一区二区在线免费观看 | 四虎成人精品永久免费av | 4438全国亚洲精品在线观看视频 | 一区二区理论片 | 婷婷久久一区 | 黄网站www | 国产精品久久久 | 国产精品久久久久久久久久久久久久 | 日韩久久久久久久 | 久久国产精品免费一区 | 国产成人一区二区三区免费看 | 亚洲精品成人免费 | 天天躁日日躁狠狠 | 天天操天天操天天操天天操天天操天天操 | 亚洲乱码久久久 | 国产一区网 | 超碰个人在线 | 中文在线字幕观看电影 | 国产精品视频专区 | 91人人射 | 色婷婷狠狠五月综合天色拍 | 丁香五月亚洲综合在线 | 久久深爱网| 在线免费黄网站 | 欧美精品做受xxx性少妇 | 久久歪歪 | 亚洲最大在线视频 | 香蕉视频国产在线观看 | 中文免费在线观看 | 91系列在线 | 天天射成人 | www色婷婷com| 超碰免费公开 | 99在线观看精品 | 808电影免费观看三年 | 日日麻批40分钟视频免费观看 | 日韩精品中文字幕在线播放 | 欧美激情精品久久久久久变态 | 最近中文字幕免费av | 国精产品满18岁在线 | 精品国产自 | 欧美激情视频在线免费观看 | 久久激情五月丁香伊人 | 片网站| 五月婷婷中文网 | 免费在线观看不卡av | 免费在线看v | 97国产精品| 91在线成人| 国产精品免费看久久久8精臀av | 激情中文在线 | 成人免费网站在线观看 | 日韩 在线观看 | 国产精品专区h在线观看 | 99热在线观看 | 国产一区二区在线视频观看 | 精品国产人成亚洲区 | 黄色福利| 激情婷婷六月 | 91成人精品在线 | 成人av视屏| www日韩精品 | 一区二区三区电影在线播 | 国产在线精品一区二区三区 | 国产美女免费视频 | 在线黄色毛片 | 亚洲日本三级 |