Android 安卓BTLE->;找不到回调包装器

Android 安卓BTLE->;找不到回调包装器,android,altbeacon,android-ibeacon,Android,Altbeacon,Android Ibeacon,我在我的应用程序中使用Android Beacon库,我逐字复制了他们的测距示例,但我不断得到错误,你可以在代码下面看到。任何帮助都将不胜感激,我刚刚进入BTLE/beacons package com.example.josh.beacons; import android.os.Bundle; import android.os.RemoteException; import android.support.v7.app.AppCompatActivity; import android.

我在我的应用程序中使用Android Beacon库,我逐字复制了他们的测距示例,但我不断得到错误,你可以在代码下面看到。任何帮助都将不胜感激,我刚刚进入BTLE/beacons

package com.example.josh.beacons;

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

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

import java.util.Collection;

public class MainActivity extends AppCompatActivity implements BeaconConsumer {
    protected static final String TAG = "RangingActivity";
    private BeaconManager beaconManager;

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

        beaconManager = BeaconManager.getInstanceForApplication(this);
        beaconManager.getBeaconParsers().add(new BeaconParser().setBeaconLayout("m:2-3=beac,i:4-19,i:20-21,i:22-23,p:24-24,d:25-25"));
        beaconManager.bind(this);
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        beaconManager.unbind(this);
    }
    @Override
    public void onBeaconServiceConnect() {
        beaconManager.setRangeNotifier(new RangeNotifier() {
            @Override
            public void didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region) {
                if (beacons.size() > 0) {
                    Log.i(TAG, "The first beacon I see is about " + beacons.iterator().next().getDistance() + " meters away.");
                }
            }
        });

        try {
            beaconManager.startRangingBeaconsInRegion(new Region("myRangingUniqueId", null, null, null));
        } catch (RemoteException e) {    }
    }
}

如果在LogCat中看到的行不是来自您自己的代码,请小心不要太认真。如果一行以“D/”开头,这表示一个调试行,而不是一个错误(“E/”),则尤其如此。我已经构建了几十个beacon应用程序,看到该行的次数超过了我的计数,并且可以自信地说它并不表示存在问题


底线:您可以安全地忽略该消息。请注意,在LogCat中,Android蓝牙堆栈的噪音是出了名的。这不会是你学会忽略的第一行。

正如例外答案所说,虽然你可以安全地忽略这条消息,但它告诉了你一些事情。最有可能的情况是,它告诉您,您的设备已关闭应用程序的位置权限,这将阻止您的信标扫描工作。如果应用程序具有适当的权限并且正在正确扫描,您将看到类似的内容

D/BluetoothAdapter: STATE_ON
D/BluetoothLeScanner: onClientRegistered() - status=0 clientIf=5
如果您的目标是API级别23+,即使您的minsdk设置得更低(如16),您也一定要在代码中检查是否启用了位置权限


我花了好几个小时才意识到这只是无声的失败,因为该应用程序的位置服务被关闭。

不确定在过去4年中是否有人修改了代码,因为这表明与发布的答案不同

事实证明,对
stopScan()
的不当调用是罪魁祸首。 如果传入的
ScanCallback
参数周围的包装器实现为
null
BluetoothLeScanner
打印此日志消息并返回,而不停止扫描。 我认为应该将其记录为错误(
Log.e
)而不是调试日志


我可以通过确保只调用
stopScan(callback)
来摆脱它,如果以前调用了
startScan(callback)

那么,我无法理解为什么检测到0个信标。我想这可能是原因。我刚刚开始获取“状态打开”和“找不到回调包装器”日志,从那时起,我的应用程序再也检测不到信标了(以前工作过)。我使用的是三星S6 6.0.1,没有任何改变。可能连接到同一个应用程序,但在其他手机上仍然可以使用。奇怪的是:beaconinside的Beaconmanager应用程序仍然检测到信标。所以“找不到回调包装器”可以安全地忽略?是的。请参阅此处更详细的答案:需要检查的更重要的一点是,您收到了对
onscanfiled()
的调用。如果你是,你需要调查原因。你是否将“MyRangUniqueID”更改为你的信标的UUID?事实上,我忘了申请核心位置许可。问题已解决~“很可能是它告诉您,您的设备已关闭位置权限”。我的情况不是这样。
D/BluetoothAdapter: STATE_ON
D/BluetoothLeScanner: onClientRegistered() - status=0 clientIf=5