无法检测到附近的AltBeacons

时间:2018-02-08 18:35:32

标签: android bluetooth altbeacon

我正在尝试使用由Radius Networks(http://altbeacon.github.io/android-beacon-library/index.html)制作的Android蓝牙信标库来检测附近的信标(也由Radius制作)。但是,当我运行我创建的应用程序时,它没有检测到任何内容。

默认情况下,库会检测AltBeacons,并且我已使用AltBeacon格式配置信标进行通告。我开始以1Hz的广告速率,但是将它增加到5Hz然后10Hz以查看是否会有所帮助,但它没有任何区别。发射功率应该大致转换为5米,我一直在一米之内进行测试。由Radius制作的配置应用程序可以毫无问题地检测信标。

这是我的清单文件,其中包含库文档告诉您要包​​含的权限(它还说包含位置权限,但它表示库的2.6+版本包含它 - 我正在使用v.2.12 0.4):

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.whawk.beaconsensor">

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

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

这是活动类,应该每秒报告一次检测到的信标:

package com.example.whawk.beaconsensor;

import android.os.RemoteException;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;

import org.altbeacon.beacon.Beacon;
import org.altbeacon.beacon.BeaconConsumer;
import org.altbeacon.beacon.BeaconManager;
import org.altbeacon.beacon.RangeNotifier;
import org.altbeacon.beacon.Region;

import java.util.Collection;

public class MainActivity extends AppCompatActivity implements BeaconConsumer {

    private BeaconManager beaconManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        beaconManager = BeaconManager.getInstanceForApplication(this);
        beaconManager.bind(this);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        beaconManager.unbind(this);
    }

    @Override
    public void onBeaconServiceConnect() {
        beaconManager.addRangeNotifier(new RangeNotifier() {
            @Override
            public void didRangeBeaconsInRegion(Collection<Beacon> collection, Region region) {
                Log.i("MainActivity", "Beacons: " + collection.size());
                //TODO Update the value text views with the appropriate RSSI values
                for (Beacon beacon : collection) {
                    String name = beacon.getBluetoothName();
                    String id1 = beacon.getId1().toString();
                    int rssi = beacon.getRssi();
                    Log.i("MainActivity", "Beacon: [name: " + name + ", ID1: " + id1 +
                        ", RSSI: " + rssi + "]");
                }
            }
        });

        try {
            beaconManager.startRangingBeaconsInRegion(new Region("com.example.whawk.region",
                    null, null, null));
        } catch (RemoteException e) {
            // do nothing
        }
    }
}

当我在手机上调试应用程序时,我看到的唯一日志消息是报告检测到多少信标的消息,总是为零(“信标:0”)。我没有在日志中看到任何错误或任何其他消息,表明任何错误配置。

另外,我一直在运行Android 7.0的三星Galaxy S7上进行测试。

我是Android开发和使用蓝牙信标的新手,所以我很可能错过了一些简单的东西。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

事实证明,未授予位置权限,我需要添加一些代码来提示用户提供该权限,因为需要从Marshmallow开始。一旦我使用doc提供的代码发出请求(http://altbeacon.github.io/android-beacon-library/requesting_permission.html),我一开始并不认为我需要它,它就有用了!