2Pascal-新时代的Pascal

 找回密码
 立即注册
搜索
热搜: fastreport
查看: 2835|回复: 12
打印 上一主题 下一主题

安卓手表与安卓手机的蓝牙通讯问题

[复制链接]

1

主题

8

帖子

19

积分

新手上路

Rank: 1

积分
19
跳转到指定楼层
楼主
发表于 2015-6-16 13:58:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
京东购书支持本站
本帖最后由 110302124 于 2015-6-16 14:07 编辑

同样的程序两台手机能互相调用蓝牙的connect并发送数据,一台手机和一台手表 同样的程序 手表能connect到手机 并能发送数据 手机向手表发送数据时确connect异常 这大概是什么回事 这个异常一般来说是找不到目标的service服务 才会报错的 但我手机和手表匹配后 能列出手机的蓝牙服务 其中有我需要的uuid对应的服务!   
fServiceName := 'IrMCSyncServiceClass_UUID';
  fServiceGUI := '{00001104-0000-1000-8000-00805F9B34FB}';


  java.io.ioexception:read failed,socket might closed or timeout 蓝牙通讯connect出错!



file:///C:\Users\Administrator\AppData\Roaming\Tencent\Users\110302124\QQ\WinTemp\RichOle\L3~2KHN543XB{N4U6$@V]GW.png

file:///C:\Users\Administrator\AppData\Roaming\Tencent\Users\110302124\QQ\WinTemp\RichOle\L3~2KHN543XB{N4U6$@V]GW.png


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

1

主题

8

帖子

19

积分

新手上路

Rank: 1

积分
19
沙发
 楼主| 发表于 2015-6-16 14:00:30 | 只看该作者
京东数码购物支持本站
这是蓝牙线程中开启的等待客户端连接的代码
procedure TServerConnectionTH.Execute;
var
  str,Msg: string;
  err:boolean;
  label reconn;
begin
    try
    reconn:
      ClientSocket := nil;
      err:=false;
      while not Terminated and (ClientSocket = nil) do
       begin
            self.parent.addlog('等待连接...');
            try
            ClientSocket := FServerSocket.Accept();
            except
              on E : Exception do
                begin
                  parent.addlog('err:'+e.Message);

                end;
            end;
            self.parent.addlog('连接成功...');

       end;
      self.parent.addlog('收到clientsocket');
      if(ClientSocket <> nil) then
      begin
        while not Terminated do
        begin
          try
          self.parent.addlog('读取数据...');
          FData := ClientSocket.ReadData;
          self.parent.addlog('读到数据'+inttostr(length(FData)));

          except
            err:=true;
            self.parent.addlog('读数据异常!');
            ClientSocket.DisposeOf();
            break;
          end;
          if length(FData) > 0 then
           begin
                str:=TEncoding.UTF8.GetString(FData);
                parent.revstrs.Add(str);
           end;
          sleep(100);
        end;

      end;
      if err and not terminated then
        begin
           parent.addlog('异常重连');
           goto reconn;
        end;

    except
      on E : Exception do
      begin
        Msg := E.Message;

      end;
    end;
end;
回复 支持 反对

使用道具 举报

90

主题

293

帖子

8万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
83967
板凳
发表于 2015-6-16 14:04:03 | 只看该作者
京东数码购物支持本站
addlog 线程 安全吗?加了同步了吗?
没有的话 卡死活该。
(C)(P)Flying Wang
回复 支持 反对

使用道具 举报

1

主题

8

帖子

19

积分

新手上路

Rank: 1

积分
19
地板
 楼主| 发表于 2015-6-16 14:11:01 | 只看该作者
京东数码购物支持本站
procedure TUV_BlueTooth.addlog(logstr: string);
begin
  logs.Add(logstr);
end;
这个肯定没问题
回复 支持 反对

使用道具 举报

1

主题

8

帖子

19

积分

新手上路

Rank: 1

积分
19
5#
 楼主| 发表于 2015-6-16 14:11:56 | 只看该作者
京东数码购物支持本站
程序本身没问题 两台手机能正常收发数据!主要是手表端不能调试 没法跟踪!
回复 支持 反对

使用道具 举报

90

主题

293

帖子

8万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
83967
6#
发表于 2015-6-16 14:18:56 | 只看该作者
京东数码购物支持本站
110302124 发表于 2015-6-16 14:11
procedure TUV_BlueTooth.addlog(logstr: string);
begin
  logs.Add(logstr);

procedure TServerConnectionTH.Execute;
如果这个是线程。或者他执行的位置,不是 UI 线程。
那么你肯定出问题。

他是不是线程,你知道。

如果他不是线程。那么有些手机上,这个代码,可能没在 UI 线程上执行。

一样出问题。
(C)(P)Flying Wang
回复 支持 反对

使用道具 举报

90

主题

293

帖子

8万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
83967
7#
发表于 2015-6-16 14:20:12 | 只看该作者
京东数码购物支持本站
我就遇到过 JNI  运行的环境,明明不是线程,但是也不是 UI 线程。所以必须进行线程同步,否则完蛋。
(C)(P)Flying Wang
回复 支持 反对

使用道具 举报

1

主题

8

帖子

19

积分

新手上路

Rank: 1

积分
19
8#
 楼主| 发表于 2015-6-16 14:29:13 | 只看该作者
京东数码购物支持本站
这个logs是一个tstrings变量,只在主界面的定时器里刷新 而且手表端能显示多个添加进去的logs 因此这个不是问题。
回复 支持 反对

使用道具 举报

1

主题

8

帖子

19

积分

新手上路

Rank: 1

积分
19
9#
 楼主| 发表于 2015-6-16 14:37:25 | 只看该作者
京东数码购物支持本站
FAdapter := FBluetoothManager.CurrentAdapter;
      ServerConnectionTH := TServerConnectionTH.Create(True);
      ServerConnectionTH.parent := self;

      ServerConnectionTH.FServerSocket := FAdapter.CreateServerSocket(fServiceName, StringToGUID(fServiceGUI), False);
      ServerConnectionTH.Start;
      result:=true;
      addlog('create thread');
回复 支持 反对

使用道具 举报

90

主题

293

帖子

8万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
83967
10#
发表于 2015-6-16 14:53:20 | 只看该作者
京东数码购物支持本站
不信就算了。我问你是不是线程,你都懒得回答。我更懒得去看你的垃圾代码。
(C)(P)Flying Wang
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|新时代Pascal论坛

GMT+8, 2024-12-22 23:17 , Processed in 0.062699 second(s), 25 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表