Guest User

Untitled

a guest
Jun 11th, 2016
178
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 7.94 KB | None | 0 0
  1. package com.ozzy;
  2.  
  3. import android.Manifest;
  4. import android.content.DialogInterface;
  5. import android.content.pm.PackageManager;
  6. import android.os.Build;
  7. import android.support.annotation.NonNull;
  8. import android.support.v4.app.ActivityCompat;
  9. import android.support.v4.content.ContextCompat;
  10. import android.support.v7.app.AlertDialog;
  11. import android.support.v7.app.AppCompatActivity;
  12. import android.os.Bundle;
  13. import android.util.Log;
  14. import android.widget.Toast;
  15.  
  16. import com.kontakt.sdk.android.ble.configuration.ActivityCheckConfiguration;
  17. import com.kontakt.sdk.android.ble.configuration.ForceScanConfiguration;
  18. import com.kontakt.sdk.android.ble.configuration.ScanPeriod;
  19. import com.kontakt.sdk.android.ble.configuration.scan.EddystoneScanContext;
  20. import com.kontakt.sdk.android.ble.configuration.scan.IBeaconScanContext;
  21. import com.kontakt.sdk.android.ble.configuration.scan.ScanContext;
  22. import com.kontakt.sdk.android.ble.connection.OnServiceReadyListener;
  23. import com.kontakt.sdk.android.ble.discovery.BluetoothDeviceEvent;
  24. import com.kontakt.sdk.android.ble.manager.ProximityManager;
  25. import com.kontakt.sdk.android.ble.manager.ProximityManagerContract;
  26. import com.kontakt.sdk.android.common.KontaktSDK;
  27. import com.kontakt.sdk.android.common.profile.DeviceProfile;
  28. import com.kontakt.sdk.android.common.profile.RemoteBluetoothDevice;
  29. import com.kontakt.sdk.android.manager.KontaktProximityManager;
  30.  
  31. import java.util.List;
  32.  
  33. //===============================================
  34. public class MainActivity extends AppCompatActivity implements ProximityManager.ProximityListener{
  35.  
  36.     private static final String TAG = "ozzy";
  37.  
  38.     private ProximityManagerContract proximityManager;
  39.     private ScanContext scanContext;
  40.  
  41.     //=============================
  42.     @Override
  43.     protected void onCreate(Bundle savedInstanceState) {
  44.         super.onCreate(savedInstanceState);
  45.         setContentView(R.layout.activity_main);
  46.         KontaktSDK.initialize(this);
  47.         proximityManager = new KontaktProximityManager(this);
  48.     }
  49.  
  50.     //=============================
  51.     @Override
  52.     protected void onStart() {
  53.         super.onStart();
  54.         if(Build.VERSION.SDK_INT>= Build.VERSION_CODES.M)
  55.             checkPermissionAndStart();
  56.         else
  57.             startScan();
  58.     }
  59.  
  60.     //=============================
  61.     private void startScan(){
  62.         proximityManager.initializeScan(getScanContext(), new OnServiceReadyListener() {
  63.             @Override
  64.             public void onServiceReady() {
  65.                 proximityManager.attachListener(MainActivity.this);Log.i("ozzy", "ready");
  66.             }
  67.  
  68.             @Override
  69.             public void onConnectionFailure() {
  70.  
  71.             }
  72.         });
  73.     }
  74.  
  75.     //=============================
  76.     private void checkPermissionAndStart() {
  77.         int locp = ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION);
  78.         int bp = ContextCompat.checkSelfPermission(this, Manifest.permission.BLUETOOTH);
  79.         int bap = ContextCompat.checkSelfPermission(this, Manifest.permission.BLUETOOTH_ADMIN);
  80.         int ip = ContextCompat.checkSelfPermission(this, Manifest.permission.INTERNET);
  81.         if (PackageManager.PERMISSION_GRANTED == locp && PackageManager.PERMISSION_GRANTED == bp && PackageManager.PERMISSION_GRANTED == bap && PackageManager.PERMISSION_GRANTED == ip) {
  82.             //already granted
  83.             Log.i("ozzy", "start scan");
  84.             startScan();
  85.         } else {
  86.             if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.ACCESS_FINE_LOCATION)) {
  87.                 //we should show some explanation for user here
  88.                 showExplanationDialog();
  89.             } else {
  90.                 //request permission
  91.                 ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.BLUETOOTH, Manifest.permission.BLUETOOTH_ADMIN, Manifest.permission.INTERNET}, 100);
  92.             }
  93.         }
  94.     }
  95.  
  96.     //=============================
  97.     private void showExplanationDialog(){
  98.         new AlertDialog.Builder(this)
  99.                 .setMessage(R.string.enable_gps)
  100.                 .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
  101.                     @Override
  102.                     public void onClick(DialogInterface dialog, int which) {
  103.  
  104.                     }
  105.                 }).show();
  106.     }
  107.  
  108.     //=============================
  109.     @Override
  110.     public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
  111.         Log.i("ozzy", "Results length: "+grantResults.length+"  :  "+grantResults[0]);
  112.         if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
  113.             Log.d("ozzy", "req code: "+requestCode);
  114.             if (100 == requestCode) {
  115.                 //same request code as was in request permission
  116.                 Log.d("ozzy", "starting scan");
  117.                 startScan();
  118.             }
  119.  
  120.         } else {
  121.             //not granted permission
  122.             //show some explanation dialog that some features will not work
  123.         }
  124.     }
  125.  
  126.     //=============================
  127.     @Override
  128.     protected void onStop() {
  129.         super.onStop();
  130.         proximityManager.detachListener(this);
  131.         proximityManager.disconnect();
  132.     }
  133.  
  134.     //=============================
  135.     private ScanContext getScanContext() {
  136.         if (scanContext == null) {
  137.             scanContext = new ScanContext.Builder()
  138.                     .setScanPeriod(ScanPeriod.RANGING) // or for monitoring for 15 seconds scan and 10 seconds waiting:
  139.                     //.setScanPeriod(new ScanPeriod(TimeUnit.SECONDS.toMillis(15), TimeUnit.SECONDS.toMillis(10)))
  140.                     .setScanMode(ProximityManager.SCAN_MODE_BALANCED)
  141.                     .setActivityCheckConfiguration(ActivityCheckConfiguration.MINIMAL)
  142.                     .setForceScanConfiguration(ForceScanConfiguration.MINIMAL)
  143.                     .setIBeaconScanContext(new IBeaconScanContext.Builder().build())
  144.                     .setEddystoneScanContext(new EddystoneScanContext.Builder().build())
  145.                     .setForceScanConfiguration(ForceScanConfiguration.MINIMAL)
  146.                     .build();
  147.         }
  148.         return scanContext;
  149.     }
  150.  
  151.     //=============================
  152.     @Override
  153.     public void onEvent(BluetoothDeviceEvent bluetoothDeviceEvent) {
  154.         List<? extends RemoteBluetoothDevice> deviceList = bluetoothDeviceEvent.getDeviceList();
  155.         long timestamp = bluetoothDeviceEvent.getTimestamp();
  156.         DeviceProfile deviceProfile = bluetoothDeviceEvent.getDeviceProfile();
  157.         switch (bluetoothDeviceEvent.getEventType()) {
  158.             case SPACE_ENTERED:
  159.                 Log.d(TAG, "namespace or region entered");
  160.                 Toast.makeText(this, "Region entered", Toast.LENGTH_SHORT).show();
  161.                 break;
  162.             case DEVICE_DISCOVERED:
  163.                 Log.d(TAG, "found new beacon");
  164.                 Toast.makeText(this, "Found new beacon", Toast.LENGTH_SHORT).show();
  165.                 break;
  166.             case DEVICES_UPDATE:
  167.                 Log.d(TAG, "updated beacons");
  168.                 Toast.makeText(this, "Updated Beacon", Toast.LENGTH_SHORT).show();
  169.                 break;
  170.             case DEVICE_LOST:
  171.                 Log.d(TAG, "lost device");
  172.                 Toast.makeText(this, "Device lost", Toast.LENGTH_SHORT).show();
  173.                 break;
  174.             case SPACE_ABANDONED:
  175.                 Log.d(TAG, "namespace or region abandoned");
  176.                 Toast.makeText(this, "Region abandoned", Toast.LENGTH_SHORT).show();
  177.                 break;
  178.         }
  179.     }
  180.  
  181.     //=============================
  182.     @Override
  183.     public void onScanStart() {
  184.         Log.d(TAG, "scan started");
  185.     }
  186.  
  187.     //=============================
  188.     @Override
  189.     public void onScanStop() {
  190.         Log.d(TAG, "scan stopped");
  191.     }
  192. }
Add Comment
Please, Sign In to add comment