2015-06-13 21 views
5

Điều đầu tiên tôi muốn nói là đây là lần đầu tiên tôi sử dụng đèn hiệu. Tôi đang sử dụng thư viện AltBeaconThư viện Đèn hiệu Android của AltBeacon nhận được số lớn, nhỏ và UUID

Hiện tại tôi có một số việc đang hoạt động, ví dụ: khi tôi vào khu vực hoặc khi tôi rời khỏi nó .. cũng nhận được khoảng cách đến ngọn hải đăng một cách chính xác. Điều này hoạt động hoàn hảo. Tôi cũng nhận được UUID, chính và trẻ vị thành niên .. nhưng không biết tôi có đang làm đúng hay không.

Đây là mã của tôi:

public class Hello extends Activity implements BeaconConsumer { 

    protected static final String TAG = "readme"; 
    private BeaconManager beaconManager; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.hola); 


     beaconManager = BeaconManager.getInstanceForApplication(this); 

     beaconManager.getBeaconParsers().add(new BeaconParser(). 
       setBeaconLayout("m:0-3=4c000215,i:4-19,i:20-21,i:22-23,p:24-24")); 
     beaconManager.bind(this); 

    } 

    @Override 
    public void onBeaconServiceConnect() { 

     try { 
      beaconManager.startRangingBeaconsInRegion(new Region("myRangingUniqueId", Identifier.parse("MY_UUID"), Identifier.parse("1"), null)); 

     } catch (RemoteException e) { 
     } 

     beaconManager.setRangeNotifier(new RangeNotifier() { 
      @Override 
      public void didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region) { 
       if (beacons.size() > 0) { 
        Log.i(TAG, "The first beacon I see is about " + beacons.iterator().next().getDistance() + " meters away."); 


        Log.i(TAG, "Reading…"+"\n"+"proximityUuid:"+" "+ beacons.iterator().next().getId1()+"\n"+ 
            "major:"+" "+beacons.iterator().next().getId2()+"\n"+ 
            "minor:"+" "+beacons.iterator().next().getId3());} 

      } 
     }); 


     beaconManager.setMonitorNotifier(new MonitorNotifier() { 

      @Override 
      public void didEnterRegion(Region region) { 
       Log.i(TAG, "I just saw an beacon for the first time!"); 
      } 

      @Override 
      public void didExitRegion(Region region) { 
       Log.i(TAG, "I no longer see an beacon"); 
      } 

      @Override 
      public void didDetermineStateForRegion(int state, Region region) { 
       Log.i(TAG, "I have just switched from seeing/not seeing beacons: " + state); 
      } 
     }); 

     try { 
      beaconManager.startMonitoringBeaconsInRegion(new Region("myMonitoringUniqueId", null, null, null)); 

     } catch (RemoteException e) { 
     } 
    } 

    @Override 
    protected void onDestroy() { 
     super.onDestroy(); 
     beaconManager.unbind(this); 
    } 
} 

Như tôi đã nói, tôi nhận được UUID, các lớn và nhỏ, nhưng tôi được sử dụng

beaconManager.setRangeNotifier (new RangeNotifier() {...

setRangeNotifier có được khoảng cách đến ngọn hải đăng , để nó được tự động cập nhật vài giây một lần, vì lý do này, mỗi khi nó được cập nhật lại, hãy lấy UUID, cái chính và cái nhỏ.

Đó có phải là nơi thích hợp để có UUID, người lớn và trẻ vị thành niên không? Tôi đã cố gắng để có được nó khi tôi nhập một khu vực:

@Override 
      public void didEnterRegion(Region region) { 
       Log.i(TAG, "I just saw an beacon for the first time!"); 
      } 

... nhưng không thành công.

Tôi đã tìm kiếm rất nhiều thông tin, nhưng không thể tìm thấy bất kỳ điều gì cụ thể. Ý định của tôi là có một biến chứa UUID, một biến khác chứa phần tử chính và biến còn lại chứa phần tử con. Đúng rồi?

Nếu đây không phải là cách phù hợp, nghĩa là gì? Nó đúng như tôi làm bây giờ?

Tôi rất cảm kích mọi sự trợ giúp và đề cập đến @davidgyoung… Tôi hy vọng không làm phiền.

Chúc mừng.

Trả lời

4

Có, sử dụng số RangeNotifier để đọc số nhận dạng báo hiệu là cách tiếp cận chính xác.

Lý do bạn không thể nhận được số nhận dạng trong gọi lại cho MonitorNotifier là do cuộc gọi lại chỉ chuyển cho bạn đối tượng Vùng có khu vực bạn đã nhập/thoát. Vùng này có thể chứa các ký tự đại diện cho một số mã định danh, vì vậy nó thường sẽ không cho bạn biết mọi thứ về các cảnh báo đã gặp phải. Đối với một số trường hợp sử dụng, điều này là không cần thiết.

Điểm mấu chốt là nếu bạn muốn đọc tất cả các số nhận dạng bạn đang thực hiện đúng bằng cách sử dụng các API khác nhau và RangeNotifier.

+0

Cảm ơn bạn rất nhiều :)) – Sergio76

Các vấn đề liên quan