2016-04-21 52 views
0

我正在嘗試使用Android信標庫獲取附近的信標列表。我正在關注這個sample,但作爲一個新手,我發現它太複雜了。我不想在背景中檢測到信標,我不想檢測區域條目......我只想要列出實際可見的信標。 在我的MainActivity類的onCreate方法中,我只是添加了這段代碼,並希望這將啓動測距或監測,但是這沒有發生。有人知道什麼是問題或者如何使用這兩個類?使用Altbeacon檢測信標列表

public class MainActivity extends AppCompatActivity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
     fab.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) 
         .setAction("Action", null).show(); 
      } 
     }); 

     MonitoringActivity monitoringActivity = new MonitoringActivity(); 
     RangingActivity rangingActivity = new RangingActivity(); 

    } 

    @Override 

回答

1

如果您只想獲取可見信標列表,您希望做信標「測距」。您不需要使用示例中提到的兩個單獨的Activity類。您可以將Ranging示例的相關部分複製到您自己的活動中。

所以做到這一點:

  1. 從類中刪除,以MonitoringActivityRangingActivity的引用。

  2. 以下內容添加到您的類:

更改類定義爲:

public class MainActivity extends AppCompatActivity implements BeaconConsumer { 

下面的代碼添加到您的onCreate方法:

BeaconManager beaconManager = BeaconManager.getInstanceForApplication(this); 
    // To detect proprietary beacons, you must add a line like below corresponding to your beacon 
    // type. Do a web search for "setBeaconLayout" to get the proper expression. 
    // beaconManager.getBeaconParsers().add(new BeaconParser(). 
    //  setBeaconLayout("m:2-3=beac,i:4-19,i:20-21,i:22-23,p:24-24,d:25-25")); 
    beaconManager.bind(this); 

添加以下方法給你的班級:

@Override 
public void onBeaconServiceConnect() { 
    BeaconManager beaconManager = BeaconManager.getInstanceForApplication(this); 
    beaconManager.setRangeNotifier(new RangeNotifier() { 
     @Override 
     public void didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region) { 
      for (Beacon beacon : beacons) { 
       Log.i("MainActivity", "I see a beacon that is about "+beacon.getDistance()+" meters away.");   
      } 
     } 
    }); 

    try { 
     beaconManager.startRangingBeaconsInRegion(new Region("myRangingUniqueId", null, null, null)); 
    } catch (RemoteException e) { } 
} 

可見信標列表是在for (Beacon beacon : beacons)行內訪問的內容。

+0

不推薦使用代碼 – Fralec

相關問題