Android BTLE -> 找不到回调包装器
Android BTLE -> Cannot find callback wrapper
我在我的应用程序中使用 Android Beacon Library,我逐字逐句地复制了他们的测距示例,但我不断收到您在代码下方看到的错误。任何帮助将不胜感激,我刚刚进入 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) { }
}
}
我得到的错误:
05-12 20:21:44.769 25775-25775/com.example.josh.beacons D/BluetoothAdapter: STATE_ON
05-12 20:21:44.770 25775-25775/com.example.josh.beacons D/BluetoothLeScanner: could not find callback wrapper
05-12 20:21:44.787 25775-26783/com.example.josh.beacons D/RangingActivity: didRangeBeacons 0
请注意,如果您在 LogCat 中看到的行不是您自己的代码,请不要太当真。如果该行以 "D/" 开头,则尤其如此,这表示调试行,而不是错误 ("E/")并且可以自信地说这并不表示有问题。
底线:您可以安全地忽略该消息。请注意 Android 蓝牙堆栈在 LogCat 中是出了名的嘈杂。这不会是您学会忽略的第一行。
虽然您可以如例外答案所述安全地忽略此消息,但它会告诉您一些事情。它很可能告诉您您的设备已关闭您的应用程序的位置权限,这会阻止您的信标扫描工作。如果该应用程序具有适当的权限并且正在正确扫描,您会看到更像
的内容
D/BluetoothAdapter: STATE_ON
D/BluetoothLeScanner: onClientRegistered() - status=0 clientIf=5
如果您的目标是 API 级别 23+,即使您的 minsdk 设置得较低(例如 16),您肯定希望检查您的代码以启用位置权限。
我为此浪费了很多时间才意识到它只是由于应用程序的位置服务被关闭而导致无声失败。
不确定是否有人在过去 4 年中调整了代码,因为 BluetoothLeScanner 建议的内容与发布的答案不同。
事实证明,对 stopScan()
的不正确调用是罪魁祸首。
如果围绕传入的 ScanCallback
参数的包装器实现是 null
,BluetoothLeScanner
会打印此日志消息,并且 returns 不会停止扫描。
我认为它应该记录为错误 (Log.e
) 而不是调试日志。
如果之前调用了 startScan(callback)
,我可以通过确保只调用 stopScan(callback)
来摆脱它。
正如很多人所说,通常可以安全地忽略此消息。但是,我 运行 遇到了与您类似的问题 - 有时,我使用 BluetoothLeScanner 检测到 0 个 BLE 设备。
查看由 BluetoothLeScanner class 生成的 Logcat 中的调试输出,我看到每当检测到零个设备时,onScannerRegistered() - status=6 scannerId=-1 mScannerId=0
。通常,作为参考,输出为 onScannerRegistered() - status=0 scannerId=10 mScannerId=0
.
查看各种Github repos,我发现这组输出对应于Android BLE不支持stopping/starting扫描超过5个的事实30 秒内的次数。像这样的日志消息通常可以安全地忽略,但是查看文档以检查它揭示的任何信息总是好的。也许不在此代码片段中,但这是一个问题,我希望您 运行 开始使用 BLE。
我在我的应用程序中使用 Android Beacon Library,我逐字逐句地复制了他们的测距示例,但我不断收到您在代码下方看到的错误。任何帮助将不胜感激,我刚刚进入 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) { }
}
}
我得到的错误:
05-12 20:21:44.769 25775-25775/com.example.josh.beacons D/BluetoothAdapter: STATE_ON
05-12 20:21:44.770 25775-25775/com.example.josh.beacons D/BluetoothLeScanner: could not find callback wrapper
05-12 20:21:44.787 25775-26783/com.example.josh.beacons D/RangingActivity: didRangeBeacons 0
请注意,如果您在 LogCat 中看到的行不是您自己的代码,请不要太当真。如果该行以 "D/" 开头,则尤其如此,这表示调试行,而不是错误 ("E/")并且可以自信地说这并不表示有问题。
底线:您可以安全地忽略该消息。请注意 Android 蓝牙堆栈在 LogCat 中是出了名的嘈杂。这不会是您学会忽略的第一行。
虽然您可以如例外答案所述安全地忽略此消息,但它会告诉您一些事情。它很可能告诉您您的设备已关闭您的应用程序的位置权限,这会阻止您的信标扫描工作。如果该应用程序具有适当的权限并且正在正确扫描,您会看到更像
的内容D/BluetoothAdapter: STATE_ON
D/BluetoothLeScanner: onClientRegistered() - status=0 clientIf=5
如果您的目标是 API 级别 23+,即使您的 minsdk 设置得较低(例如 16),您肯定希望检查您的代码以启用位置权限。
我为此浪费了很多时间才意识到它只是由于应用程序的位置服务被关闭而导致无声失败。
不确定是否有人在过去 4 年中调整了代码,因为 BluetoothLeScanner 建议的内容与发布的答案不同。
事实证明,对 stopScan()
的不正确调用是罪魁祸首。
如果围绕传入的 ScanCallback
参数的包装器实现是 null
,BluetoothLeScanner
会打印此日志消息,并且 returns 不会停止扫描。
我认为它应该记录为错误 (Log.e
) 而不是调试日志。
如果之前调用了 startScan(callback)
,我可以通过确保只调用 stopScan(callback)
来摆脱它。
正如很多人所说,通常可以安全地忽略此消息。但是,我 运行 遇到了与您类似的问题 - 有时,我使用 BluetoothLeScanner 检测到 0 个 BLE 设备。
查看由 BluetoothLeScanner class 生成的 Logcat 中的调试输出,我看到每当检测到零个设备时,onScannerRegistered() - status=6 scannerId=-1 mScannerId=0
。通常,作为参考,输出为 onScannerRegistered() - status=0 scannerId=10 mScannerId=0
.
查看各种Github repos,我发现这组输出对应于Android BLE不支持stopping/starting扫描超过5个的事实30 秒内的次数。像这样的日志消息通常可以安全地忽略,但是查看文档以检查它揭示的任何信息总是好的。也许不在此代码片段中,但这是一个问题,我希望您 运行 开始使用 BLE。