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 节点与手机的蓝牙识别、过滤及通信建立相关推荐

  1. NORDIC Thing:52 Android App 学习之二:手机 App 蓝牙服务发现及数据读取

    1. 选中扫描到的 Thingy 52 蓝牙设备; 文件: ScannerFragment.java public Dialog onCreateDialog(final Bundle savedIn ...

  2. Nordic Thingy:52 Android App 源码及APK

    Nordic Thingy 52 硬件配置详细介绍 链接地址: https://infocenter.nordicsemi.com/index.jsp?topic=%2Fcom.nordic.info ...

  3. 22款Android App传藏后门用广告耗手机电量

    信息安全公司Sophos的研究人员在Play发现有22款App藏着后门,这些App会自动点击各种在线广告耗尽手机电量,值得注意的是这些App已经被下载200多万次,其中一款还是知名手电筒工具Spark ...

  4. 【Android App】定位导航GPS中开启手机定位功能讲解及实战(附源码和演示 超详细)

    需要源码请点赞关注收藏后评论区留言私信~~~ 一.开启定位功能 手机定位分为卫星定位和网络定位两大类. (1)卫星定位 卫星定位服务由几个全球卫星导航系统提供. 卫星定位的原理是根据多颗卫星与导航芯片 ...

  5. NORDIC Thingy:52 蓝牙 BLE 服务协议定义

    Thingy: 52 SoC 蓝牙 BLE 服务协议定义 项目文件源于 Thingy_SDK_V2.1.0, 详细说明请见另一篇博客 "Nordic Thingy:52 SDK 安装及编译& ...

  6. Android版Office App,微软office android app

    微软office android app是一款特地为安卓手机端开发的便携式办公软件版本.相信大学生或者是市面的各种,工作者对于office这种软件不会感到陌生,在各种工作场合都会非常高频率的出现.但是 ...

  7. 手机android app 无线控制led灯开关

    先讲一下整体思路哈!手机肯定不能直接控制台灯的,需要一个中间物来协调,在这里我用的是51单片机(如果大家不知道也没关系,下面我还会说的).接下来就是具体怎么控制的,其实原理挺简单的.1.手机通过蓝牙来 ...

  8. 用Docker跑Android系统,在x86电脑玩ARM手机游戏

    ReDroid (Remote anDroid) 是自架「云手机」的方案,透过docker在电脑上跑Android系统容器,再利用Scrcpy的镜射萤幕功能连线到Android桌面. ReDroid也 ...

  9. [nRF52832开发板:Nordic Thingy:52]Nordic Thingy:52到手

    不得不说Nordic的资料很乱,查一个资料要跳转到好几个网页才有可能找到. nRF52832基本上是我接触到的第一个基本上没有中文资料的IC了,也当是养成一个好习惯,以后做一些使用/学习的记录 为了使 ...

最新文章

  1. seata-server没有从nacos配置中心读取配置_微服务新秀之Nacos,看了就会,我说的
  2. ThreadLocal 原理 以及设计思想
  3. python后端需要什么基础_python做后端好吗
  4. 形状相似的物品_空运一般货物及危险品和特殊物品对包装的要求和规定!
  5. 控制台应用程序换换为窗体应用_Epic为开发者设计了一套iPhone使用的运动捕捉应用程序...
  6. Python基础_列表与元组
  7. MinGW GCC 7.3.0 2018年1月25日 出炉啦
  8. makeinfo:未找到命令
  9. 软件测试学习(一)软件测试基础知识
  10. java怎么制作网页_如何制作网页
  11. c语言地址符作用,理解C语言取地址符
  12. 苹果公司CEO乔布斯演讲的15个秘诀
  13. Oliver的救援(广搜练习题)
  14. 加密勒索病毒:诞生、忽视以及爆炸式增长
  15. EXCEL单元格内容自动换行
  16. 『Transformer』为什么1*1卷积可以替代全连接层?
  17. 数据,数据元素 数据项,数据对象的详细理解
  18. 回归预测 | MATLAB实现SSA-BP多输入单输出回归预测
  19. Docker、Docker、Docker
  20. Mysql学习之二. ken_len索引长度计算

热门文章

  1. linux系统下的的nohup命令
  2. ⑮霍兰德EA*型如何选专业?高考志愿填报选专业
  3. 数据库的主键约束和自增长
  4. TCP粘包以及粘包处理
  5. javascript设计模式-策略模式(Strategy)
  6. Synopsys VCS仿真编译选项
  7. 子类能访问父类的哪些成员?
  8. 使用证件照api接口快速上线证件照业务-超详细!
  9. c语言初学-const指针
  10. Nginx编译安装及配置文件详解