android - 无论我将什么类型的附件添加到信标中,getBeaconState() 都返回 null
问题描述
通过 Beacon 仪表板设置我的附件详细信息。我不断得到:getBeaconState("FILTER")
null。我的目标是暂时检测附近的信标。任何一种形式对我的帮助都会很棒!
我已经按照 eddystone 格式设置了我的虚拟信标并且它运行良好(在信标仪表板中我看到:信标处于活动状态并且工作正常!)并且显然已经在 Google 控制台上设置了我的项目并向广告商添加了相同的 API 密钥和这个(扫描仪)应用程序。
public class MainActivity extends AppCompatActivity {
public static final int MY_PERMISSIONS_REQUEST_LOCATION = 99;
public static final String TAG = MainActivity.class.getSimpleName();
List<BeaconState.TypeFilter> BEACON_TYPE_FILTERS = Arrays.asList(BeaconState.TypeFilter
.with("alpine-shade-255114", "int"));
@RequiresApi(api = Build.VERSION_CODES.M)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
hasLocationPermission();
addBeaconDetectorFence();
}
private void hasLocationPermission() {
if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, MY_PERMISSIONS_REQUEST_LOCATION);
return;
}
}
@RequiresApi(api = Build.VERSION_CODES.M)
private void addBeaconDetectorFence() {
if (checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, MY_PERMISSIONS_REQUEST_LOCATION);
return;
}
Awareness.getSnapshotClient(this).getBeaconState(BEACON_TYPE_FILTERS)
.addOnSuccessListener(beaconResult -> {
Log.e(TAG, "Got beacon state");
if(beaconResult!=null){
BeaconState beaconState = beaconResult.getBeaconState();
Toast.makeText(MainActivity.this, "Got beacon state! " + beaconState,
Toast.LENGTH_SHORT).show();}
})
.addOnFailureListener(e -> {
Log.e(TAG, "Could not get beacon state");
Toast.makeText(MainActivity.this, "Could not get beacon state!",
Toast.LENGTH_SHORT).show();
});
}
}
因此,当我调试时,它进入addOnSuccessListener
但beaconState
始终为null。
解决方案
确保getBeaconState()
仅支持 18 以上的设备 API 级别。
如果从运行早期版本(低于 API 18)的设备调用,getStatus()
将返回类似API_NOT_AVAILABLE的状态。
此外,该getBeaconState()
方法需要android.permission.ACCESS_FINE_LOCATION
许可。AndroidManifest.xml
在文件中添加此权限 。
Awareness.SnapshotApi.getBeaconState(mGoogleApiClient, BEACON_TYPE_FILTERS)
.setResultCallback(new ResultCallback<BeaconStateResult>() {
@Override
public void onResult(@NonNull BeaconStateResult beaconStateResult) {
if (!beaconStateResult.getStatus().isSuccess()) {
Log.e(TAG, "Could not get beacon state.");
return;
}
BeaconState beaconState = beaconStateResult.getBeaconState();
// Get info from the BeaconState.
}
});
在您的代码中,您错过了onResult()
方法。我希望它会帮助你......!
推荐阅读
- c# - .Net core 依赖注入 - 带参数
- linux - 如何在bash中循环一对文件?
- css - 添加 Google 字体似乎会破坏/禁用我的滚动快照设置
- php - 如何在 PHP 中打印带有键和值的数组元素?
- python - 两个循环的 Python 列表理解
- iis - APS.net core 2.2 - 部署到具有多个站点的多个 iis 的配置
- sql - 无法修改列“GeoLocation”,因为它要么是计算列,要么是 UNION 运算符的结果
- ruby - 类外的实例方法声明如何在 Ruby 中工作?
- javascript - Ajax jquery不发布表单数据
- python - TypeError: __init__() 得到了一个意外的关键字参数“轴”