最近再写一个项目,需要自动签到。用的就是iBeacon,刚开始的时候比较懵比,不知道iBeacon是用来干啥的。因为iBeacon就是一个小盒盒,还是密封好的,就感觉自己懵了。然后上网查资料,才知道iBeacon就是一个小型的基站,手机打开蓝牙之后,如果你在这个基站的范围之内,会自动匹配上。你对iBeacon不需要做任何的操作,因为里面有电池,说是可以使用5年左右。

以上就是大概的情况,接下来介绍的是代码展示部分。

首先,在你的主清单中AndroidManifest.xml中添加权限:

权限添加完毕之后,接下来就是代码部分了

public class MainActivity extends Activity {

private BluetoothAdapter bluetoothAdapter;

private TextView textView;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

textView = (TextView) findViewById(R.id.textView1);

BluetoothManager manager = (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);

bluetoothAdapter = manager.getAdapter();

if (bluetoothAdapter == null || !bluetoothAdapter.isEnabled()) {

Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);

startActivityForResult(intent, 1);

}

bluetoothAdapter.startLeScan(mLeScanCallback);

}

public void playVibator(Context context, long timeLong) {

Vibrator vib = (Vibrator) context

.getSystemService(Service.VIBRATOR_SERVICE);

vib.vibrate(timeLong);

}

private BluetoothAdapter.LeScanCallback mLeScanCallback = new BluetoothAdapter.LeScanCallback() {

public void onLeScan(final BluetoothDevice device, final int rssi,

final byte[] scanRecord) {

int startByte = 2;

boolean patternFound = false;

// 寻找ibeacon

while (startByte <= 5) {

if (((int) scanRecord[startByte + 2] & 0xff) == 0x02

&& ((int) scanRecord[startByte + 3] & 0xff) == 0x15) {

patternFound = true;

break;

}

startByte++;

}

// 如果找到了的话

if (patternFound) {

String ibeaconName = device.getName();

int txPower = (scanRecord[startByte + 24]);

if (ibeaconName.equals("E-Beacon_CE6D94")) {

System.out.println(calculateAccuracy(txPower, rssi));

if (calculateAccuracy(txPower, rssi) > 1) {//这里是指iBeacon超过1米之后,textView字体变化

textView.setText("设备有危险!");

playVibator(MainActivity.this, 1000);

} else {

textView.setText("设备正常!");//在1米范围内

}

}

}

}

};

protected static double calculateAccuracy(int txPower, double rssi) {

if (rssi == 0) {

return -1.0; // if we cannot determine accuracy, return -1.

}

double ratio = rssi * 1.0 / txPower;

if (ratio < 1.0) {

return Math.pow(ratio, 10);

} else {

double accuracy = (0.89976) * Math.pow(ratio, 7.7095) + 0.111;

return accuracy;

}

}

}

以上就是全部代码展示,布局文件里面就是一个TextView,这里就不贴布局文件的代码了。

希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

