NORDIC Thing:52 Android App 学习之一:THINGY 52 节点与手机的蓝牙识别、过滤及通信建立
Android App 蓝牙扫描功能页面, SCAN 按键触发蓝牙扫描
XML 文件:
app\res\layout\activity_configuration.xml
JAVA 文件:
app\java\no.nordicsemi.android.nrfthingy\configuration\InitialConfigurationActivity.java
app\java\no.nordicsemi.android.nrfthingy\common\ScannerFragment.java
app\thingylib\java\no.nordicsemi.android.thingylib\utils\ThingyUtils.java (service UUID 定义)
==================================
启动函数
mConfirmThingy.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {if (Utils.checkIfVersionIsMarshmallowOrAbove()) {if (ActivityCompat.checkSelfPermission(InitialConfigurationActivity.this, Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) {if(isLocationEnabled()) {if (isBleEnabled()) {final String title = mConfirmThingy.getText().toString().trim();if (title.contains("Disconnect")) {mAddressNfc = null;mThingySdkManager.disconnectFromThingy(mDevice);mConfirmThingy.setText(R.string.scan_thingy);}mScannerFragment.show(getSupportFragmentManager(), null);} else enableBle();} else {Utils.showToast(InitialConfigurationActivity.this, getString(R.string.location_services_disabled));}} else {final PermissionRationaleDialogFragment dialog = PermissionRationaleDialogFragment.getInstance(Manifest.permission.ACCESS_COARSE_LOCATION, Utils.REQUEST_ACCESS_COARSE_LOCATION, getString(R.string.rationale_message_location));dialog.show(getSupportFragmentManager(), null);}} else {if (isBleEnabled()) {final String title = mConfirmThingy.getText().toString().trim();if (title.contains("Disconnect")) {mAddressNfc = null;mThingySdkManager.disconnectFromThingy(mDevice);}mScannerFragment.show(getSupportFragmentManager(), null);} else enableBle();}}
});
扫描函数
/*** Scan for 5 seconds and then stop scanning when a BluetoothLE device is found* then mLEScanCallback is activated* This will perform regular scan for custom BLE Service UUID* and then filter out using class ScannerServiceParser*/private void startScan() {// Since Android 6.0 we need to obtain either Manifest.permission.ACCESS_COARSE_LOCATION or Manifest.permission.ACCESS_FINE_LOCATION to be able to scan for// Bluetooth LE devices. This is related to beacons as proximity devices.// On API older than Marshmallow the following code does nothing.if (ContextCompat.checkSelfPermission(getContext(), Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {// When user pressed Deny and still wants to use this functionality, show the rationaleif (ActivityCompat.shouldShowRequestPermissionRationale(getActivity(), Manifest.permission.ACCESS_COARSE_LOCATION)) {return;}requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, REQUEST_PERMISSION_REQ_CODE);return;}mAdapter.clearDevices();mScanButton.setText(R.string.scanner_action_cancel);troubleshootView.setVisibility(View.VISIBLE);final BluetoothLeScannerCompat scanner = BluetoothLeScannerCompat.getScanner();final ScanSettings settings = new ScanSettings.Builder().setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY).setReportDelay(750).setUseHardwareBatchingIfSupported(false).setUseHardwareFilteringIfSupported(false).build();final List<ScanFilter> filters = new ArrayList<>();filters.add(new ScanFilter.Builder().setServiceUuid(mUuid).build());scanner.startScan(filters, settings, scanCallback);mIsScanning = true;mHandler.postDelayed(new Runnable() {@Overridepublic void run() {if (mIsScanning) {stopScan();}}}, SCAN_DURATION);}
重要说明
蓝牙扫描时, 过滤规划限制为以下语句中的 mUuid; 如蓝牙设备基本协议服务 UUID 不同,则无法识别;
filters.add(new ScanFilter.Builder().setServiceUuid(mUuid).build());
==================================
mUuid 变量追溯
private ParcelUuid mUuid;public void onCreate(final Bundle savedInstanceState) {super.onCreate(savedInstanceState);final Bundle args = getArguments();mUuid = args.getParcelable(PARAM_UUID);
// mUuid = ParcelUuid.fromString("EF680100-9B35-4933-9B10-52FFA9740042");}
--------------------------------------------------------------------------------------
private final static String PARAM_UUID = "param_uuid";public static ScannerFragment getInstance(final UUID uuid) {final ScannerFragment fragment = new ScannerFragment();final Bundle args = new Bundle();if (uuid != null) {args.putParcelable(PARAM_UUID, new ParcelUuid(uuid));}fragment.setArguments(args);return fragment;}
--------------------------------------------------------------------------------------
private ScannerFragment mScannerFragment;
mScannerFragment = ScannerFragment.getInstance(ThingyUtils.THINGY_BASE_UUID);mScannerFragment.show(getSupportFragmentManager(), null);
--------------------------------------------------------------------------------------
public static final UUID THINGY_BASE_UUID = new UUID(0xEF6801009B354933L, 0x9B1052FFA9740042L);
NORDIC Thing:52 Android App 学习之一:THINGY 52 节点与手机的蓝牙识别、过滤及通信建立相关推荐
- NORDIC Thing:52 Android App 学习之二:手机 App 蓝牙服务发现及数据读取
1. 选中扫描到的 Thingy 52 蓝牙设备; 文件: ScannerFragment.java public Dialog onCreateDialog(final Bundle savedIn ...
- Nordic Thingy:52 Android App 源码及APK
Nordic Thingy 52 硬件配置详细介绍 链接地址: https://infocenter.nordicsemi.com/index.jsp?topic=%2Fcom.nordic.info ...
- 22款Android App传藏后门用广告耗手机电量
信息安全公司Sophos的研究人员在Play发现有22款App藏着后门,这些App会自动点击各种在线广告耗尽手机电量,值得注意的是这些App已经被下载200多万次,其中一款还是知名手电筒工具Spark ...
- 【Android App】定位导航GPS中开启手机定位功能讲解及实战(附源码和演示 超详细)
需要源码请点赞关注收藏后评论区留言私信~~~ 一.开启定位功能 手机定位分为卫星定位和网络定位两大类. (1)卫星定位 卫星定位服务由几个全球卫星导航系统提供. 卫星定位的原理是根据多颗卫星与导航芯片 ...
- NORDIC Thingy:52 蓝牙 BLE 服务协议定义
Thingy: 52 SoC 蓝牙 BLE 服务协议定义 项目文件源于 Thingy_SDK_V2.1.0, 详细说明请见另一篇博客 "Nordic Thingy:52 SDK 安装及编译& ...
- Android版Office App,微软office android app
微软office android app是一款特地为安卓手机端开发的便携式办公软件版本.相信大学生或者是市面的各种,工作者对于office这种软件不会感到陌生,在各种工作场合都会非常高频率的出现.但是 ...
- 手机android app 无线控制led灯开关
先讲一下整体思路哈!手机肯定不能直接控制台灯的,需要一个中间物来协调,在这里我用的是51单片机(如果大家不知道也没关系,下面我还会说的).接下来就是具体怎么控制的,其实原理挺简单的.1.手机通过蓝牙来 ...
- 用Docker跑Android系统,在x86电脑玩ARM手机游戏
ReDroid (Remote anDroid) 是自架「云手机」的方案,透过docker在电脑上跑Android系统容器,再利用Scrcpy的镜射萤幕功能连线到Android桌面. ReDroid也 ...
- [nRF52832开发板:Nordic Thingy:52]Nordic Thingy:52到手
不得不说Nordic的资料很乱,查一个资料要跳转到好几个网页才有可能找到. nRF52832基本上是我接触到的第一个基本上没有中文资料的IC了,也当是养成一个好习惯,以后做一些使用/学习的记录 为了使 ...
最新文章
- seata-server没有从nacos配置中心读取配置_微服务新秀之Nacos,看了就会,我说的
- ThreadLocal 原理 以及设计思想
- python后端需要什么基础_python做后端好吗
- 形状相似的物品_空运一般货物及危险品和特殊物品对包装的要求和规定!
- 控制台应用程序换换为窗体应用_Epic为开发者设计了一套iPhone使用的运动捕捉应用程序...
- Python基础_列表与元组
- MinGW GCC 7.3.0 2018年1月25日 出炉啦
- makeinfo:未找到命令
- 软件测试学习(一)软件测试基础知识
- java怎么制作网页_如何制作网页
- c语言地址符作用,理解C语言取地址符
- 苹果公司CEO乔布斯演讲的15个秘诀
- Oliver的救援(广搜练习题)
- 加密勒索病毒:诞生、忽视以及爆炸式增长
- EXCEL单元格内容自动换行
- 『Transformer』为什么1*1卷积可以替代全连接层?
- 数据,数据元素 数据项,数据对象的详细理解
- 回归预测 | MATLAB实现SSA-BP多输入单输出回归预测
- Docker、Docker、Docker
- Mysql学习之二. ken_len索引长度计算