AltBeacon - didenterRegion()和didexitRegion()方法中的空值

时间:2015-06-23 05:07:52

标签: android bluetooth-lowenergy altbeacon

我的代码片段: 我试过altbeacon gradle。 我已根据以下代码声明了Region。

我在Application类的onCreate方法中写了这一行。     Region region = new Region(“all beacon”,null,null,null);

我可以在“didRangeBeaconsInRegion”中获得Beacon的主要,次要和uuid。

问题:我没有将didEnterRegion()和didExitRegion()方法中的信标识别为获取major,minor和uuid的空值。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

没有错,这就是信标监控的工作原理。监视时,如果检测到与您的Region定义的通配符模式匹配的任何信标,则会收到通知。此通知告诉您检测到匹配的信标,并提供对正在监视的Region对象的引用。

在所示的示例中,定义的Region对于三个信标标识符中的每一个都具有null,这意味着它将匹配任何信标。因此,当检测到任何信标时,它仅提供单个回调,并且不会告诉您匹配的标识符。

您有两种方法可以访问标识符:

  1. 如果你只关心几个信标,你可以监视多个显式区域,例如:Region region1 = new Region("first beacon", "2F234454-CF6D-4A0F- ADF2-F4911BA9FFA6", "1", " 2");这将在回调中为你提供一个Region对象,并设置所有标识符。

    < / LI>
  2. 使用范围API,每秒都会给您一个回调,其中包含标识符与定义区域匹配的所有信标列表。

  3. 以下是选项1的完整Activity实现。运行此操作时,您将在LogCat中看到以下内容:

    D/MonitoringActivity(31644): starting monitoring
    D/MonitoringActivity(31644): Entered region: null null null
    D/MonitoringActivity(31644): Entered region: 2f234454-cf6d-4a0f-adf2-f4911ba9ffa6 1 1
    

    请注意,第一个区域条目将发送所有空标识符,因为该活动还监视所有空区域。

    public class MonitoringActivity extends Activity implements BeaconConsumer, MonitorNotifier {
        protected static final String TAG = "MonitoringActivity";
        private BeaconManager mBeaconManager;
    
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_monitoring);
            mBeaconManager = BeaconManager.getInstanceForApplication(this);
            mBeaconManager.bind(this);
        }
    
        @Override
        public void onBeaconServiceConnect() {
            try {
                mBeaconManager.setMonitorNotifier(this);
                mBeaconManager.startMonitoringBeaconsInRegion(new Region("all beacons region", null, null, null));
                mBeaconManager.startMonitoringBeaconsInRegion(new Region("region 1", Identifier.parse("2F234454-CF6D-4A0F-ADF2-F4911BA9FFA6"), Identifier.parse("1"), Identifier.parse("1")));
                mBeaconManager.startMonitoringBeaconsInRegion(new Region("region 2", Identifier.parse("2F234454-CF6D-4A0F-ADF2-F4911BA9FFA6"), Identifier.parse("1"), Identifier.parse("2")));
                Log.d(TAG, "starting monitoring");
            } catch (RemoteException e) {
                Log.e(TAG, "can't monitor", e);
            }
        }
    
        @Override
        public void didEnterRegion(Region region) {
            Log.d(TAG, "Entered region: "+region.getId1()+" "+region.getId2()+" "+region.getId3());
        }
    
        @Override
        public void didExitRegion(Region region) {
            Log.d(TAG, "Exited region: "+region.getId1()+" "+region.getId2()+" "+region.getId3());
        }
    
        @Override
        public void didDetermineStateForRegion(int state, Region region) {
    
        }
    }