当前位置:编程学习 > wap >>

小弟开发android,遇到关于基于蓝牙的"电话本访问协议(PBAP)"的一个问题。。

小弟在Android系统上开发一个通过蓝牙获取他机联系人及通话记录的程序,参考相关资料后采用了PBAP协议,首先通过UUID:0000112f-0000-1000-8000-00805f9b34fb   建立BluetoothSocket连接。建立socket连接后,根据IrOBEX文档所述规则及PBAP Specification的描述,通过socket的IO流向他机传字节流,首先是写入request:
0x80  //Opcode

0x00  //packet length
0x1f

0x10  //Version 1.0 of OBEX
0x00  //flag
0x20  //8K maximum packet size
0x00

0x46  //header of target
0x00  //length
0x13

0x79  //pbap target 796135f0-f0c5-11d8-0966-0800200c9a66
0x61
0x35
0xf0
0xf0
0xc5
0x11
0xd8
0x09
0x66
0x08
0x00
0x20
0x0c
0x9a
0x66

0xc3  //irOBEX里说是 一个length header 不知道有啥用
0x00  //length为十六进制 f483
0x00
0xf4
0x83


将这一长段字节码传走后,从他机得到reaponse packet
0xa0 //成功

0x00
0x1f
0x10
0x00

0xff  //他机可提供的最大packet size
0xfe

0xcb  //Connection ID
0x00
0x00
0x00
0x01

0x4a  //Header of Who
0x00
0x13

0x79  //pbap target 796135f0-f0c5-11d8-0966-0800200c9a66
0x61
0x35
0xf0
0xf0
0xc5
0x11
0xd8
0x09
0x66
0x08
0x00
0x20
0x0c
0x9a
0x66

得到这样的反馈即表明对OBEX服务的连接已经成功,pbap服务启动,之后进行get操作,写request字节流:


         os.write((0x83));//Get Header 0x83
               os.write(0x00);
                  os.write(0x4F);
               ///
              
               os.write(0xCB);//Connection ID   0xCB
               os.write(0x00);
               os.write(0x00);
               os.write(0x00);
               os.write(0x01);
              
              
              
              
               os.write(0x01);//Name
               os.write(0x00);
               os.write(0x21);
              
              
                 char[] cs = new char[] { 't', 'e', 'l', 'e', 'c', 'o', 'm','/' ,'p' ,'b' ,'.' ,'v' ,'c' ,'f'};//要转换的char数组  
                   String str = new String(cs);  
                   byte[] bs = str.getBytes("Unicode");
                  /*
                   for(int i0 = 0;i0<bs.length;i0++)
                  {
                   bs[i0] = (byte) (bs[i0]&0xff);
                  }
                  */
               os.write(bs);
              
                  
              
              
              
               os.write(0x42);//Type
               os.write(0x00);
               os.write(0x12);
              
              
                 char[] cs2 = new char[] { 'x', '-', 'b', 't', '/', 'p', 'h','o' ,'n' ,'e' ,'b' ,'o' ,'o' ,'k'};//要转换的char数组  
                   String str2 = new String(cs2);  
                   byte[] bs2 = str2.getBytes();
                   /*
                   for(int i1 = 0;i1<bs2.length;i1++)
                   {
                    bs2[i1] = (byte) (bs2[i1]&0xff);
                   }
               */
                  os.write(bs2);
                  os.write(0x00);
              
               os.write(0x4C);//AppParam
               os.write(0x00);//appParam length
               os.write(0x14);
              
               os.write(0x06);//Tag for Filter
               os.write(0x08);//length field
              
              
               os.write(0x00);//不对vcard做任何过滤               os.write(0x00);
               os.write(0x00);
               os.write(0x00);
               os.write(0x00);
               os.write(0x00);
               os.write(0x00);
               os.write(0x00);
              
              

              
              
               os.write(0x07);//Tag for Format
               os.write(0x01);//length field
               os.write(0x01);//format value vcard 3.0
              
               os.write(0x04);//Tag for MLC
               os.write(0x02);//length
               os.write(0xff);//0xff
               os.write(0xff);//0xff



之后得到一个8字节长的response packet,opcode为C6,查询irOBEX,C6对应一个错误码,是 Not Acceptable
同时在PBAP specification上找到对Not Acceptable的一个解释:
The request is recognized and all the parameter values are legal, but there is a problem with a parameter value that indicates a request that cannot be met by the Server.
翻译一下既是:请求被识别且参数合法,但是参数不能被服务器(即他机)处理。



但是这样的一个request是参照PBAP的官方specificati所写,所以小弟十分困惑,期待各路达人的解救,百分送上!万分感谢!~~~~~~^-^ socket 蓝牙 pbap obex 电话本 --------------------编程问答-------------------- 有没有试一下SetPhoneBook 请求能不能走通? --------------------编程问答-------------------- 我最近也在研究这个,不知道楼主研究的怎么样了,求资料! --------------------编程问答-------------------- 楼主给个联系方式吧,真心有问题请教!跪求!!!
补充:移动开发 ,  Android
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,