Back to project page Estimotes-Xamarin.
The source code is released under:
Apache License
If you think the Android project Estimotes-Xamarin listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.
package com.estimote.examples.demos; // www . j a v a 2 s . c o m import android.app.Activity; import android.bluetooth.BluetoothAdapter; import android.content.Intent; import android.os.Bundle; import android.os.RemoteException; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.AdapterView; import android.widget.ListView; import android.widget.Toast; import com.estimote.sdk.Beacon; import com.estimote.sdk.BeaconManager; import com.estimote.sdk.Region; import com.estimote.sdk.utils.L; import java.util.Collections; import java.util.List; /** * Displays list of found beacons sorted by RSSI. * Starts new activity with selected beacon if activity was provided. * * @author wiktorgworek@google.com (Wiktor Gworek) */ public class ListBeaconsActivity extends Activity { private static final String TAG = ListBeaconsActivity.class.getSimpleName(); public static final String EXTRAS_TARGET_ACTIVITY = "extrasTargetActivity"; public static final String EXTRAS_BEACON = "extrasBeacon"; private static final int REQUEST_ENABLE_BT = 1234; private static final Region ALL_ESTIMOTE_BEACONS_REGION = new Region("rid", null, null, null); private BeaconManager beaconManager; private LeDeviceListAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); getActionBar().setDisplayHomeAsUpEnabled(true); // Configure device list. adapter = new LeDeviceListAdapter(this); ListView list = (ListView) findViewById(R.id.device_list); list.setAdapter(adapter); list.setOnItemClickListener(createOnItemClickListener()); // Configure verbose debug logging. L.enableDebugLogging(true); // Configure BeaconManager. beaconManager = new BeaconManager(this); beaconManager.setRangingListener(new BeaconManager.RangingListener() { @Override public void onBeaconsDiscovered(Region region, final List<Beacon> beacons) { // Note that results are not delivered on UI thread. runOnUiThread(new Runnable() { @Override public void run() { // Note that beacons reported here are already sorted by estimated // distance between device and beacon. getActionBar().setSubtitle("Found beacons: " + beacons.size()); adapter.replaceWith(beacons); } }); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.scan_menu, menu); MenuItem refreshItem = menu.findItem(R.id.refresh); refreshItem.setActionView(R.layout.actionbar_indeterminate_progress); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == android.R.id.home) { finish(); return true; } return super.onOptionsItemSelected(item); } @Override protected void onDestroy() { beaconManager.disconnect(); super.onDestroy(); } @Override protected void onStart() { super.onStart(); // Check if device supports Bluetooth Low Energy. if (!beaconManager.hasBluetooth()) { Toast.makeText(this, "Device does not have Bluetooth Low Energy", Toast.LENGTH_LONG).show(); return; } // If Bluetooth is not enabled, let user enable it. if (!beaconManager.isBluetoothEnabled()) { Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT); } else { connectToService(); } } @Override protected void onStop() { try { beaconManager.stopRanging(ALL_ESTIMOTE_BEACONS_REGION); } catch (RemoteException e) { Log.d(TAG, "Error while stopping ranging", e); } super.onStop(); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQUEST_ENABLE_BT) { if (resultCode == Activity.RESULT_OK) { connectToService(); } else { Toast.makeText(this, "Bluetooth not enabled", Toast.LENGTH_LONG).show(); getActionBar().setSubtitle("Bluetooth not enabled"); } } super.onActivityResult(requestCode, resultCode, data); } private void connectToService() { getActionBar().setSubtitle("Scanning..."); adapter.replaceWith(Collections.<Beacon>emptyList()); beaconManager.connect(new BeaconManager.ServiceReadyCallback() { @Override public void onServiceReady() { try { beaconManager.startRanging(ALL_ESTIMOTE_BEACONS_REGION); } catch (RemoteException e) { Toast.makeText(ListBeaconsActivity.this, "Cannot start ranging, something terrible happened", Toast.LENGTH_LONG).show(); Log.e(TAG, "Cannot start ranging", e); } } }); } private AdapterView.OnItemClickListener createOnItemClickListener() { return new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { if (getIntent().getStringExtra(EXTRAS_TARGET_ACTIVITY) != null) { try { Class<?> clazz = Class.forName(getIntent().getStringExtra(EXTRAS_TARGET_ACTIVITY)); Intent intent = new Intent(ListBeaconsActivity.this, clazz); intent.putExtra(EXTRAS_BEACON, adapter.getItem(position)); startActivity(intent); } catch (ClassNotFoundException e) { Log.e(TAG, "Finding class by name failed", e); } } } }; } }