小米蓝牙耳机无法开机为什么关掉以后在开机要重新在手动与手机配对??手机型号OPP

平板/笔记本
HiLink生态产品
终端云服务专区
蓝牙耳机AM04怎么开机与手机配对
&登堂入室&
来自:浏览器
width:100%">
&热心花粉&
来自:浏览器
你好,打开耳机蓝牙,再打开手机蓝牙,搜索到耳机蓝牙后点击配对即可
width:100%">
&炉火纯青&
来自:浏览器
本帖最后由 杜小冲 于
21:55 编辑
蓝牙耳机关机状态,长按电源键,也就那个大块的,语音提示两次后,蓝牙耳机上蓝灯红灯会变换着一直闪,就是自动进入配对状态了。再打开手机蓝牙选择配对就行了。
width:100%">
&自成一派&
来自:浏览器
路过,帮顶一个。
width:100%">
&已臻大成&
来自:浏览器
不错,支持一下
我是花粉,我爱花瓣。
width:100%">
申请成为热心花粉,满足热心花粉条件即可获得!http://cn.club.vmall.com/forum.php?mod=viewthread&tid=183642
随手拍毕业季(上)P20pro随手拍p10镜头下的小生灵华为P20伴我新疆徒步行3清晨时光
花粉客户端
Make it Possible
Make your device special
华为云空间
Huawei cloud services
音乐播放器
Huawei Music
Huawei Vmall
关注花粉俱乐部
举报邮箱:
|关注花粉俱乐部:
增值电信业务经营许可证:苏B2-号|
Copyright (C)
华为软件技术有限公司 版权所有 保留一切权利苹果手机蓝牙耳机配对成功后不小心碰到忽略设备之后就连不上了,是怎么回事?求高手,在线等。急!_百度知道
苹果手机蓝牙耳机配对成功后不小心碰到忽略设备之后就连不上了,是怎么回事?求高手,在线等。急!
我有更好的答案
1、确保手机蓝牙打开。2、戴上蓝牙耳机,按住启动键,听到耳机里提示开机后继续按住启动键不放,此时看下手机蓝牙搜索就有提示出现。3、连接配对。蓝牙忽略此设备后怎么恢复正常苹果手机?1、苹果手机打开蓝牙功能,开启。2、蓝牙耳机关机状态,需长按开关键。3、直到蓝牙耳机的红灯,蓝灯交替闪烁进入配对模式。4、苹果手机上显示此蓝牙耳机信息,点击确定连接即可。5、若蓝牙耳机配对时需要输入密码,一般是:88。如下图所示:注意手机和蓝牙耳机之间的有效使用距离是在10米内,超过距离蓝牙耳机就会断开信号。
采纳率:99%
1、确保手机蓝牙打开;2、戴上蓝牙耳机,按住启动键,听到耳机里提示开机后继续按住启动键6至7秒不放,此时你看下手机蓝牙搜索就有提示出现;3、连接配对。
1、确保手机蓝牙打开;2、戴上蓝牙耳机,按住启动键,听到耳机里提示开机后继续按住启动键6至7秒不放,此时你看下手机蓝牙搜索就有提示出现;3、连接配对。
首先看两个设备是否都具有蓝牙功能(如果是电脑还需要正确安装蓝牙驱动);其次看设备是否打开蓝牙功能(不打开的话设备不能被找到);再次还要成功连接两个设备(一般要用到PIN码和配对码。PIN码一般是“0000”或“1234”,配对码是当下设置并使用的,两个设备要求配对必须一致);第四、传送距离一般不得超过10米,否则传送会中断;第五、传送成功会有成功提示,只需在接收方找到文件即可打开(一般在“我的文件”的bluetooth文件夹中);第五、选中要传输的文件,在菜单中选“分享”,再选择“蓝牙”,然后按提示操作,如操作正确会有传输成功完成的提示。另外,蓝牙耳机与手机连接:手机要先打开蓝牙并处在被发现状态,按住蓝牙耳机开关键不放,直到手机蓝牙搜索到耳机并显示出耳机型号,再点击手机中显示的耳机型号进行连接,显示“已连接”说明连接成功,此时方可松开耳机开关键。
到应用程序里面怎样?设置里面清除蓝牙数据然后重新搜索。
你电话多少
其他2条回答
为您推荐:
其他类似问题
蓝牙耳机的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。AWEI用维蓝牙耳机使用相关问题解答!【awei吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0可签7级以上的吧50个
本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:10贴子:
AWEI用维蓝牙耳机使用相关问题解答!
1、蓝牙耳机怎么切换中英文?答:长按开机键,直到红蓝灯交闪处于配对状态下松手,之后双击音量+ 键,就切换成功了(切换成功的时候,会有嘟的一声,重新开机就是中文了,一般默认是英文的) 2、蓝牙耳机怎么链接?1》进入配对模式:关机情况下一直按住多功能键约7秒直至红蓝LED指示灯交替闪烁2》手机蓝牙功能打开,选择搜索功能,找到耳机的配对名称点击联接。3》手机会提示输入验证码:一般是4个:0000或4个:8888(具体看说明书)4》联接上后耳机会发出提示音,只有蓝灯间隔闪烁,打一下电话是不是在耳机上,假如在耳机上说明你连接成功。手机图片也会有变化。 3、蓝牙耳机怎么开关机?答:1》开机:关机情况下按住多功能键约3秒后蓝灯常亮3秒后手松开
2》关机:开机情况下,长按会出现红灯,红灯灭了就代表关机 4、手机链接不上蓝牙耳机?答:手机链接不上蓝牙耳机,一般有两种原因:一种是蓝牙耳机未开机,另一种是蓝牙耳机没有进入搜索状态。一般当蓝牙耳机的红蓝灯交换闪烁时或者灯不停闪烁的情况下,则处于被搜索状态。具体参照说明书。 5、蓝牙耳机听不了音乐?答:首先我们要确认耳机是属于“单声道”还是“立体声”!1》单声道:支持【手机音频】功能,只能接听、拨打、挂断电话。2》立体声:支持【手机音频】功能,可以接听、拨打、挂断电话;还支持【媒体音频】功能,可以听音乐、看视频。如果是立体声蓝牙耳机,确认【媒体音频】开关是否开启。 6、蓝牙耳机有杂音?答:需要注意以下几个问题!(1)手机和蓝牙耳机距离不可相隔太远。(2)手机周围尽量少放金属等可以屏蔽信号的物件。(3)手机与蓝牙耳机之间尽量不要有障碍物。(4)手机摆放的方向性,不同型号的手机发出蓝牙信号的部位不同。手机摆放的方向会直接影响到耳机接受信号,手机和耳机尽量放在身体同侧,这样有利于信号的接收。(5)这和蓝牙耳机的性能、手机蓝牙的性能也有关系,可尝试更换蓝牙耳机或手机排查。更多问题咨询“扫一扫头像”
贴吧热议榜
使用签名档&&
保存至快速回贴posts - 331,&
comments - 16,&
trackbacks - 0
2599人阅读
& & & & 在前面文章结尾中提到了会按四个方面来写这系列的文章,前面已写了蓝牙打开和蓝牙搜索,这次一起来看下 蓝牙文件分享的流程,也就是蓝牙应用opp目录下的代码,作为蓝牙最基本的一个功能,这部分的代码在之前的版本中就已经有了,新旧版本代码对比很多类名都 是一样的,这一部分新东西不多,写在这里帮助大家梳理下流程吧。
& & & & 有没有这种感觉,智能手机的普及让我们提高了一点对蓝牙的关注,手机间使用蓝牙互传文件应该是最常用的应用之一,手机与电脑也可以通过蓝牙做同样的事情, 大部分笔记本都支持蓝牙功能,本本上蓝牙芯片多数是broadcom的,也有其它厂商(比如东芝)不过数量不多,毕竟broadcom在BT这方面是老 大。不过本本上蓝牙一般只支持蓝牙耳机听歌,并没实现对opp的支持,如果体验下手机与电脑的蓝牙文件传输怎么办呢,安装一个叫bluesoleil(中 文名好像是千月)软件就可以了,这个软件对蓝牙功能的支持还是比较全的。可能需要卸载本本自带蓝牙驱动。扯淡结束,本文还是要关注手机间蓝牙opp的代码 流程,这段的废话也许能帮助你提高下对蓝牙的体验。
& & & & 蓝牙发送文件时发送端先来到这里packages/apps/Bluetooth/src/com/android/bluetooth/opp /BluetoothOppLauncherActivity.java,一个没有界面只是提取下文件信息的中转站,源码的注释写的很清楚了,两个分支 action.equals(Intent.ACTION_SEND)和 action.equals(Intent.ACTION_SEND_MULTIPLE)
&if&(action.equals(Intent.ACTION_SEND)&||&action.equals(Intent.ACTION_SEND_MULTIPLE))&{&&
&&&&&&&&&&&&&&
&&&&&&&&&&&&if&(!isBluetoothAllowed())&{&&
&&&&&&&&&&&&&&&&Intent&in&=&new&Intent(this,&BluetoothOppBtErrorActivity.class);&&
&&&&&&&&&&&&&&&&in.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);&&
&&&&&&&&&&&&&&&&in.putExtra("title",&this.getString(R.string.airplane_error_title));&&
&&&&&&&&&&&&&&&&in.putExtra("content",&this.getString(R.string.airplane_error_msg));&&
&&&&&&&&&&&&&&&&startActivity(in);&&
&&&&&&&&&&&&&&&&finish();&&
&&&&&&&&&&&&&&&&return;&&
&&&&&&&&&&&&}&&
&&&&&&&&&&&&if&(action.equals(Intent.ACTION_SEND))&{&&
&&&&&&&&&&&&&&&.......&&&
&&&&&&&&&&&&&&&Thread&t&=&new&Thread(new&Runnable()&{&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&public&void&run()&{&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&BluetoothOppManager.getInstance(BluetoothOppLauncherActivity.this)&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&.saveSendingFileInfo(type,fileUri.toString(),&false);&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&launchDevicePicker();&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&finish();&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&}&&
&&&&&&&&&&&&&&&&&&&&&&&&});&&......&&&&&&&&&&&
&&&&&&&&&&&&}&else&if&(action.equals(Intent.ACTION_SEND_MULTIPLE))&{&&
&&&&&&&&&&&&&&.......&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&}&&
& & & & & &最前面那个isBluetoothAllowed()会判断是否处于飞行模式,如果是会禁止发送的。在launchDevicePicker()里还会 判断蓝牙是否已经打开,就是下面这个条件语句 (!BluetoothOppManager.getInstance(this).isEnabled())。如果已经打开了蓝牙,如果蓝牙打开了就进 入设备选择界面DeviceListPreferenceFragment(DevicePickerFragment)选择设备,这个跳转过程简单说明 下,注意这个new Intent(BluetoothDevicePicker.ACTION_LAUNCH)里字符串,完整定义public static final String ACTION_LAUNCH = "android.bluetooth.devicepicker.action.LAUNCH";路径frameworks/base/core /java/android/bluetooth/BluetoothDevicePicker.java,你会在setting应用的 manifest.xml里发现
&android:name=".bluetooth.DevicePickerActivity"&&
&&&&&&&&&&&&&&&&android:theme="@android:style/Theme.Holo.DialogWhenLarge"&&
&&&&&&&&&&&&&&&&android:label="@string/device_picker"&&
&&&&&&&&&&&&&&&&android:clearTaskOnLaunch="true"&&
&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&android:name="android.bluetooth.devicepicker.action.LAUNCH"&&&
&&&&&&&&&&&&&&&&&android:name="android.intent.category.DEFAULT"&&&
&&&&&&&&&&&&&&
&&&&&&&&&&
& & & & & 这样目标就指向了DevicePickerActivity,注意此时它的代码路径是packages/apps/Settings/src/com /android/settings/bluetooth/DevicePickerActivity.java,这个类代码很简单,只有一个 onCreate并只在里加载了一个布局文件bluetooth_device_picker.xml,就是这个布局文件指明下一站在哪,看下面就知道怎 么来到DevicePickerFragment了
&&&&&&&&android:id="@+id/bluetooth_device_picker_fragment"&&
&&&&&&&&android:name="com.android.settings.bluetooth.DevicePickerFragment"&&
&&&&&&&&android:layout_width="match_parent"&&
&&&&&&&&android:layout_height="0dip"&&
&&&&&&&&android:layout_weight="1"&&&
& & & & & 到了这里,已经可看到配对过的蓝牙列表了,选择其中一个点击会来到这里,里面那个sendDevicePickedIntent是我们关心的,又发了一个广播,去找谁收了广播就好了
&&&&void&onDevicePreferenceClick(BluetoothDevicePreference&btPreference)&{&&
&&&&&&&&mLocalAdapter.stopScanning();&&
&&&&&&&&LocalBluetoothPreferences.persistSelectedDeviceInPicker(&&
&&&&&&&&&&&&&&&&getActivity(),&mSelectedDevice.getAddress());&&
&&&&&&&&if&((btPreference.getCachedDevice().getBondState()&==&&
&&&&&&&&&&&&&&&&BluetoothDevice.BOND_BONDED)&||&!mNeedAuth)&{&&
&&&&&&&&&&&&sendDevicePickedIntent(mSelectedDevice);&&
&&&&&&&&&&&&finish();&&
&&&&&&&&}&else&{&&
&&&&&&&&&&&&super.onDevicePreferenceClick(btPreference);&&
&&&&&&&&}&&
&&&&}&div&&&&&public&static&final&String&ACTION_LAUNCH&=&"android.bluetooth.devicepicker.action.LAUNCH";&&
&&&&&&&&&private&void&sendDevicePickedIntent(BluetoothDevice&device)&{&&
&&&&&&&&&Intent&intent&=&new&Intent(BluetoothDevicePicker.ACTION_DEVICE_SELECTED);&&
&&&&&&&&&intent.putExtra(BluetoothDevice.EXTRA_DEVICE,&device);&&
&&&&&&&&&if&(mLaunchPackage&!=&null&&&&mLaunchClass&!=&null)&{&&
&&&&&&&&&&&&&intent.setClassName(mLaunchPackage,&mLaunchClass);&&
&&&&&&&&&}&&
&&&&&&&&getActivity().sendBroadcast(intent);}&&
& & & & 通过BluetoothDevicePicker.ACTION_DEVICE_SELECTED查找,会在/packages/apps /Bluetooth/src/com/android/bluetooth/opp/BluetoothOppReceiver.java这个找到对该 广播的处理,也就是下面的代码:
else&if&(action.equals(BluetoothDevicePicker.ACTION_DEVICE_SELECTED))&{&&
&&&&&&&&&&BluetoothOppManager&mOppManager&=&BluetoothOppManager.getInstance(context);&&&&&&&&&&&
&&&&&&&&&&BluetoothDevice&remoteDevice&=&intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);&&&
&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&&&mOppManager.startTransfer(remoteDevice);&&
&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&&&String&deviceName&=&mOppManager.getDeviceName(remoteDevice);&&
&&&&&&&&&&.......&&
& & & & 看来关键代码是mOppManager.startTransfer(remoteDevice),在packages/apps/Bluetooth /src/com/android/bluetooth/opp/BluetoothOppManager.java,里面开启线程执行发送动作,既然是 开启线程,直接去看run方法就是了,方法里面依旧区分单个和多个文件的发送,看一个就可以。
&&&public&void&startTransfer(BluetoothDevice&device)&{&&
&&&&&&&&if&(V)&Log.v(TAG,&"Active&InsertShareThread&number&is&:&"&+&mInsertShareThreadNum);&&
&&&&&&&&InsertShareInfoThread&insertT&&
&&&&&&&&synchronized&(BluetoothOppManager.this)&{&&
&&&&&&&&&&&&if&(mInsertShareThreadNum&&&ALLOWED_INSERT_SHARE_THREAD_NUMBER)&{&&
&&&&&&&&&&&&&&&&...........&&
&&&&&&&&&&&&&&&&return;&&
&&&&&&&&&&&&}&&
&&&&&&&&&&&&insertThread&=&new&InsertShareInfoThread(device,&mMultipleFlag,&mMimeTypeOfSendingFile,&&
&&&&&&&&&&&&&&&&&&&&mUriOfSendingFile,&mMimeTypeOfSendingFiles,&mUrisOfSendingFiles,&&
&&&&&&&&&&&&&&&&&&&&mIsHandoverInitiated);&&
&&&&&&&&&&&&if&(mMultipleFlag)&{&&
&&&&&&&&&&&&&&&&mfileNumInBatch&=&mUrisOfSendingFiles.size();&&
&&&&&&&&&&&&}&&
&&&&&&&&}&&
&&&&&&&&insertThread.start();&&
&&&&}&&&&&&&&&&&&&
&&&&public&void&run()&{&&
&&&&&&&&&&&&Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);&&
&&&&&&&&&&&&..........&&
&&&&&&&&&&&&if&(mIsMultiple)&{&&
&&&&&&&&&&&&&&&&insertMultipleShare();&&
&&&&&&&&&&&&}&else&{&&
&&&&&&&&&&&&&&&&insertSingleShare();&&
&&&&&&&&&&&&}&&
&&&&&&&&&&&&..........&}&&
& & & &以insertSingleShare() 为例,在它的实现会看到.().,不多想了,要去provider里找到insert()函数了,
对应的代码在BluetoothOppProvider.java
(bluetooth\src\com\android\bluetooth\opp),insert的函数实现如下,里面又拉起
BluetoothOppService,开始还以为只是针对数据库的操作,差点错过了风景。路径/packages/apps/Bluetooth
/src/com/android/bluetooth/opp/BluetoothOppService.java
public&Uri&insert(Uri&uri,&ContentValues&values)&{&&
&if&(rowID&!=&-1)&{&&
&&&&&context.startService(new&Intent(context,&BluetoothOppService.class));&&
&&&&&&ret&=&Uri.parse(BluetoothShare.CONTENT_URI&+&"/"&+&rowID);&&
&&&&&context.getContentResolver().notifyChange(uri,&null);&&
&}&else&{&&
&&&&&&if&(D)&Log.d(TAG,&"couldn't&insert&into&btopp&database");&&
&在BluetoothOppService的onStartCommand方法中会看到updateFromProvider(),这里又开启了一个线
程UpdateThread,后续代码当然是看它的run方法了,这里面内容不少,好在这部分代码注释比较多,理解起来不难。先暂时只关心发送的动作
insertShare方法,代码也不少,只贴出了告诉我们接下来去哪里的代码和有关的逻辑注释,在下面的代码我们可以看
到&BluetoothOppTransfer.java的对象,下一站就是它了。
private&void&insertShare(Cursor&cursor,&int&arrayPos)&{&&
&&&&.........&&
&&&&if&(info.isReadyToStart())&{&&
&&&&&&&&.............&&
&&&&&&&&if&(mBatchs.size()&==&0)&{&&
&&&&&&&&&&&........&&
&&&&&&&&&&&&mBatchs.add(newBatch);&&
&&&&&&&&&&&&if&(info.mDirection&==&BluetoothShare.DIRECTION_OUTBOUND)&{&&
&&&&&&&&&&&&&&&&&mTransfer&=&new&BluetoothOppTransfer(this,&mPowerManager,&newBatch);&&
&&&&&&&&&&&&}&else&if&(info.mDirection&==&BluetoothShare.DIRECTION_INBOUND)&{&&
&&&&&&&&&&&&&&&&mServerTransfer&=&new&BluetoothOppTransfer(this,&mPowerManager,&newBatch,&&
&&&&&&&&&&&&&&&&&&&&&&&&mServerSession);&&
&&&&&&&&&&&&}&&
&&&&&&&&&&&&if&(info.mDirection&==&BluetoothShare.DIRECTION_OUTBOUND&&&&mTransfer&!=&null)&{&&
&&&&&&&&&&&&&&&&mTransfer.start();&&
&&&&&&&&&&&&}&else&if&(info.mDirection&==&BluetoothShare.DIRECTION_INBOUND&&
&&&&&&&&&&&&&&&&&&&&&&&mServerTransfer&!=&null)&{&&
&&&&&&&&&&&&&&&&mServerTransfer.start();&&
&&&&&&&&&&&&}&&
&&&&&&&&}&else&{&&
&&&&&&&&&&&&.........&&
& & & & 虽然名字是start(),可实际并不是什么线程的,就是一普通方法的,路径是/packages/apps/Bluetooth/src/com/android/bluetooth/opp/BluetoothOppTransfer.java
public&void&start()&{&&
&&&&&&....这里省略未贴的代码是检查蓝牙是否打开,一个很谨慎的判断。看似无用,不过还是安全第一。&&
&&&&&&if&(mHandlerThread&==&null)&{&&
&&&&&&&&&&........&&
&&&&&&&&&&if&(mBatch.mDirection&==&BluetoothShare.DIRECTION_OUTBOUND)&{&&
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&startConnectSession();&&
&&&&&&&&&&}&else&if&(mBatch.mDirection&==&BluetoothShare.DIRECTION_INBOUND)&{&&
&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&startObexSession();&&
&&&&&&&&&&}&&
上面的代码是分发送文件和接收文件的,看下这两行代码就很清楚了,如果分享给别人是OUTBOUND,先执行
startConnectSession(),这个函数最后还是要跑到startObexSession()这里的,如果收文件直接
startObexSession,所以后面就只看startObexSession方法了
&public&static&final&int&DIRECTION_OUTBOUND&=&0;&&
&public&static&final&int&DIRECTION_INBOUND&=&1;&&
& & & &还是在同一个类里,发送流程快结束了,同样区分是传入还是传出,发文件看OUTBOUND,去BluetoothOppObexClientSession.java
private&void&startObexSession()&{&&&&&&&
&&&&&&if&(mBatch.mDirection&==&BluetoothShare.DIRECTION_OUTBOUND)&{&&
&&&&&&&&&&if&(V)&Log.v(TAG,&"Create&Client&session&with&transport&"&+&mTransport.toString());&&
&&&&&&&&&&mSession&=&new&BluetoothOppObexClientSession(mContext,&mTransport);&&
&&&&&&}&else&if&(mBatch.mDirection&==&BluetoothShare.DIRECTION_INBOUND)&{&&&&&&&&&&&
&&&&&&&&&&if&(mSession&==&null)&{&&
&&&&&&&&&&&&&&&markBatchFailed();&&
&&&&&&&&&&&&&&mBatch.mStatus&=&Constants.BATCH_STATUS_FAILED;&&
&&&&&&&&&&&&&&return;&&
&&&&&&&&&&}&&
&&&&&&&&&&if&(V)&Log.v(TAG,&"Transfer&has&Server&session"&+&mSession.toString());&&
&&&&&&mSession.start(mSessionHandler);&&
&&&&&&processCurrentShare();&&
& & & &同样名字是start,实际只是一个普通方法而已,会看又是一个线程&
),这时的start才是线程的start(),还是看run方法,一些线程状态的判断,看到doSend()
就是了,直正的发送在这里packages/apps/Bluetooth/src/com/android/bluetooth/opp
/BluetoothOppObexClientSession.java,
private&void&doSend()&{&&
&&&&&int&status&=&BluetoothShare.STATUS_SUCCESS;&&
&&&&&........关于status值的判断&&
&&&&&if&(status&==&BluetoothShare.STATUS_SUCCESS)&{&&
&&&&&&&&&&&&
&&&&&&&&&if&(mFileInfo.mFileName&!=&null)&{&&
&&&&&&&&&&&&&status&=&sendFile(mFileInfo);&&
&&&&&&&&&}&else&{&&
&&&&&&&&&&&&&&&
&&&&&&&&&&&&&status&=&mFileInfo.mS&&
&&&&&&&&&}&&
&&&&&&&&&waitingForShare&=&true;&&
&&&&&}&else&{&&
&&&&&&&&&Constants.updateShareStatus(mContext1,&mInfo.mId,&status);&&
&&&&&if&(status&==&BluetoothShare.STATUS_SUCCESS)&{&&
&&&&&&&&&Message&msg&=&Message.obtain(mCallback);&&
&&&&&&&&&msg.what&=&BluetoothOppObexSession.MSG_SHARE_COMPLETE;&&
&&&&&&&&&msg.obj&=&mI&&
&&&&&&&&&msg.sendToTarget();&&
&&&&&}&else&{&&
&&&&&&&&&Message&msg&=&Message.obtain(mCallback);&&
&&&&&&&&&msg.what&=&BluetoothOppObexSession.MSG_SESSION_ERROR;&&
&&&&&&&&&mInfo.mStatus&=&&&
&&&&&&&&&msg.obj&=&mI&&
&&&&&&&&&msg.sendToTarget();&&
& & & & sendFile是真正干活的,执行完sendFile会把分享成功或失败的消息传回去,sendFile里会执行打包的过程,对于字段的含义要看Headset.java,
代码路径在frameworks/base/obex/javax/obex/HeaderSet.java。这个sendFile方法行数虽然
多,不过逻辑还是比较清晰的,在这里就不贴了。到这蓝牙发送文件流程也就此结束。由于发送文件时长肯定是不确定,所以在这个流程我们看到了很多开启线程代
码也是很正常的,对于这线程,直接看对应的run方法就是了。
& & & & 对于蓝牙接收文件时会收到MSG_INCOMING_BTOPP_CONNECTION消息,收到这个消息是由于在蓝牙打开,即蓝牙状态是 BluetoothAdapter.STATE_ON时会执行
startSocketListener(),在这个函数开启了监听程序,看下面贴在一起的代码就明白了,
if&(action.equals(BluetoothAdapter.ACTION_STATE_CHANGED))&{&&
&&&&switch&(intent.getIntExtra(BluetoothAdapter.EXTRA_STATE,&BluetoothAdapter.ERROR))&{&&
&&&&&&&&case&BluetoothAdapter.STATE_ON:&&
&&&&&&&&&&&&if&(V)&Log.v(TAG,"Receiver&BLUETOOTH_STATE_CHANGED_ACTION,&BLUETOOTH_STATE_ON");&&
&&&&&&&&&&&&startSocketListener();&&
&&&&&&&&&&&&break;&&
&&&&&&&&&&&&&&&&&&&&&&&&&&
private&void&startSocketListener()&{&&
&&&&&&&&if&(V)&Log.v(TAG,&"start&RfcommListener");&&
&&&&&&&&mSocketListener.start(mHandler);&&
&&&&&&&&if&(V)&Log.v(TAG,&"RfcommListener&started");&&
mSocketListener.start(mHandler);这个的实现在这里,比较长,没有贴上来&&&&&
/packages/apps/Bluetooth/src/com/android/bluetooth/opp/BluetoothOppRfcommListener.java&&
& & & 回到上面处理消息,在BluetoothOppService.java的handlemessage中这个分支&case
BluetoothOppRfcommListener.MSG_INCOMING_BTOPP_CONNECTION,&创建一个
createServerSession(transport);
最后走/frameworks/base/obex/javax/obex/ServerSession.java的run方法中接收数据
private&void&createServerSession(ObexTransport&transport)&{&&
&&&&&mServerSession&=&new&BluetoothOppObexServerSession(this,&transport);&&
&&&&&mServerSession.preStart();&&&&&&&
对于蓝牙接收文件部分的流程还没有细致的跟踪,暂时只看到这里,对于了解基本流程这此应该够用了,同时如果想更好理解蓝牙OPP文件传输,了解是OBEX
基础协议也是有必要的,网上资料还是有不少的,多数是论文形式的。对于蓝牙OPP部分,本文只是描述android代码中的流程,旨在帮你快速的理清流
程,本文对OPP本身并没有深入,相关的知识需要进一步学习才行,有同道先行的童鞋还望赐教一二,谢谢。
阅读(...) 评论()菜鸟求教:笔记本电脑如何与手机进行蓝牙配对?
[问题点数:100分,结帖人CSDN]
本版专家分:0
结帖率 100%
CSDN今日推荐
本版专家分:551
本版专家分:3
本版专家分:3
本版专家分:0
本版专家分:568
本版专家分:0
本版专家分:551
本版专家分:1229
匿名用户不能发表回复!|
CSDN今日推荐}

我要回帖

更多关于 蓝牙耳机开机 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信