iBeacon使用蓝牙连接范围精确到1-3米

 更新时间:2018年10月31日 09:13:20   作者:来瓶94年的爽歪歪  
这篇文章主要为大家详细介绍了iBeacon使用蓝牙连接范围精确到1到3米,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

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

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

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

<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />

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

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实现微信聊天语言点击喇叭动画效果

    Android实现微信聊天语言点击喇叭动画效果

    这篇文章主要为大家详细介绍了Android实现微信聊天语言点击喇叭动画效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-07-07
  • Android 实现带头部文字输入框的自定义控件

    Android 实现带头部文字输入框的自定义控件

    这篇文章主要介绍了Android 实现带头部文字输入框的自定义控件,帮助大家更好的理解和学习使用Android,感兴趣的朋友可以了解下
    2021-04-04
  • Android实现机房座位预约系统

    Android实现机房座位预约系统

    这篇文章主要为大家详细介绍了Android实现机房座位预约系统,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-04-04
  • Android端代码量非常小的分页加载库

    Android端代码量非常小的分页加载库

    这篇文章主要给大家介绍了关于Android端代码量非常小的分页加载库的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • Android使用Handler和Message更新UI

    Android使用Handler和Message更新UI

    这篇文章主要介绍了Android使用Handler和Message更新UI的相关资料,感兴趣的小伙伴们可以参考一下
    2016-07-07
  • Android SQLite数据库进行查询优化的方法

    Android SQLite数据库进行查询优化的方法

    这篇文章主要给大家介绍了关于Android SQLite数据库进行查询优化的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-11-11
  • Android编程实现网络图片查看器和网页源码查看器实例

    Android编程实现网络图片查看器和网页源码查看器实例

    这篇文章主要介绍了Android编程实现网络图片查看器和网页源码查看器,结合实例形式分析了Android针对网络图片及网页的相关操作技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2016-01-01
  • Android 仿QQ头像自定义截取功能

    Android 仿QQ头像自定义截取功能

    在我们的qq聊天工具中,经常会使用qq头像截取功能,基于代码是怎么实现的呢?下面小编通过本文给大家分享android 仿qq头像自定义截取功能的思路分析及编码实现过程,感兴趣的朋友一起学习吧
    2016-10-10
  • android开发 eclipse alt+”/”自动提示失效的解决方法

    android开发 eclipse alt+”/”自动提示失效的解决方法

    最近在学习android开发布局这块。第一次学习,很多代码不熟悉。所以自动提示对我来说很重要。但悲催的就是这个自动提示失效。今天在网上搜索了一下解决办法,主要有一下几种方法
    2014-05-05
  • Android中BaseAdapter用法示例

    Android中BaseAdapter用法示例

    这篇文章主要介绍了Android中BaseAdapter用法,分析了BaseAdapter的功能、使用方法与相关注意事项,需要的朋友可以参考下
    2016-08-08

最新评论