用VS2017 Xamarin 开发Andriod Bluetooth APP 历程记录

用VS2017 Xamarin 开发Andriod Bluetooth APP 历程记录

入门新手

作为一个漫长的软件开发项目经理以后, 代码丢的生了,新技术也丢的生了. 终于辞职以后, 有了大把的时间了, 做了20年IT, 浪了一段时间, 其他技能好像已经不适应了, 就还是捡起代码来的有感觉些, 踏实些, 这就是命! 来吧开发一个andriod 蓝牙app来玩玩吧. 作为一个C#背景的人来讲, 选中Xamarin.Forms作为开端, VS2017下载安装, 根据微软的入门指引, 建project, 启动模拟器。折腾啊, 好电脑还给公司了, 我自己老Y470, 模拟器根本跑不起来, 气的我奄奄一息. 后来俺家小老板花了8000多大洋给买了一台yoga710, 哈哈, 触屏+轻便, 不如游戏本有分量, 好吧, 配了两天环境, demo程序跑起了, 巨丑的andriod app 在模拟器上biubiu发着光了. 接下来就是bluetooth拉, 啥东东呢?

Bluetooth 权限瞭望

对于一个bluetooth设备经验仅限于平时用的无线鼠标和为了控制体重常早上起来称体重的好轻app和体重老不见下去数字以外, 其他一无所知. 有网络, 就有知识, 不急, 没人催出货, 慢慢来.

  1. Bluetooth Adapter ,蓝牙适配器;在电脑的设备管理器和手机上都有这货, 要写蓝牙app, 必定通过代码去玩它. 作为一个开发平台肯定有个啥类去用的, 找找吧. 嗯就是这个类BluetoothAdapter, 怎么用, 我还不知道.
  2. Bluetooth AccessRight, 你要操纵任何东东, 你得有权限吧, 在我建的iBoardcast.Andriod项目属性的Android清单里, 发现三个相关的权限;BLUETOOTH/ BLUETOOTH ADMIN/ BLUETOOTH PRIVILEDGED, 这三个权限各自代表什么意思呢? 存储在哪个文件里面呢, 点点就知道了. 靠, checkbox, 都可以选, 不是互斥的. 三个货都点了,查找bluetooth关键字, 在AndriodManifest.xml里. 所以直接在xml里改就ok了.
 <uses-permission android:name="android.permission.BLUETOOTH_PRIVILEGED" />
 <uses-permission android:name="android.permission.BLUETOOTH" />
 <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
 <uses-feature android:name="android.hardware.bluetooth_le" android:required="true" />
  • BLUETOOTH: 允许程序连接到已配对的蓝牙设备, 请求连接/接收连接/传输数据需要改权限, 主要用于对配对后进行操作; 做Bluetooth App的这个肯定的开.
  • BLUETOOTH_ADMIN: 允许程序发现和配对蓝牙设备, 该权限用来管理蓝牙设备, 有了这个权限, 应用才能使用本机的蓝牙设备,
    主要用于对配对前的操作; 做Bluetooth App的这个的开.
  • BLUETOOTH_PRIVILEGED: 只有系统才能获得这个权限, 写app的猿人们就用不着这个, 开启也没得用的, 直接跳起跑就是了.
  • android.hardware.bluetooth_le: 你的真机当然的支持蓝牙BLE

那么问题来了, 常规Admin按道理比Bluetooth权限高吧, 开admin就够了嘛, 可是达人们说优先级 : BLUETOOTH权限是BLUETOOTH_ADMIN权限的前提, 如果没有BLUETOOTH权限, 就不能使用BLUETOOTH_ADMIN权限; 别较劲了, 平台又不是我们说啥就啥的, 都开吧, 反正就是一句话而已.

权限还有两个, 传说 google在android6.0之后,为了更好的保护用户的数据安全,所有需要访问硬件唯一标识符的地方都需要申请位置权限,据说还要动态在代码里请求的

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.LOCATION_HARDWARE" />
  • ACCESS_COARSE_LOCATION, 允许一个程序访问CellID或WiFi热点来获取粗略的位置.
  • ACCESS_FINE_LOCATION, 允许一个程序访问精良位置(如GPS)
    这样说来, 蓝牙是通过CellID来的, 应该只打开ACCESS_COARSE_LOCATION 就够了. 不明白网上大神们都让两个都打开, 浪费资源么? 不了解就先都加上吧. 稍后调试的时候来试试看.

GitHub上有很多关于BLE开源项目, 他们应该都是相对完美的控制BLE类库, 作为一个C#人类猿, 选择了Plugin.BluetoothLE, 原因就是它是用的Xamarin Standard Form框架开发的, 跟我想要熟悉的一致, 悲催的是, 源代码sample下下来后并不能直接运行在模拟器上, 不明白, 有些方法类感觉还是有毛病. 模仿sample自己边看边写, 还好, 现在能找到设备了. 甚至还把俺的健康称的services 和characteristics给扫出来了. 哈哈. success. 做自己的应用就是要自己建立协议和解析数据了.
https://github.com/aritchie/bluetoothle

经验

做安装包的时候, 链接那里不要选择用户库, 不然一在真机运行直接挂出,而且日志都没有.
怎么做安装包, 看微软的连接, 玩一下就会了
https://docs.microsoft.com/zh-cn/xamarin/android/deploy-test/release-prep/?tabs=windows

  • 0
    点赞
  • 0
    评论
  • 2
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值