我想在信标连接到平板电脑时显示平板电脑中的路线。意味着当范围内的信标需要获取该信标的次要ID时,并将其发送到服务器。我怎么能帮助我,我是Beacons Topic的新手?。我试过这个但是在这个didExitRegion中没有调用当用户输出时请帮助我在用户进入区域时检测信标id?
public class MainActivity extends Activity implements BeaconConsumer {
public static final String TAG = "BeaconsEverywhere";
private BeaconManager beaconManager;
int distance;
boolean mInsideZone = false;
Identifier minorID;
double distanceLong;
ListView beaconListView;
private Handler mHandler;
private int i;
ArrayAdapter beaconAdapter;
public TextView distanceText;
public TextView distanceName1;
public ImageView distanceImage;
public String name1;
public boolean exitRegion = false;
public String minorString;
List<String> beaconList;
List<String> con;
Set<String> mBeaconsProcessed;
String s1,s2,s3;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intent intent = getIntent();
name1 = intent.getStringExtra("beacon1");
distanceText = (TextView) findViewById(R.id.distanceText);
distanceText.setText("No beacons found yet, please wait");
distanceName1 = (TextView) findViewById(R.id.name1);
distanceName1.getText();
distanceName1.setText("How far away is "+name1+"?");
distanceText = (TextView) findViewById(R.id.distanceText);
distanceText.getText();
distanceText.setText("Distance: " + distance+ "metres");
distanceImage = (ImageView) findViewById(R.id.distanceImage);
//alertDialogue();
i = 0;
con = new ArrayList<String>();
beaconAdapter = new
ArrayAdapter<String(this,android.R.layout.simple_list_item_1);
beaconListView = (ListView) findViewById(R.id.beaconListView);
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);
}
@Override
protected void onDestroy() {
super.onDestroy();
beaconManager.unbind(this);
}
@Override
public void onBeaconServiceConnect() {
final Region region = new Region("myBeaons",null, null, null);
beaconManager.addMonitorNotifier(new MonitorNotifier() {
@Override
public void didEnterRegion(Region region) {
try {
Log.d(TAG, "didEnterRegion");
// String st=region.getId1().toString();
con.clear();
beaconManager.startRangingBeaconsInRegion(region);
} catch (RemoteException e) {
e.printStackTrace();
}
}
@Override
public void didExitRegion(Region region) {
try {
Log.d(TAG, "didExitRegion");
con.clear();
beaconList.clear();
beaconManager.stopRangingBeaconsInRegion(region);
}
catch (RemoteException e) {
e.printStackTrace();
}
}
@Override
public void didDetermineStateForRegion(int i, Region region) {
int j=0;
j=i;
String s=Integer.toString(j);
}
});
beaconManager.addRangeNotifier(new RangeNotifier() {
@Override
public void didRangeBeaconsInRegion(final Collection<Beacon> beacons, Region region) {
runOnUiThread(new Runnable() {
@Override
public void run() {
//stuff that updates ui
beaconList = new ArrayList<String>();
for(Beacon oneBeacon : beacons) {
distanceLong = oneBeacon.getDistance();
if (oneBeacon.getDistance() < 1.0 && mInsideZone ==
false) {
minorID = oneBeacon.getId3();
minorString = minorID.toString();
final String distanceString =
String.valueOf(minorID);
beaconList.add(distanceString);
mInsideZone = true;
}
if (oneBeacon.getDistance() > 5.0&&mInsideZone ==
true)
{
mInsideZone = false;
con=new ArrayList<String>();
}
}
}});
runOnUiThread(new Runnable() {
@Override
public void run() {
//stuff that updates ui
if (con.size()>0)
{
if (con.containsAll(beaconList) )
{
}
else {
con.clear();
con=beaconList;
calls(beaconList);
}
}
else {
if (beaconList.size()>0) {
con = beaconList;
calls(beaconList);
}
}
}});
}
});
try {
beaconManager.startMonitoringBeaconsInRegion(region);
} catch (RemoteException e) {
e.printStackTrace();
}}
public void calls(List<String> names)
{
List<beconsclass> bss=new ArrayList<>();
for (int i=0;i<names.size();i++)
{
beconsclass bs=new beconsclass();
if(names.get(i).equals("32109"))
{
bs.setName("JON");
}
if(names.get(i).equals("25335"))
{
bs.setName("MIKEY");
}
bss.add(bs);
}
if (bss.size()>0)
{
Adapter aa=new Adapter(MainActivity.this,bss);
beaconListView.setAdapter(aa);
}
}
}