Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.ozzy;
- import android.Manifest;
- import android.content.DialogInterface;
- import android.content.pm.PackageManager;
- import android.os.Build;
- import android.support.annotation.NonNull;
- import android.support.v4.app.ActivityCompat;
- import android.support.v4.content.ContextCompat;
- import android.support.v7.app.AlertDialog;
- import android.support.v7.app.AppCompatActivity;
- import android.os.Bundle;
- import android.util.Log;
- import android.widget.Toast;
- import com.kontakt.sdk.android.ble.configuration.ActivityCheckConfiguration;
- import com.kontakt.sdk.android.ble.configuration.ForceScanConfiguration;
- import com.kontakt.sdk.android.ble.configuration.ScanPeriod;
- import com.kontakt.sdk.android.ble.configuration.scan.EddystoneScanContext;
- import com.kontakt.sdk.android.ble.configuration.scan.IBeaconScanContext;
- import com.kontakt.sdk.android.ble.configuration.scan.ScanContext;
- import com.kontakt.sdk.android.ble.connection.OnServiceReadyListener;
- import com.kontakt.sdk.android.ble.discovery.BluetoothDeviceEvent;
- import com.kontakt.sdk.android.ble.manager.ProximityManager;
- import com.kontakt.sdk.android.ble.manager.ProximityManagerContract;
- import com.kontakt.sdk.android.common.KontaktSDK;
- import com.kontakt.sdk.android.common.profile.DeviceProfile;
- import com.kontakt.sdk.android.common.profile.RemoteBluetoothDevice;
- import com.kontakt.sdk.android.manager.KontaktProximityManager;
- import java.util.List;
- //===============================================
- public class MainActivity extends AppCompatActivity implements ProximityManager.ProximityListener{
- private static final String TAG = "ozzy";
- private ProximityManagerContract proximityManager;
- private ScanContext scanContext;
- //=============================
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- KontaktSDK.initialize(this);
- proximityManager = new KontaktProximityManager(this);
- }
- //=============================
- @Override
- protected void onStart() {
- super.onStart();
- if(Build.VERSION.SDK_INT>= Build.VERSION_CODES.M)
- checkPermissionAndStart();
- else
- startScan();
- }
- //=============================
- private void startScan(){
- proximityManager.initializeScan(getScanContext(), new OnServiceReadyListener() {
- @Override
- public void onServiceReady() {
- proximityManager.attachListener(MainActivity.this);Log.i("ozzy", "ready");
- }
- @Override
- public void onConnectionFailure() {
- }
- });
- }
- //=============================
- private void checkPermissionAndStart() {
- int locp = ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION);
- int bp = ContextCompat.checkSelfPermission(this, Manifest.permission.BLUETOOTH);
- int bap = ContextCompat.checkSelfPermission(this, Manifest.permission.BLUETOOTH_ADMIN);
- int ip = ContextCompat.checkSelfPermission(this, Manifest.permission.INTERNET);
- if (PackageManager.PERMISSION_GRANTED == locp && PackageManager.PERMISSION_GRANTED == bp && PackageManager.PERMISSION_GRANTED == bap && PackageManager.PERMISSION_GRANTED == ip) {
- //already granted
- Log.i("ozzy", "start scan");
- startScan();
- } else {
- if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.ACCESS_FINE_LOCATION)) {
- //we should show some explanation for user here
- showExplanationDialog();
- } else {
- //request permission
- ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.BLUETOOTH, Manifest.permission.BLUETOOTH_ADMIN, Manifest.permission.INTERNET}, 100);
- }
- }
- }
- //=============================
- private void showExplanationDialog(){
- new AlertDialog.Builder(this)
- .setMessage(R.string.enable_gps)
- .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- }
- }).show();
- }
- //=============================
- @Override
- public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
- Log.i("ozzy", "Results length: "+grantResults.length+" : "+grantResults[0]);
- if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
- Log.d("ozzy", "req code: "+requestCode);
- if (100 == requestCode) {
- //same request code as was in request permission
- Log.d("ozzy", "starting scan");
- startScan();
- }
- } else {
- //not granted permission
- //show some explanation dialog that some features will not work
- }
- }
- //=============================
- @Override
- protected void onStop() {
- super.onStop();
- proximityManager.detachListener(this);
- proximityManager.disconnect();
- }
- //=============================
- private ScanContext getScanContext() {
- if (scanContext == null) {
- scanContext = new ScanContext.Builder()
- .setScanPeriod(ScanPeriod.RANGING) // or for monitoring for 15 seconds scan and 10 seconds waiting:
- //.setScanPeriod(new ScanPeriod(TimeUnit.SECONDS.toMillis(15), TimeUnit.SECONDS.toMillis(10)))
- .setScanMode(ProximityManager.SCAN_MODE_BALANCED)
- .setActivityCheckConfiguration(ActivityCheckConfiguration.MINIMAL)
- .setForceScanConfiguration(ForceScanConfiguration.MINIMAL)
- .setIBeaconScanContext(new IBeaconScanContext.Builder().build())
- .setEddystoneScanContext(new EddystoneScanContext.Builder().build())
- .setForceScanConfiguration(ForceScanConfiguration.MINIMAL)
- .build();
- }
- return scanContext;
- }
- //=============================
- @Override
- public void onEvent(BluetoothDeviceEvent bluetoothDeviceEvent) {
- List<? extends RemoteBluetoothDevice> deviceList = bluetoothDeviceEvent.getDeviceList();
- long timestamp = bluetoothDeviceEvent.getTimestamp();
- DeviceProfile deviceProfile = bluetoothDeviceEvent.getDeviceProfile();
- switch (bluetoothDeviceEvent.getEventType()) {
- case SPACE_ENTERED:
- Log.d(TAG, "namespace or region entered");
- Toast.makeText(this, "Region entered", Toast.LENGTH_SHORT).show();
- break;
- case DEVICE_DISCOVERED:
- Log.d(TAG, "found new beacon");
- Toast.makeText(this, "Found new beacon", Toast.LENGTH_SHORT).show();
- break;
- case DEVICES_UPDATE:
- Log.d(TAG, "updated beacons");
- Toast.makeText(this, "Updated Beacon", Toast.LENGTH_SHORT).show();
- break;
- case DEVICE_LOST:
- Log.d(TAG, "lost device");
- Toast.makeText(this, "Device lost", Toast.LENGTH_SHORT).show();
- break;
- case SPACE_ABANDONED:
- Log.d(TAG, "namespace or region abandoned");
- Toast.makeText(this, "Region abandoned", Toast.LENGTH_SHORT).show();
- break;
- }
- }
- //=============================
- @Override
- public void onScanStart() {
- Log.d(TAG, "scan started");
- }
- //=============================
- @Override
- public void onScanStop() {
- Log.d(TAG, "scan stopped");
- }
- }
Add Comment
Please, Sign In to add comment