首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android信标库-开始测距的最低步骤

Android信标库-开始测距的最低步骤
EN

Stack Overflow用户
提问于 2018-02-02 08:09:07
回答 2查看 722关注 0票数 0

我想在我的应用程序中添加最简单的程序。程序只应在单击对话框选项后才能获取信标信息,我多次尝试编写代码,但没有得到启动测距所需的最低步骤。

代码语言:javascript
复制
public class SecondClass extends Activity implements BeaconConsumer {
private BeaconManager beaconManager;
protected static final String TAG = "RangingActivity";
RegionBootstrap regionBootstrap;

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

    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"));
    beaconManager.bind(this);

    region = new Region("backgroundRegion", null, null, null);

    NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    mNotificationManager.cancel(101); //closes notification

    //opens the alert dialog
    AlertDialog.Builder builder;
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        builder = new AlertDialog.Builder(this, android.R.style.Theme_Material_Dialog_Alert);
    } else {
        builder = new AlertDialog.Builder(this);
    }
    builder.setTitle("Send data")
            .setMessage("Are you sure you want to send your data to the server?")
            .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {

                public void onClick(DialogInterface dialog, int which) {
                    // if yes was pressed, send the data

                    try {
                        beaconManager.startRangingBeaconsInRegion(region);
                    } catch (RemoteException e) {
                        Log.d(TAG, "Can't start ranging");
                    }

                }
            })
            .setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                    // if cancel was pressed, do nothing

                }
            })
            .setIcon(android.R.drawable.ic_dialog_alert)
            .show();
}


@Override
public void onBeaconServiceConnect() {

    beaconManager.addRangeNotifier(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.");
            }
        }
    });
}
}

有人能解释一下onBeaconServiceConnect是如何运行的吗?我是否需要在开始测距之前进行监测过程,检查是否有一个信标,是否有一个开始测距的信标,或者仅仅有一个只进行测距的程序是可以的?

我试着按照示例代码部分中的描述做,但是没有工作

诚挚的问候

编辑

代码语言:javascript
复制
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

将这些权限添加到代码中,但仍然无法工作。

我做的另一件事是通过使用here中描述的函数来检查是否启用了here(第二名投票最多的答案)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-02-06 07:05:03

问题是:在示例代码中,我认为它已经为iBeacons指定了,所以我离开了它。变到

beaconManager.getBeaconParsers().add(new BeaconParser(). setBeaconLayout("m:0-3=4c000215,i:4-19,i:20-21,i:22-23,p:24-24"));

为我用的信标工作

票数 0
EN

Stack Overflow用户

发布于 2018-02-02 13:03:34

量程本身是可以的。

onBeaconServiceConnect是在您调用beaconManager.bind(This)之后,当信标扫描服务准备就绪时进行的回调。回调指示您已准备好开始测距或监视。确保你收到了回音。

  • 确保您可以用现成的信标检测相同的信标,比如BeaconScope:US
  • 如果使用iBeacon、Eddystone或自定义信标格式。确保您已经注册了正确的BeaconParser来使用库。下面是iBeacon的代码:beaconManager.getBeaconParsers().add(new BeaconParser().setBeaconLayout("m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24")); Eddystone有不同的布局。
  • 如果您正在Android 上进行测试,请确保您已经通过编程请求并获得了用户的位置权限,否则检测将被阻止。permission.html
  • 确保蓝牙已开启,手机的位置已启用。
  • 如果在Android 10+上,请确保您已经获得了FINE_LOCATION许可,因为COARSE_LOCATION已经不够了。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48578338

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档