首页 文章

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

提问于
浏览
-2

我的代码片段:我尝试过altbeacon gradle . 我按照以下代码声明了Region .

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

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

Problem : 我没有将didEnterRegion()和didExitRegion()方法中的beacon识别为获取major,minor和uuid的空值 .

我该如何解决这个问题?

1 回答

  • 0

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

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

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

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

    • 使用测距API,每秒使用一个标识符与定义区域匹配的所有信标列表进行回调 .

    下面是选项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) {
    
        }
    }
    

相关问题