android - 在方法 ALTBeacon 中运行 BeaconManager.bind 时出错

标签 android altbeacon

我的扫描器类扩展了 Application 并实现了 BeaconConsumer。当我尝试绑定(bind)或取消绑定(bind) BeaconManager 时,我收到 NullPointerException。

public class Scanner extends Application implements BeaconConsumer{
private BeaconManager beaconManager;

@Override
public void onCreate() {
    try {
        super.onCreate();

        beaconManager = BeaconManager.getInstanceForApplication(this);
        beaconManager.getBeaconParsers().add(new BeaconParser().setBeaconLayout(" m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24"));

    }
    catch (Exception e){
        e.printStackTrace();
    }

}


public void startScan(long period){
    try {
        if (beaconManager==null) {
            beaconManager = BeaconManager.getInstanceForApplication(Scanner.this);
            beaconManager.bind(Scanner.this);
            beaconManager.setForegroundScanPeriod(period);
            beaconManager.updateScanPeriods();
        }
    }
    catch (Exception e){
        e.printStackTrace();
    }
}

public void stopScan(){
    beaconManager.unbind(Scanner.this);
}

我收到以下错误:

W/System.err: java.lang.NullPointerException: Attempt to invoke virtual method 'void org.altbeacon.beacon.BeaconManager.bind(org.altbeacon.beacon.BeaconConsumer)' on a null object reference

最佳答案

我怀疑问题是 Scanner 类的多个实例正在运行。通常,您不应该手动创建 Android 应用程序类(扩展应用程序的类)的实例。您在 AndroidManifest.xml 中声明这样一个类,并让 Android 操作系统在启动应用程序时实例化它。如果您通过调用其构造函数手动实例化该类,则不会调用 onCreate() 方法并且不会创建 beaconManager

如果您想从 Activity 中获取此类的实例,您可以调用 startScan()stopScan() 等方法你可以使用:

扫描器 scanner = (Scanner) this.getApplication();

另外,请注意代码编写方式的另外两个问题:

  1. 如果调用startScan()stopScan()startScan(),第二个不会发生任何事情>startScan() 调用,因为 beaconManager 不会为 nil。扫描不会重新开始。

  2. 如果异步 bind(...); 调用尚未完成(通常它不会),导致代码落入 catch block 。一个简单的解决方法是删除对 beaconManager.updateScanPeriods(); 的调用,并简单地将 beaconManager.setForegroundScanPeriod(period); 调用移动到 bind( ...)

关于android - 在方法 ALTBeacon 中运行 BeaconManager.bind 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47843540/

相关文章:

android - App销毁时停止背景音乐

android - 如何在 NDK-BUILD 中构建 arcore camera_utility 共享库?

android - 在 ipad/平板电脑上调整背景大小

android - MD5签名如何影响应用程序安全?

android - 信标 + 蓝牙通信(GATT 配置文件)无法正常工作 [BLE]

android - AltBeacon 在停止蓝牙后继续扫描

android - 缓存json的最佳方式

java - AltBeacon getIdentifier 返回错误值

android - 扫描 AltBeacon 库中的信标时出现错误 "Scan failed, app cannot be registered"

android - 如何识别哪个信标正在退出,当信标超出范围时看到的信标通知