android ibeacon距离,iBeacon使用蓝牙连接范围精确到1-3米相关推荐

  1. 熊晨沣蓝牙实战--小程序蓝牙连接2.0

    微信小程序蓝牙连接2.0说明: 1.本版本区分了ANDROID和IOS系统下蓝牙连接的不同方式. 2.兼容了更多情况下的链接包括: (1)未开启设备蓝牙,当监听到开启了蓝牙后自动开始连接. (2)初始 ...

  2. Android开发:IBeacon系列——安卓蓝牙4.0(BLE)开发之检测IBeacon热点初步

    检测ibeacon热点信号 软硬件要求:Android4.3及以上中支持BLE技术,同时蓝牙需要满足Bluetooth4.0及以上. iBeacon的工作原理是基于Bluetooth Low Ener ...

  3. Android 蓝牙连接

    一.概述 蓝牙是一种无线技术标准,可实现固定设备.移动设备和楼宇个人域网之间的短距离数据交换.最多可以同时和7个其它蓝牙设备建立连接,进行通信.蓝牙可分为两大类:传统蓝牙(蓝牙3.0规范之前),低功耗 ...

  4. Android 如何连续的扫描蓝牙的RSSI来测距离,实现三点定位

    Android 如何连续的扫描蓝牙的RSSI来测距离,实现三点定位 背景: 接到一个小伙伴求助,要实现用蓝牙来测算距离,并用三点计算出蓝牙设备方位,通过以往的经验最终帮这位小伙伴实现了他的需求,下面总 ...

  5. Android蓝牙连接问题总结

    最近开始接触Android的蓝牙设备问题,严格意义上来说,也算是第二次接触蓝牙机制了,之前对于蓝牙设备的整个过程,也不是太了解,只是接触了一些自己需要的部分.而这次应该算是比较深入的了解了蓝牙机制的部 ...

  6. android 蓝牙链接电脑,如何使从台式电脑到Android设备的测试蓝牙连接

    我正在使用具有蓝牙适配器的Ubuntu 11.10台式电脑和使用带有蓝牙的Android 2.2的Android平板电脑. (两款设备上的蓝牙版本应为2.0或2.1版本)如何使从台式电脑到Androi ...

  7. Android手机HC-05蓝牙连接Arduino nano获取DHT-11温湿度传感器数据

    如果您觉得本文对您有用,希望您点赞,收藏并且把它分享出去,不明白的可以在评论区留言,我会一一解答,感谢您的支持!! 目标 Android手机HC-05蓝牙连接Arduino nano获取DHT-11温 ...

  8. android 多个蓝牙连接电脑,Android BLE蓝牙多设备连接

    多设备连接的问题很典型,一方面实际应用中存在同时和多个设备通信的场景,另一方面蓝牙连接较耗时,如果能尽可能保持连接,则可省去不少时间,用户体验更好. 然而多设备连接也有一些问题要注意,有以下几点: 一 ...

  9. android蓝牙连接取消后怎么重新连上,重新启动后接收蓝牙连接更改

    我试图与接收器一起检查与不同设备的蓝牙连接,然后将其记录在logcat中.它适用于正常情况,但在重新启动时会失败.重新启动后接收蓝牙连接更改 这是一个正常的工作流程: 手机上 切换蓝牙开/关 重启手机 ...

  10. Android通过广播接收器BroadcastReceiver监听蓝牙连接变化

    上一篇介绍了通过广播对蓝牙的打开关闭等变化的监听,这一篇将对蓝牙连接状态的变化进行封装. 首先是广播接收器BlueToothConnectReceiver 类 import android.bluet ...

最新文章

  1. python经典题库和答案_吐血总结,Python经典面试题及答案
  2. Greenplum——升级的分布式PostgresSQL
  3. Leetcode 160. 相交链表 解题思路及C++实现
  4. 【论文学习】RepVGG: Making VGG-style ConvNets Great Again及网络重参数化的用途及效果分析
  5. 内存查看工具RAMMAP说明
  6. .NET 6 Preview 2 发布
  7. 【转】Power Platform(简介)
  8. Qt之设置QWidget背景色
  9. windows下apache建立不同虚拟主机
  10. is_null,is_numeric
  11. 2013 VS 2018:五年前和今天的十大数字货币大比拼
  12. matlab遗传算法超出,matlab遗传算法提示索引超出范围
  13. android apr分析,APR分析-内存篇
  14. 概率论与数理统计——总结
  15. 数据分析与数据仓库建模
  16. RT-Thread学习笔记|TCS34725 RGB 颜色识别传感器详解
  17. Java Algorithm 简单算法
  18. 代数一千二百年:花拉子米和智慧宫 ︱ 尼克
  19. Android 仿朋友圈,文字图片视频多条目,自动播放暂停
  20. Python的创作起源,成功是必然的

热门文章

  1. HDLBits练习——Fsm3comb
  2. 简易硬盘服务器,低成本个人服务器搭建 篇四:一机多用~Server2012的简单备份方法廉价版Time Capsule的养成之路...
  3. “山巅一寺一壶酒”——圆周率的谐音记忆法
  4. Java实现 LeetCode 365 水壶问题
  5. js浏览器的打印和去除页眉和页脚
  6. 【车间调度】改进的帝国企鹅算法求解车间调度问题【含Matlab源码 2041期】
  7. 技术问答-1 跨平台
  8. 云服务平台—恒源智享云
  9. 【STM32学习】(28)STM32实现光照度采集(标准库和HAL库实现)
  10. 微信小程序自定义tabBar使用