代码之家  ›  专栏  ›  技术社区  ›  bhawk90

无法检测附近的备降信标

  •  1
  • bhawk90  · 技术社区  · 7 年前

    我正在尝试使用Radius Networks为Android开发的蓝牙信标库( http://altbeacon.github.io/android-beacon-library/index.html )探测附近的信标(也由Radius制作)。然而,当我运行我创建的应用程序时,它不会检测到任何东西。

    库默认检测AltBeacon,我已将这些信标配置为使用AltBeacon格式进行播发。我开始的广告频率为1Hz,但增加到5Hz,然后再增加到10Hz,看看这是否有帮助,但没有什么区别。发射功率应大约转换为5米,我一直在一米之内进行测试。Radius的配置应用程序可以检测到信标,没有任何问题。

    这是我的清单文件,其中包括库文档告诉您要包括的权限(它还说要包括位置权限,但它说库的2.6以上版本包括它-我使用的是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类,它应该每秒报告一次检测到的信标:

    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 回复  |  直到 7 年前
        1
  •  1
  •   bhawk90    7 年前

    结果是没有授予位置权限,我需要添加一些代码来提示用户获得该权限,因为从Marshmallow开始就需要这样做。有一次,我使用文档提供的代码提出请求( http://altbeacon.github.io/android-beacon-library/requesting_permission.html ),一开始我认为我不需要它,它成功了!