无法检测到附近的 AltBeacon
Not able to detect nearby AltBeacons
我正在尝试使用 Radius Networks (http://altbeacon.github.io/android-beacon-library/index.html) 为 Android 制作的蓝牙信标库来检测附近的信标(也由 Radius 制作)。但是,当我 运行 我创建的应用程序时,它没有检测到任何东西。
该库默认检测 AltBeacon,我已将信标配置为使用 AltBeacon 格式进行广告。我以 1Hz 开始广告速率,但将其增加到 5Hz,然后增加到 10Hz 以查看是否有帮助,但没有任何区别。传输功率应大致转换为 5 米,我一直在一米以内进行测试。 Radius 制作的配置应用程序可以毫无问题地检测到信标。
这是我的清单文件,其中包括库文档告诉您要包括的权限(它还说要包括位置权限,但它说库的 2.6+ 版本包括它 - 我正在使用 v . 2.12.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>
这里是 activity class,它应该每秒报告一次检测到的信标:
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
}
}
}
当我在 phone 上调试应用程序时,我看到的唯一日志消息是报告检测到的信标数量的消息,该消息始终为零 ("Beacons: 0")。我在日志中没有看到任何错误或任何其他消息表明任何配置错误。
此外,我一直在 Samsung Galaxy S7 运行ning Android 7.0.
上进行测试
我是 Android 开发和使用蓝牙信标的新手,所以我很可能错过了一些简单的事情。有什么想法吗?
原来没有授予位置权限,我需要添加一些代码来提示用户获得该权限,因为从 Marshmallow 开始就需要这样做。一旦我使用文档提供的代码发出请求 (http://altbeacon.github.io/android-beacon-library/requesting_permission.html),我一开始并不认为我需要它,但它成功了!
我正在尝试使用 Radius Networks (http://altbeacon.github.io/android-beacon-library/index.html) 为 Android 制作的蓝牙信标库来检测附近的信标(也由 Radius 制作)。但是,当我 运行 我创建的应用程序时,它没有检测到任何东西。
该库默认检测 AltBeacon,我已将信标配置为使用 AltBeacon 格式进行广告。我以 1Hz 开始广告速率,但将其增加到 5Hz,然后增加到 10Hz 以查看是否有帮助,但没有任何区别。传输功率应大致转换为 5 米,我一直在一米以内进行测试。 Radius 制作的配置应用程序可以毫无问题地检测到信标。
这是我的清单文件,其中包括库文档告诉您要包括的权限(它还说要包括位置权限,但它说库的 2.6+ 版本包括它 - 我正在使用 v . 2.12.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>
这里是 activity class,它应该每秒报告一次检测到的信标:
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
}
}
}
当我在 phone 上调试应用程序时,我看到的唯一日志消息是报告检测到的信标数量的消息,该消息始终为零 ("Beacons: 0")。我在日志中没有看到任何错误或任何其他消息表明任何配置错误。
此外,我一直在 Samsung Galaxy S7 运行ning Android 7.0.
上进行测试我是 Android 开发和使用蓝牙信标的新手,所以我很可能错过了一些简单的事情。有什么想法吗?
原来没有授予位置权限,我需要添加一些代码来提示用户获得该权限,因为从 Marshmallow 开始就需要这样做。一旦我使用文档提供的代码发出请求 (http://altbeacon.github.io/android-beacon-library/requesting_permission.html),我一开始并不认为我需要它,但它成功了!