此代码检测到一个信标,但我无法从中获取ID或主要或次要信息。我尝试使用beacon.id1()函数,但始终返回null。 自3天以来,我一直在尝试实施此操作,但是我无法确定我是信标技术的新手。我想从信标中获取ID。 此代码检测到一个信标,但我无法从中获取ID或主要或次要信息。我尝试使用beacon.id1()函数,但始终返回null。 自3天以来,我一直在尝试实施此操作,但是我无法确定我是信标技术的新手。我想从信标中获取ID。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
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,d:25-25"));
beaconManager.bind( this);
ToggleButton toggle = (ToggleButton) findViewById(R.id.togglebutton);
toggle.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
// The toggle is enabled
Intent eintent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
int intVal=1;
startActivityForResult(eintent, intVal);
} else {
// The toggle is disabled
BluetoothAdapter bAdapter = BluetoothAdapter.getDefaultAdapter();
bAdapter.disable();
}
}
});
}
@Override
protected void onDestroy() {
super.onDestroy();
beaconManager.unbind((BeaconConsumer) this);
}
public void onBeaconServiceConnect() {
beaconManager.removeAllMonitorNotifiers();
beaconManager.addMonitorNotifier(new MonitorNotifier() {
@Override
public void didEnterRegion(Region region) {
Context context = getApplicationContext();
CharSequence text = "Beacon Found";
int duration = Toast.LENGTH_LONG;
Toast toast = Toast.makeText(context, text, duration);
toast.show();
Log.d(TAG, "I just saw a beacon for the first time!");
a=beacon.getServiceUuid();
Toast toastt = Toast.makeText(context,"" + a, duration);
toastt.show();
}
@Override
public void didExitRegion(org.altbeacon.beacon.Region region) {
Log.i(TAG, "I no longer see a beacon");
}
@Override
public void didDetermineStateForRegion(int i, org.altbeacon.beacon.Region region) {
//Log.i(TAG, "I have just switched from seeing/not seeing beacons: "+state);
}
});
try {
beaconManager.startMonitoringBeaconsInRegion(new org.altbeacon.beacon.Region("MY_UUID", null, null, null));
//beaconManager.startRangingBeaconsInRegion(new org.altbeacon.beacon.Region("myranging", null, null, null));
}
catch (RemoteException e) { }
}
@Override
public void onPointerCaptureChanged(boolean hasCapture) {
}
答案 0 :(得分:0)
了解使用监视API,只有在任何信标(一个或多个)位于与您的Region
定义相匹配的附近时,您才会获得回调。所示代码定义了将所有标识符设置为null的区域。这就是所谓的通配符区域,因为它与任何信标都匹配。
当您收到对didEnterRegion
的回调时,它将传递与您开始监视相同的Region
定义的副本。并且由于将所有标识符都设置为null(通配符定义),这就是检查传递给该方法的Region
对象的标识符时得到的。这些API旨在告诉您何时出现信标的组中的任何一个。
如果您想知道可见信标的特定标识符,则只需使用范围API。代替:
beaconManager.startMonitoringBeaconsInRegion(new org.altbeacon.beacon.Region("MY_UUID", null, null, null));
致电:
beaconManager.startRangingBeaconsInRegion(new org.altbeacon.beacon.Region("MY_UUID", null, null, null));
然后按如下所示设置您的回调通知程序:
beaconManager.addRangeNotifier(new RangeNotifier() {
@Override
public void didRangeBeaconsInRegion(Region region, Collection<Beacon> beacons) {
for (Beacon beacon: beacons} {
Log.d(TAG, "I see a beacon with ID1 of: "+beacon.getID1());
}
}
});