使用Altbeacon检测信标列表

时间:2016-04-21 17:16:45

标签: android ibeacon-android altbeacon

我正在尝试使用Android Beacon Library获取附近信标的列表。我跟着这个sample,但作为一个新手我发现它太复杂了。我不想在背景中检测到信标,我不想检测区域条目...我只想获得实际可见信标的列表。 在我的MainActivity类的onCreate方法中,我刚刚添加了此代码,并希望这将启动测距或监控,但这并没有发生。是否有人知道问题是什么或如何使用这两个类?

public class MainActivity extends AppCompatActivity {
   @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                        .setAction("Action", null).show();
            }
        });

        MonitoringActivity monitoringActivity = new MonitoringActivity();
        RangingActivity rangingActivity = new RangingActivity();

    }

    @Override

1 个答案:

答案 0 :(得分:1)

如果您只想获得可见信标列表,则需要执行信标“测距”。您不需要使用示例中提到的两个单独的Activity类。您只需将Ranging示例的相关部分复制到您自己的Activity中即可。

这样做:

  1. 从班级中删除对MonitoringActivityRangingActivity的引用。

  2. 将以下内容添加到您的课程中:

  3. 将您的班级定义更改为:

    public class MainActivity extends AppCompatActivity implements BeaconConsumer {
    

    将以下代码添加到onCreate方法中:

        BeaconManager beaconManager = BeaconManager.getInstanceForApplication(this);
        // To detect proprietary beacons, you must add a line like below corresponding to your beacon
        // type.  Do a web search for "setBeaconLayout" to get the proper expression.
        // 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
    public void onBeaconServiceConnect() {
        BeaconManager beaconManager = BeaconManager.getInstanceForApplication(this);
        beaconManager.setRangeNotifier(new RangeNotifier() {
            @Override 
            public void didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region) {
                for (Beacon beacon : beacons) {
                    Log.i("MainActivity", "I see a beacon that is about "+beacon.getDistance()+" meters away.");        
                }
            }
        });
    
        try {
            beaconManager.startRangingBeaconsInRegion(new Region("myRangingUniqueId", null, null, null));
        } catch (RemoteException e) {    }
    }
    

    可见信标列表是for (Beacon beacon : beacons)行内访问的内容。