跟踪区域中的信标的ID并将次要ID发送到android中的服务器?

时间:2018-02-07 06:14:59

标签: android ibeacon-android altbeacon

我想在信标连接到平板电脑时显示平板电脑中的路线。意味着当范围内的信标需要获取该信标的次要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);
}
}
}

0 个答案:

没有答案