Giter VIP home page Giter VIP logo

android-proximity-sdk's Introduction

Estimote Proximity SDK for Android

Stick an Estimote Beacon at your desk, in your car, or on a package, and the Estimote Proximity SDK will let your app know when you enter or exit its range. Works indoors, in the background, and is accurate up to a few meters.

Powered by Estimote Monitoring: Estimote’s own signal-processing technology, with emphasis on maximum reliability. (up to 3 times better than other beacon-based technologies we’ve benchmarked against.

Other Proximity SDK highlights include:

  1. Tag-based identification: define your proximity zones with human-readable tags instead of abstract identifiers.
  2. Multiple zones per beacon: set up more than one enter/exit zone per single beacon. (e.g., a “close” zone and a “far” zone)
  3. Software-defined range: define the enter/exit trigger range in code, rather than by the beacon’s broadcasting power.
  4. Cloud-based tagging & grouping: add, remove, and replace beacons, without changing the app’s code - just modify the tags in Estimote Cloud.

Table of Contents

Tag-based identification

Estimote Proximity SDK uses tag-based identification to allow for dynamic setup changes. You monitor beacons by tags, which you assign in Estimote Cloud. For example, instead of saying "monitor for beacon 123 and beacon 456", you say, "monitor for beacons tagged as lobby". This way, if you need to replace or add more beacons to the lobby, you just add/change tags in Estimote Cloud. Your app will pick up the new setup the next time the ProximityObserver is started.

As our SDK is still in version 0.x.x, we're constantly modifying our API according to your feedback. Our latest iteration is based on simple tags, backed up with attachments as an optional additional information. From the version 0.6.0, the method .forAttachmentKeyAndValue(...) is deprecated - please use .forTag(...) instead.

Estimote Proximity SDK is built on the top of three key components: observer, zone, and zone's context.

  • Observer - starts and stops monitoring for a provided list of zones
  • Zone - representation of a physical area combining a group of beacons with the same tag.
  • Zone’s context (Proximity Context) - a combination of a single beacon with its tag and list of attachments assigned to it.
  • Action (callbacks) - every zone has three types of callbacks triggered when you: enter a zone's context, exit it, or a number of heard contexts changes.

Below there’s a representation of two zones:

  • blueberry zone with two Proximity Contexts,
  • mint zone with only one Proximity Context.

Proximity zones based on tags

Installation

Gradle

Starting with version 1.0.6, Estimote Proximity SDK is available in our JFrog Artifactory. In order to gain access to it, our Artifactory repository must be added to the list of Maven repositories in your top level build.gradle file:

allprojects {
    repositories {
        maven {
            url "https://estimote.jfrog.io/artifactory/android-proximity-sdk"
        }
        ...
    }
    ...
}

Add the below line to your build.gradle file

implementation 'com.estimote:proximity-sdk:1.0.7'

If you are using Gradle version below 3.0.0 then you should use compile instead of implementation.

Or use our Example app to download a ready, pre-integrated demo

How to use it in your app

Requirements

1. Setting up tags in your Estimote Cloud account

  1. Go to https://cloud.estimote.com/#/
  2. Click on the beacon you want to configure
  3. Click Edit settings button
  4. Click Tags and put your desired tag/tags.
  5. Click Save changes Tags are Cloud-only settings — no additional connecting to the beacons with the Estimote app is required!

2. Build proximity observer

The ProximityObserver is the main object for performing proximity observations. Build it using ProximityObserverBuilder - and don't forget to put in your Estimote Cloud credentials!

// Kotlin
val cloudCredentials = EstimoteCloudCredentials(YOUR_APP_ID_HERE , YOUR_APP_TOKEN_HERE)
val proximityObserver = ProximityObserverBuilder(applicationContext, cloudCredentials)
                .withBalancedPowerMode()
                .onError { /* handle errors here */ }
                .build()
// Java
EstimoteCloudCredentials cloudCredentials = new EstimoteCloudCredentials(YOUR_APP_ID_HERE, YOUR_APP_TOKEN_HERE);
ProximityObserver proximityObserver = new ProximityObserverBuilder(getApplicationContext(), cloudCredentials)
                .withBalancedPowerMode()
                .onError(new Function1<Throwable, Unit>() {
                  @Override
                  public Unit invoke(Throwable throwable) {
                    return null;
                  }
                })
                .build();

You can customize your ProximityObserver using the available options:

  • withLowLatencyPowerMode - the most reliable mode, but may drain battery a lot.
  • withBalancedPowerMode - balance between scan reliability and battery drainage.
  • withLowPowerMode - battery efficient mode, but not that reliable.
  • onError - action triggered when any error occurs - such as cloud connection problems, scanning, etc.
  • withScannerInForegroundService - starts the observation proces with scanner wrapped in foreground service. This will display notification in user's notifications bar, but will ensure that the scanning won't be killed by the system. Important: Your scanning will be handled without the foreground service by default.
  • withTelemetryReportingDisabled - ProximityObserver will automatically send telemetry data from your beacons, such as light level, or temperature, to our cloud. This is also an important data for beacon health check (such as tracking battery life for example).
  • withAnalyticsReportingDisabled - Analytic data (current visitors in your zones, number of enters, etc) ) is sent to our cloud by default. Use this to turn it off.
  • withEstimoteSecureMonitoringDisabled - using this will disable scanning for encrypted Estimote packets. ProximityObserver will not try to resolve encrypted packets using Estimote Secure Monitoring protocol. Only unencrypted packets will be observed.

3. Define proximity zones

Create your own proximity zones using proximityObserver.zoneBuilder()

// Kotlin
val venueZone = ProximityZoneBuilder()
                .forTag("venue")
                .inFarRange()
                .onEnter {/* do something here */}
                .onExit {/* do something here */}
                .onContextChange {/* do something here */}
                .build()
// Java
ProximityZone venueZone = 
    new ProximityZoneBuilder()
        .forTag("venue")
        .inFarRange()
        .onEnter(new Function1<ProximityContext, Unit>() {
          @Override public Unit invoke(ProximityContext proximityContext) {
            /* Do something here */
            return null;
          }
        })
        .onExit(new Function1<ProximityContext, Unit>() {
              @Override
              public Unit invoke(ProximityContext proximityContext) {
                  /* Do something here */
                  return null;
              }
          })
        .onContextChange(new Function1<List<? extends ProximityContext>, Unit>() {
          @Override
          public Unit invoke(List<? extends ProximityContext> proximityContexts) {
            /* Do something here */
            return null;
          }
        })
        .build();

You zones can be defined with the below options:

  • forTag - a tag that will trigger this zone actions.
  • onEnter - the action that will be triggered when the user enters the zone
  • onExit - the action that will be triggered when the user exits the zone.
  • onContextChange - triggers when there is a change in a proximity context of a given tag. If the zone consists of more than one beacon, this will help tracking the ones that are nearby inside the zone, while still remaining one onEnter and one onExit event for the whole zone in general.
  • inFarRange - the far distance at which actions will be invoked.
  • inNearRange - the near distance at which actions will be invoked.
  • inCustomRange - custom desired trigger distance in meters.

Notice that due to the nature of Bluetooth Low Energy, the range is "desired" and not "exact". We are constantly improving the precision.

4. Start proximity observation

When you are done defining your zones, you will need to start the observation process:

// Kotlin
val observationHandler = proximityObserver.startObserving(myZone)
// Java
ProximityObserver.Handler observationHandler =
       proximityObserver
           .startObserving(venueZone);

The ProximityObserver will return ProximityObserver.Handler that you can use to stop scanning later. For example:

// Kotlin
override fun onDestroy() {
    observationHandler.stop()
    super.onDestroy()
}
// Java
@Override
protected void onDestroy() {
    observationHandler.stop();
    super.onDestroy();
}

(Optional) Adding attachments to your beacons

While zone identification is based on tags, attachments are a way to add additional content to a beacon and a zone it defines. Think of it as a custom backend where you can assign any additional data to a particular beacon.

  1. Go to https://cloud.estimote.com/#/
  2. Click on the beacon you want to configure
  3. Click Edit settings button
  4. Click Beacon attachment tab and click add attachment

When you enter the proximity zone of any beacon with this attachment, you will get a ProximityContext as an parameter to your onEnter or onExit actions. The attachment will be there. Here is an example on how to use it:

 val exhibitionZone = ProximityZoneBuilder()
                .forTag("exhibit")
                .inNearRange()
                .onEnter { proximityContext ->
                    val title = proximityContext.getAttachments()["title"]
                    val description = proximityContext.getAttachments()["description"]
                    val imageUrl = proximityContext.getAttachments()["image_url"]
                    // Use all above data to update your app's UI
                }
                .create()

Location permissions

In order for ProximitySDK to work, you need to grant your app a location permission. You can ask your user for the permission by yourself, or use our RequirementsWizard to do it for you.

IMPORTANT: Since version 1.0.8 targeting Android SDK 31+ requires new permissions, that are not (yet) checked by RequirementsWizard. Please make sure your app has granted access to following permissions:

  • android.permission.BLUETOOTH_CONNECT,
  • android.permission.BLUETOOTH_SCAN,
  • android.permission.ACCESS_FINE_LOCATION

Background support

Background scanning using foreground service

Use case: Scanning when your app is in the background (not yet killed). Scanning attached to the notification object even when all activities are destroyed.

It is now possible to scan when the app is in the background, but it needs to be handled properly according to the Android official guidelines.

IMPORTANT: Launching "silent bluetooth scan" without the knowledge of the user is not permitted by the system - if you do so, your service might be killed in any moment, without your permission. We don't want this behaviour, so we decided to only allow scanning in the background using a foreground service with a notification. You can implement your own solution, based on any kind of different service/API, but you must bear in mind, that the system might kill it if you don't handle it properly.

  1. Declare an notification object like this:
// KOTLIN
val notification = Notification.Builder(this)
              .setSmallIcon(R.drawable.notification_icon_background)
              .setContentTitle("Beacon scan")
              .setContentText("Scan is running...")
              .setPriority(Notification.PRIORITY_HIGH)
              .build()
  1. Use .withScannerInForegroundService(notification) when building ProximityObserver via ProximityObserverBuilder:

  2. To keep scanning active while the user is not in your activity (home button pressed) put start/stop in onCreate()/onDestroy() of your desired ACTIVITY.

  3. To scan even after the user has killed your activity (swipe in app manager) put start/stop in onCreate()/onDestroy() of your CLASS EXTENDING APPLICATION CLASS.

Tip: You can control the lifecycle of scanning by starting/stopping it in the different places of your app. If you happen to never stop it, the underlying foreground service will keep running, and the notification will be still visible to the user. If you want such behaviour, remember to initialize the notification object correctly - add button to it that stops the service. Please, read more in the official android documentation about managing notification objects.

Experimental: background scanning using Proximity Trigger (Android 8.0+)

Use case: Displaying your notification when user enters the zone while having your app KILLED - the notification allows him to open your app (if you create it in such way). Triggering your PendingIntent when user enters the zone.

Since Android version 8.0 there is a possibility to display a notification to the user when he enters the specified zone. This may allow him to open your app (by clicking the notification for example) that will start the proper foreground scanning.
You can do this by using our ProximityTrigger, and here is how:

  1. Declare an notification object like this:
// KOTLIN
val notification = Notification.Builder(this)
              .setSmallIcon(R.drawable.notification_icon_background)
              .setContentTitle("Beacon scan")
              .setContentText("Scan is running...")
              // you can add here an action to open your app when user clicks the notification
              .setPriority(Notification.PRIORITY_HIGH)
              .build()

Tip: Remember that on Android 8.0 you will also need to create a notification channel. Read more here.

  1. Use ProximityTriggerBuilder to build ProximityTrigger:
// KOTLIN
val triggerHandle = ProximityTriggerBuilder(applicationContext)
                // you can handle potential scanning error here. By default it is logging error message.
                .onError { ... }
                .displayNotificationWhenInProximity(notification)
                .build()
                .start()

This will register the notification to be invoked when the user enters the zone of your beacons. You can use the triggerHandle to call stop() - this will deregister the system callback for you.

Also, bear in mind, that the system callback may be invoked many times, thus displaying your notification again and again. In order to avoid this problem, you should add a button to your notification that will call trigger.stop() to stop the system scan. On the other hand, you can use displayOnlyOnce() method when building the ProximityTrigger object - this will fire your notification only once, and then you will need to call start() again.

Known problems: The scan registration gets cancelled when user disables bluetooth and WiFi on his phone. After that, the trigger may not work, and your app will need to be opened once again to reschedule the ProximityTrigger.

This feature is still experimental and in development.

Additional features

Caching data for limited internet connection use cases

Since the version 0.5.0 the ProximityObserver will persist necessary data locally, so that when there is no internet access, it may still be able to do proximity observation using that data. The only need is to call proximityObserver.start() at least once when the internet connection is available - it will fetch all the necessary data from the Estimote Cloud, and will store them locally for the later use.

Scanning for Estimote Telemetry

Use case: Getting sensors data from your Estimote beacons.

You can easily scan for raw Estimote Telemetry packets that contain your beacons' sensor data. All this data is broadcasted in the two separate sub-packets, called frame A and frame B. Our SDK allows you to scan for both of them separately, or to scan for the whole merged data at once (containing frame A and B data, and also the full device identifier). Here is how to launch scanning for full telemetry data:

// KOTLIN
 bluetoothScanner = EstimoteBluetoothScannerFactory(applicationContext).getSimpleScanner()
        telemetryFullScanHandler =
                bluetoothScanner
                        .estimoteTelemetryFullScan()
                        .withOnPacketFoundAction {
                            Log.d("Full Telemetry", "Got Full Telemetry packet: $it") 
                        }
                        .withOnScanErrorAction { 
                            Log.e("Full Telemetry", "Full Telemetry scan failed: $it") 
                        }
                        .start()

You can use telemetryFullScanHandler.stop() to stop the scanning. Similarily to the ProximityObserver you can also start this scan in the foreground service using getScannerWithForegroundService(notification) method instead of .getSimpleScanner().

Basic info about possible scanning modes:

estimoteTelemetryFullScan() - contains merged data from frame A and B, as well as full device id. Will be less frequently reported than individual frames.

estimoteTelemetryFrameAScan() - data from frame A + short device id. Reported on every new frame A.

estimoteTelemetryFrameBScan() - data from frame B + short device id. Reported on every new frame B.

Tip: Read more about the Estimote Telemetry protocol specification here. You can also check our tutorial about how to use the telemetry scanning on your Android Things device (RaspberryPi 3.0 for example).

Helpful stuff

Checking requirements for Bluetooth scanning with RequirementsWizard

IMPORTANT: Since version 1.0.8 targeting Android SDK 31+ requires new permissions, that are not (yet) checked by RequirementsWizard. Please make sure your app has granted access to following permissions:

  • android.permission.BLUETOOTH_CONNECT,
  • android.permission.BLUETOOTH_SCAN,
  • android.permission.ACCESS_FINE_LOCATION

Use case: Making sure that everything needed for Bluetooth scanning to work is set up - the user has Bluetooth enabled, location permissions were granted, etc. Displaying default popup dialogs to enable Bluetooth and give needed permissions.

The ProximityObserver won't work without the certain requirements fulfilled. Bluetooth needs to be enabled on a phone, Location permissions need to be granted, etc. You can do this either manually, by checking this before starting the ProximityObserver, or use our support library named Mustard, which contains handy Kotlin recipes for Android's UI-related stuff. The RequirementsWizard comes in handy, when you need to check all the necessary requirements. It will automatically display default dialogs for the user to enable needed stuff (like bluetooth) for you.

  1. Add our Mustard support library to your module's build.gradle file:
implementation 'com.estimote:mustard:0.2.1'
  1. Use RequirementsWizard before starting the ProximityObserver:
// KOTLIN
RequirementsWizardFactory.createEstimoteRequirementsWizard().fulfillRequirements(
            YOUR_ACTIVITY_CONTEXT_HERE,
            onRequirementsFulfilled : { /* start the ProximityObserver here! */ },
            onRequirementsMissing: { /* scanning won't work, handle this case in your app */ },
            onError: { /* Oops, some error occurred, handle it here! */ })
// JAVA
RequirementsWizardFactory.createEstimoteRequirementsWizard().fulfillRequirements(
      this, 
      new Function0<Unit>() {
        @Override
        public Unit invoke() {
          proximityObserver.addProximityZone(venueZone).start();
          return null;
        }
      },

      new Function1<List<? extends Requirement>, Unit>() {
        @Override
        public Unit invoke(List<? extends Requirement> requirements) {
          /* scanning won't work, handle this case in your app */
          return null;
        }
      },

      new Function1<Throwable, Unit>() {
        @Override
        public Unit invoke(Throwable throwable) {
          /* Oops, some error occurred, handle it here! */ }
          return null;
        }
      });

Why a separate library? - Mustard library depends on Android support libraries to display proper dialogs for the user. Some of you might don't want to add additional Android support libraries to your project, or some unwanted version confilicts might appear. This is why we decided to keep it as a separate thing.

Why "Mustard"? - The name "Kotlin" is coincidentally the same as the popular brand of ketchup in Poland. This is why we named our first support library "Ketchup". It's basically a place for our Kotlin/RX utils shared across our stack. When we decided to create a separate library for UI-related stuff, we thought of how much we love hot-dogs. And you know, hot-dogs come best with both ketchup and mustard :)

ProGuard configuration

If you want to use ProGuard with our SDK, make sure to add additional rules to your proguard-rules.pro file.

-keepattributes Signature, InternalClasses, Exceptions
-keep class com.estimote.proximity_sdk.internals.proximity.cloud.model.**
-dontwarn okio.**
-dontwarn javax.annotation.**
-dontwarn retrofit2.Platform$Java8
-dontwarn kotlin.**

Example apps

To get a working prototype, download a ready-made app template in the Estimote Cloud. App ID & App Token credentials are generated automatically.

  • Use Proximity to run a simple demo in the foreground.
  • Use Notification to run a demo in the background and display notifications.

Demos require Estimote Beacons configured with Estimote Monitoring.

Documentation

Our Kdoc is available here.

Your feedback and questions

At Estimote we're massive believers in feedback! Here are some common ways to share your thoughts with us:

Changelog

To see what has changed in recent versions of our SDK, see the CHANGELOG.

android-proximity-sdk's People

Contributors

abiela avatar heypiotr avatar ljdk avatar mgwizdal avatar ociepa avatar paweldylag avatar piotrekmalek avatar poberro avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

android-proximity-sdk's Issues

Bluetooth Low Energy scan failed with error code: -99

Prerequisites

  • Put an X between the brackets on this line if you have done all of the following:
    • My beacons have Estimote Monitoring enabled (Check it in the Estimote Cloud, or via app)
    • My Android device/devices supports BLE and has Android OS version >= 5.0.0
    • My Android device/devices have bluetooth enabled
    • My app has Location Permissions granted

Basic information

Estimote SDK version: [Paste here the SDK version that you are using (like 0.1.0-alpha.6)]
com.estimote:proximity-sdk:0.2.0

Android devices affected: [Paste here your Android device model/models that you are having problems with.]
Samsung Galaxy Tab A6

Android OS version affected: [Android OS version (ex. Oreo 8.0.0)]

  • Android version 5.1.1
    Android security patch level: 1 Sept 2016

  • [Updated] I also got similar error on Samsung Galaxy S4 (Android 5.0.1)

Beacon hardware version: [Paste here your beacons hardware version (you can check that in Estimote Cloud).]
G1.12

Description

App crash with fatal exception when using estimote-proximity android sdk.
Same code works on Samsung Galaxy Tab A with Android version 5.1.1 security patch level 2015-12-01

Expected behavior: [What you expect to happen]
Should receive callback for withOnPacketFoundAction

Actual behavior: [What actually happens]
App crash with Fatal exception

Additional information

Here my code snippet

    if(SystemRequirementsChecker.checkWithDefaultDialogs(getCurrentActivity())) {
      scanner = new EstimoteBluetoothScannerFactory(reactContext).getSimpleScanner();
      scanHandler = scanner.estimoteTelemetryFrameBScan()
              .withLowLatencyPowerMode()
              .withOnPacketFoundAction(new Function1<EstimoteTelemetryFrameB, Unit>() {
                @Override
                public Unit invoke(EstimoteTelemetryFrameB tlm) {
                  Log.i("Estimote", "Estimote telemetry id: " + tlm.getShortId() + ", temp: " + tlm.getTemperatureInCelsiusDegrees());

                  return null;
                }
              })
              .withOnScanErrorAction(new Function1<Throwable, Unit>() {
                @Override
                public Unit invoke(Throwable throwable) {
                  Log.e("Estimote", "onScanError", throwable);
                  hasError = true;
                  return null;
                }
              })
              .withTimeout(60, TimeUnit.SECONDS)
              .start();
    }

And here is stack trace

02-01 13:35:06.515 4690-4690/? E/AndroidRuntime: FATAL EXCEPTION: main
                                                 Process: com.estimotetrackback, PID: 4690
                                                 io.reactivex.exceptions.UndeliverableException: java.lang.Exception: Bluetooth Low Energy scan failed with error code: -99
                                                     at io.reactivex.plugins.RxJavaPlugins.onError(RxJavaPlugins.java:349)
                                                     at io.reactivex.internal.operators.observable.ObservableCreate$CreateEmitter.onError(ObservableCreate.java:74)
                                                     at com.estimote.scanning_sdk.packet_provider.scanner.PostLollipopEstimoteScanner$scan$1$callback$1.onScanFailed(PostLollipopEstimoteScanner.kt:27)
                                                     at android.bluetooth.le.BluetoothLeScanner$1.run(BluetoothLeScanner.java:442)
                                                     at android.os.Handler.handleCallback(Handler.java:739)
                                                     at android.os.Handler.dispatchMessage(Handler.java:95)
                                                     at android.os.Looper.loop(Looper.java:145)
                                                     at android.app.ActivityThread.main(ActivityThread.java:6939)
                                                     at java.lang.reflect.Method.invoke(Native Method)
                                                     at java.lang.reflect.Method.invoke(Method.java:372)
                                                     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)
                                                     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)
                                                  Caused by: java.lang.Exception: Bluetooth Low Energy scan failed with error code: -99
                                                     at com.estimote.scanning_sdk.packet_provider.scanner.PostLollipopEstimoteScanner$scan$1$callback$1.onScanFailed(PostLollipopEstimoteScanner.kt:27) 
                                                     at android.bluetooth.le.BluetoothLeScanner$1.run(BluetoothLeScanner.java:442) 
                                                     at android.os.Handler.handleCallback(Handler.java:739) 
                                                     at android.os.Handler.dispatchMessage(Handler.java:95) 
                                                     at android.os.Looper.loop(Looper.java:145) 
                                                     at android.app.ActivityThread.main(ActivityThread.java:6939) 
                                                     at java.lang.reflect.Method.invoke(Native Method) 
                                                     at java.lang.reflect.Method.invoke(Method.java:372) 
                                                     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404) 
                                                     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)

Not sure I'm doing anything wrong because I could not find example in Java.
Any help would be appreciated :)

Huawei p10 lite sometimes only triggers enter or exit when screen is on

With the old SDK´s i always had the problem that most Huawei Phones don´t trigger enter or exit events when the screen is off.
With this new Proximity SDK for the first time events are triggered even when the screen is off. However not always. It feels like there´s a maximum scanning time and it get´s stopped automatically after a period. But I can´t really find a pattern.
Is there any knowledge about this?

Thanks!
Stephan

Improve documentation

Hi,

You should modify the README.md.

  • Imports are missing:

      import com.estimote.cloud_plugin.common.EstimoteCloudCredentials;
      import com.estimote.proximity_sdk.proximity.ProximityObserver;
      import com.estimote.proximity_sdk.proximity.ProximityObserverFactory;
      import com.estimote.internal_plugins_api.cloud.proximity.ProximityAttachment;
    
      import kotlin.jvm.functions.Function1;
    
  • ProximityRule doesn't exist!

  • According to withOnExitAction, it's Function1 and not Function0

      ProximityZone zone1 = proximityObserver.zoneBuilder()
              .forAttachmentKeyAndValue("venue", "office")
              .inFarRange()
              .withOnEnterAction(new Function1<ProximityAttachment, Unit>() {
                  @Override
                  public Unit invoke(ProximityAttachment proximityAttachment) {
                      /* Do something here */
                      return null;
                  }
              })
              .withOnExitAction(new Function1<ProximityAttachment, Unit>() {
                  @Override
                  public Unit invoke(ProximityAttachment proximityAttachment) {
                      /* Do something here */
                      return null;
                  }
              })
              .withOnChangeAction(new Function1<List<? extends ProximityAttachment>, Unit>() {
                  @Override
                  public Unit invoke(List<? extends ProximityAttachment> proximityAttachments) {
                      /* Do something here */
                      return null;
                  }
              })
              .create();
    

Personnaly, I'm not a big fan of underscores in packages names, but it is allowed, so, whatever.

Bluetooth Low Energy scan failed with error code: 4

Prerequisites

  • Put an X between the brackets on this line if you have done all of the following:
    • My beacons have Estimote Monitoring enabled (Check it in the Estimote Cloud, or via app)
    • My Android device/devices supports BLE and has Android OS version >= 5.0.0
    • My Android device/devices have bluetooth enabled
    • My app has Location Permissions granted

Basic information

Estimote SDK version: [Paste here the SDK version that you are using (like 0.1.0-alpha.6)]

Android devices affected: [Paste here your Android device model/models that you are having problems with.]

Android OS version affected: [Android OS version (ex. Oreo 8.0.0)]

Beacon hardware version: [Paste here your beacons hardware version (you can check that in Estimote Cloud).]

Description

[Description of the issue]

(Optional) Steps to reproduce:

  1. [First Step]
  2. [Second Step]
  3. [and so on...]

Expected behavior: [What you expect to happen]

Actual behavior: [What actually happens]

Additional information

SDK VERSION 0.4.1
device: Samsung j7 prime (7.0 os version)

Add here any logs you want to attach, or any other info, like pictures for example
``03-20 11:52:59.912 14982-14982/com.estimote.proximitycontent E/AndroidRuntime: FATAL EXCEPTION: main
                                                                               Process: com.estimote.proximitycontent, PID: 14982
                                                                               io.reactivex.exceptions.UndeliverableException: java.lang.Exception: Bluetooth Low Energy scan failed with error code: 4
                                                                                   at io.reactivex.plugins.RxJavaPlugins.onError(RxJavaPlugins.java:349)
                                                                                   at io.reactivex.internal.operators.observable.ObservableFlatMap$InnerObserver.onError(ObservableFlatMap.java:573)
                                                                                   at io.reactivex.internal.observers.BasicFuseableObserver.onError(BasicFuseableObserver.java:100)
                                                                                   at io.reactivex.observers.SerializedObserver.onError(SerializedObserver.java:155)
                                                                                   at io.reactivex.internal.operators.observable.ObservableDebounceTimed$DebounceTimedObserver.onError(ObservableDebounceTimed.java:104)
                                                                                   at io.reactivex.internal.operators.observable.ObservableRefCount$ConnectionObserver.onError(ObservableRefCount.java:134)
                                                                                   at io.reactivex.internal.operators.observable.ObservablePublish$PublishObserver.onError(ObservablePublish.java:184)
                                                                                   at io.reactivex.internal.observers.BasicFuseableObserver.onError(BasicFuseableObserver.java:100)
                                                                                   at io.reactivex.internal.observers.BasicFuseableObserver.onError(BasicFuseableObserver.java:100)
                                                                                   at io.reactivex.internal.operators.observable.ObservableRefCount$ConnectionObserver.onError(ObservableRefCount.java:134)
                                                                                   at io.reactivex.internal.operators.observable.ObservablePublish$PublishObserver.onError(ObservablePublish.java:184)
                                                                                   at io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.checkTerminate(ObservableFlatMap.java:495)
                                                                                   at io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.drainLoop(ObservableFlatMap.java:331)
                                                                                   at io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.drain(ObservableFlatMap.java:323)
                                                                                   at io.reactivex.internal.operators.observable.ObservableFlatMap$InnerObserver.onError(ObservableFlatMap.java:571)
                                                                                   at io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.checkTerminate(ObservableFlatMap.java:495)
                                                                                   at io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.drainLoop(ObservableFlatMap.java:331)
                                                                                   at io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.drain(ObservableFlatMap.java:323)
                                                                                   at io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.onError(ObservableFlatMap.java:288)
                                                                                   at io.reactivex.internal.observers.BasicFuseableObserver.onError(BasicFuseableObserver.java:100)
                                                                                   at io.reactivex.internal.operators.observable.ObservableGroupBy$GroupByObserver.onError(ObservableGroupBy.java:137)
                                                                                   at io.reactivex.internal.operators.observable.ObservableCreate$CreateEmitter.tryOnError(ObservableCreate.java:85)
                                                                                   at io.reactivex.internal.operators.observable.ObservableCreate$CreateEmitter.onError(ObservableCreate.java:73)
                                                                                   at com.estimote.proximity_sdk.monitoring.estimote_monitoring.secure.SecureEstimoteMonitor$startEstimoteSecureScanResolving$1$2.invoke(SecureEstimoteMonitor.kt:46)
                                                                                   at com.estimote.proximity_sdk.monitoring.estimote_monitoring.secure.SecureEstimoteMonitor$startEstimoteSecureScanResolving$1$2.invoke(SecureEstimoteMonitor.kt:20)
                                                                                   at com.estimote.scanning_plugin.api.use_cases.ScanUseCase$notifyUserCallbacks$2.accept(ScanUseCase.kt:28)
                                                                                   at com.estimote.scanning_plugin.api.use_cases.ScanUseCase$notifyUserCallbacks$2.accept(ScanUseCase.kt:8)
                                                                                   at io.reactivex.internal.observers.LambdaObserver.onError(LambdaObserver.java:77)
                                                                                   at io.reactivex.internal.observers.BasicFuseableObserver.onError(BasicFuseableObserver.java:100)
                                                                                   at io.reactivex.internal.observers.BasicFuseableObserver.onError(BasicFuseableObserver.java:100)
                                                                                   at io.reactivex.internal.observers.BasicFuseableObserver.onError(BasicFuseableObserver.java:100)
                                                                                   at io.reactivex.internal.observers.BasicFuseableObserver.onError(BasicFuseableObserver.java:100)
                                                                                   at io.reactivex.internal.operators.observable.ObservableCreate$CreateEmitter.tryOnError(ObservableCreate.java:85)
                                                                                   at io.reactivex.internal.operators.observable.ObservableCreate$CreateEmitter.onError(ObservableCreate.java:73)
03-20 11:52:59.914 14982-14982/com.estimote.proximitycontent E/AndroidRuntime:     at com.estimote.scanning_plugin.packet_provider.scanner.PostLollipopEstimoteScanner$scan$1$callback$1.onScanFailed(PostLollipopEstimoteScanner.kt:30)
                                                                                   at android.bluetooth.le.BluetoothLeScanner$1.run(BluetoothLeScanner.java:532)
                                                                                   at android.os.Handler.handleCallback(Handler.java:751)
                                                                                   at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                                   at android.os.Looper.loop(Looper.java:154)
                                                                                   at android.app.ActivityThread.main(ActivityThread.java:6776)
                                                                                   at java.lang.reflect.Method.invoke(Native Method)
                                                                                   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1518)
                                                                                   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1408)
                                                                                Caused by: java.lang.Exception: Bluetooth Low Energy scan failed with error code: 4
                                                                                   at com.estimote.scanning_plugin.packet_provider.scanner.PostLollipopEstimoteScanner$scan$1$callback$1.onScanFailed(PostLollipopEstimoteScanner.kt:30) 
                                                                                   at android.bluetooth.le.BluetoothLeScanner$1.run(BluetoothLeScanner.java:532) 
                                                                                   at android.os.Handler.handleCallback(Handler.java:751) 
                                                                                   at android.os.Handler.dispatchMessage(Handler.java:95) 
                                                                                   at android.os.Looper.loop(Looper.java:154) 
                                                                                   at android.app.ActivityThread.main(ActivityThread.java:6776) 
                                                                                   at java.lang.reflect.Method.invoke(Native Method) 
                                                                                   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1518) 
                                                                                   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1408) 

Proximity SDK crashes while running and user removed location permission

Prerequisites

  • [x ] Put an X between the brackets on this line if you have done all of the following:
    • My beacons have Estimote Monitoring enabled (Check it in the Estimote Cloud, or via app)
    • My Android device/devices supports BLE and has Android OS version >= 5.0.0
    • My Android device/devices have bluetooth enabled
    • My app has Location Permissions granted

Basic information

Estimote SDK version: [Paste here the SDK version that you are using (like 0.1.0-alpha.6)]
0.5.2

Android devices affected: [Paste here your Android device model/models that you are having problems with.]
All

Android OS version affected: [Android OS version (ex. Oreo 8.0.0)]
All
Beacon hardware version: [Paste here your beacons hardware version (you can check that in Estimote Cloud).]

Description

When estimate is running in background and a user revokes location permission sdk crashes app.

FATAL EXCEPTION: main Process: com.visa.superbowl.concierge, PID: 3676 java.lang.RuntimeException: Unable to start service com.estimote.scanning_plugin.packet_provider.service.PacketProviderWrapperService@1479c86 with null: kotlin.UninitializedPropertyAccessException: lateinit property serviceHelper has not been initialized at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3694) at android.app.ActivityThread.-wrap21(Unknown Source:0) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1801) at android.os.Handler.dispatchMessage(Handler.java:105) at android.os.Looper.loop(Looper.java:164) at android.app.ActivityThread.main(ActivityThread.java:6938) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374) Caused by: kotlin.UninitializedPropertyAccessException: lateinit property serviceHelper has not been initialized at com.estimote.scanning_plugin.packet_provider.service.PacketProviderWrapperService.showNotification(PacketProviderWrapperService.kt:82) at com.estimote.scanning_plugin.packet_provider.service.PacketProviderWrapperService.onStartCommand(PacketProviderWrapperService.kt:32) at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3677) at android.app.ActivityThread.-wrap21(Unknown Source:0)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1801)  at android.os.Handler.dispatchMessage(Handler.java:105)  at android.os.Looper.loop(Looper.java:164)  at android.app.ActivityThread.main(ActivityThread.java:6938)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)  05-11 10:46:48.202 3676-3700/com.visa.superbowl.concierge E/GAv4: Successfully bound to service but never got onServiceConnected callback

Deactivate cloud synchronization

Prerequisites

  • [X ] Put an X between the brackets on this line if you have done all of the following:
    • My beacons have Estimote Monitoring enabled (Check it in the Estimote Cloud, or via app)
    • My Android device/devices supports BLE and has Android OS version >= 5.0.0
    • My Android device/devices have bluetooth enabled
    • My app has Location Permissions granted

Basic information

Estimote SDK version: 0.1.0-alpha.6

Android devices affected: All devices

Android OS version affected: All versions

Beacon hardware version: Doesn't matter

Description

How can I deactivate the cloud synchronization?

Hi all,

this is not an issue, but more a regular question:
In my scenario I want to track users, i.e. I need to know who was at which location at what time? I could not find any request achieving this in the cloud API documentation (docs). Does anybody know if there is a (maybe hidden) option for this?

The other alternative that I have is to setup a simple REST API by myself. Therefore I'd like to deactivate the send-to-cloud-option that seems to be activated per default:

12-31 14:11:55.918 26771-26771/com.dextreem.gs D/ProximityAnalyticsSink: Successfully sent events to cloud.

The idea behind this request is simply to save some data usage (and battery usage) I don't need. Is there an option for this?

The code I use

I use the same code as described in the repo.

NullPointerException on Android 4.3.1

Prerequisites

  • My beacons have Estimote Monitoring enabled (Check it in the Estimote Cloud, or via app)
  • My Android device/devices supports BLE and has Android OS version >= 5.0.0
  • My Android device/devices have bluetooth enabled
  • My app has Location Permissions granted

Basic information

Estimote SDK version: 0.3.3

Android devices affected: Motorola Defy Mini (XT320)

Android OS version affected: 4.3.1 (latest major upgrade for this phone)

Beacon hardware version: F3.3

Description

According to Crashlytics, we have monitored an old phone whose crashing when receiving a notification.

NullPointerException's are like game overs 🎮

I'm not sure if it's a real bug because:

  • it's a really old phone
  • it seems to support only Bluetooth 2.1, and I cannot find any BLE mention

Additional information

Fatal Exception: java.lang.RuntimeException: Unable to start receiver com.estimote.proximity_sdk.trigger.TriggerBroadcastReceiver: java.lang.NullPointerException
       at android.app.ActivityThread.handleReceiver(ActivityThread.java:2431)
       at android.app.ActivityThread.access$1500(ActivityThread.java:141)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1332)
       at android.os.Handler.dispatchMessage(Handler.java:99)
       at android.os.Looper.loop(Looper.java:137)
       at android.app.ActivityThread.main(ActivityThread.java:5103)
       at java.lang.reflect.Method.invokeNative(Method.java)
       at java.lang.reflect.Method.invoke(Method.java:525)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java)
       at dalvik.system.NativeStart.main(NativeStart.java)

and

Caused by java.lang.NullPointerException
       at android.app.NotificationManager.notify(NotificationManager.java:128)
       at com.estimote.proximity_sdk.trigger.TriggerBroadcastReceiver.postNotification(TriggerBroadcastReceiver.kt:25)
       at com.estimote.proximity_sdk.trigger.TriggerBroadcastReceiver.onReceive(TriggerBroadcastReceiver.kt:18)
       at android.app.ActivityThread.handleReceiver(ActivityThread.java:2424)
       at android.app.ActivityThread.access$1500(ActivityThread.java:141)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1332)
       at android.os.Handler.dispatchMessage(Handler.java:99)
       at android.os.Looper.loop(Looper.java:137)
       at android.app.ActivityThread.main(ActivityThread.java:5103)
       at java.lang.reflect.Method.invokeNative(Method.java)
       at java.lang.reflect.Method.invoke(Method.java:525)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java)
       at dalvik.system.NativeStart.main(NativeStart.java)

ProximityZone with custom range below 0.1 not detected.

Prerequisites

  • Put an X between the brackets on this line if you have done all of the following:
    • My beacons have Estimote Monitoring enabled (Check it in the Estimote Cloud, or via app)
    • My Android device/devices supports BLE and has Android OS version >= 5.0.0
    • My Android device/devices have bluetooth enabled
    • My app has Location Permissions granted

Basic information

Estimote SDK version: [0.5.0]

Android devices affected: [Samsung Galaxy S4]

Android OS version affected: [Lollipop 5.0.1]

Beacon hardware version: [G1.8]

Description

** Steps to reproduce:**

When custom range is 0.1, the beacon is detected. Change the custom range to 0.05 or 0.09, then the beacon is no more detected.

Expected behavior: [Beacon should be detected when custom range is below 0.1]

Actual behavior: [Beacon is not detected when custom range is below 0.1]

Additional information

We need to detect beacon when the phone is nearly touching the beacon, that is why we need a custom range below 0.1.   Custom range below 0.1 is working well using the iOS Proximity SDK version 0.12.0

onChangeAction won't get call on change of nearby attachment

Prerequisites

  • Put an X between the brackets on this line if you have done all of the following:
    • My beacons have Estimote Monitoring enabled (Check it in the Estimote Cloud, or via app)
    • My Android device/devices supports BLE and has Android OS version >= 5.0.0
    • My Android device/devices have bluetooth enabled
    • My app has Location Permissions granted

Basic information

Estimote SDK version: Android-Proximity-SDK 0.4.4

Android devices affected: Xiaomi Mi 5s

Android OS version affected: Android 7.0

Beacon hardware version: G1.8

Description

I am having some problems with the onChangeAction, i have done the exact same thing as the example on README.md. I have a main region for enter and exit actions(it's working perfectly), and one zone to control which beacon is nearby. But i don't get the onChangeAction for change of nearby attachments, i only receive the ones with after exit and enter. I had already tried changing the custom range, and the power modes.
PS: I am leaving the beacons far from each other, and to try i went as close as possible to the beacon.
PS 2: English is not my main language, please excuse any errors on my part.

Expected behavior: Receive a onChangeAction when i am closer to a beacon than the other.

Actual behavior: Not receiving the onChangeAction

Additional information

My Code:
`
mProximityObserver = new ProximityObserverBuilder(mContext, cloudCredentials)
.withLowLatencyPowerMode()
.withEstimoteSecureMonitoringDisabled()
.withTelemetryReportingDisabled()
.withAnalyticsReportingDisabled()
.withOnErrorAction(new Function1<Throwable, Unit>() {
@OverRide
public Unit invoke(Throwable throwable) {
mBeaconObserver.onError(throwable);
return null;
}
})
.build();

    mProximityZones = new ArrayList<>();
  
 for (Map<String, Object> map : listBeacons) {
        mProximityZones.add(mProximityObserver.zoneBuilder()
                .forAttachmentKeyAndValue("beaconRegion", map.get("identifier").toString())
                .inCustomRange(5)
                .withOnEnterAction(new Function1<ProximityAttachment, Unit>() {
                    @Override
                    public Unit invoke(ProximityAttachment proximityAttachment) {
                        mBeaconObserver.onBeaconEnter(proximityAttachment);

                        return null;
                    }
                })
                .withOnExitAction(new Function1<ProximityAttachment, Unit>() {
                    @Override
                    public Unit invoke(ProximityAttachment proximityAttachment) {
                        mBeaconObserver.onBeaconExit(proximityAttachment);
                        return null;
                    }
                })
                .create());
    }

    mProximityZones.add(mProximityObserver.zoneBuilder()
        .forAttachmentKeyAndValue("region", "main")
        .inCustomRange(5)
        .withOnChangeAction(new Function1<List<? extends ProximityAttachment>, Unit>() {
            @Override
            public Unit invoke(List<? extends ProximityAttachment> proximityAttachments) {
                

                List<ProximityAttachment> list = new ArrayList<>(proximityAttachments);
                mBeaconObserver.onBeaconChangeStatus(list);

                return null;
            }
        })
        .create());

    mProximityObserver.addProximityZones(mProximityZones);`

PS 3: I had to use the .ithEstimoteSecureMonitoringDisabled(), withTelemetryReportingDisabled() and withAnalyticsReportingDisabled(), because i was getting the "Bluetooth Low Energy scan failed with error code: 2", but the onChangeAction was not working even before.

Bluetooth Low Energy scan failed with error code: 2

Prerequisites

  • Put an X between the brackets on this line if you have done all of the following:
    • My beacons have Estimote Monitoring enabled (Check it in the Estimote Cloud, or via app)
    • My Android device/devices supports BLE and has Android OS version >= 5.0.0
    • My Android device/devices have bluetooth enabled
    • My app has Location Permissions granted

Basic information

Estimote SDK version: 5.0.0

Android devices affected: Xiaomi Redmi Note 4

Android OS version affected: 7.1.1

Beacon hardware version: G1.12

Description

[Description of the issue]

I'm getting an Exception that crashes the App when starting to scan for beacons. For some reason this happens mostly on the listed devices, but it is also possible to trigger on other devices by turning off and on the Bluetooth before and/or after the scanning starts.

extra information about this issue, if i put the code in the main activity, it doesn't crash the application and i got the exception in withOnErrorAction, now we had to configure the scan in a service, because we want to be running in background whether the application is running or not.
Because of this change the entire application crashes, that's not what i've expected.

(Optional) Steps to reproduce:

There are no several steps, just one, trying to configure the beacons as the downloaded example.

Expected behavior:

Start the scanning?

Actual behavior:

Crashes with exception.

Additional information

W/System.err: io.reactivex.exceptions.UndeliverableException: java.lang.Exception: Bluetooth Low Energy scan failed with error code: 2
W/System.err: at io.reactivex.plugins.RxJavaPlugins.onError(RxJavaPlugins.java:349)
W/System.err: at io.reactivex.internal.operators.observable.ObservableCreate$CreateEmitter.onError(ObservableCreate.java:74)
W/System.err: at com.estimote.scanning_plugin.packet_provider.scanner.PostLollipopEstimoteScanner$scan$1$callback$1.onScanFailed(PostLollipopEstimoteScanner.kt:29)
W/System.err: at android.bluetooth.le.BluetoothLeScanner$1.run(BluetoothLeScanner.java:478)
W/System.err: at android.os.Handler.handleCallback(Handler.java:754)
at android.os.Handler.dispatchMessage(Handler.java:95)
W/System.err: at android.os.Looper.loop(Looper.java:165)
W/System.err: at android.app.ActivityThread.main(ActivityThread.java:6365)
at java.lang.reflect.Method.invoke(Native Method)
W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:883)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773)
W/System.err: Caused by: java.lang.Exception: Bluetooth Low Energy scan failed with error code: 2
... 9 more
W/MIUI-BLOCK-MONITOR: The binder call took 3622ms.
java.lang.Throwable
at android.os.AnrMonitor.checkBinderCallTime(AnrMonitor.java:607)
at android.os.BinderProxy.transact(Binder.java:623)
at android.app.ActivityManagerProxy.handleApplicationCrash(ActivityManagerNative.java:5190)
at com.android.internal.os.RuntimeInit$KillApplicationHandler.uncaughtException(RuntimeInit.java:190)
at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:1068)
at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:1063)
at io.reactivex.plugins.RxJavaPlugins.uncaught(RxJavaPlugins.java:411)
at io.reactivex.plugins.RxJavaPlugins.onError(RxJavaPlugins.java:365)
at io.reactivex.internal.operators.observable.ObservableCreate$CreateEmitter.onError(ObservableCreate.java:74)
at com.estimote.scanning_plugin.packet_provider.scanner.PostLollipopEstimoteScanner$scan$1$callback$1.onScanFailed(PostLollipopEstimoteScanner.kt:29)
at android.bluetooth.le.BluetoothLeScanner$1.run(BluetoothLeScanner.java:478)
at android.os.Handler.handleCallback(Handler.java:754)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:165)
at android.app.ActivityThread.main(ActivityThread.java:6365)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:883)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773)

Bluetooth Low Energy scan failed with error code: 2

Prerequisites

  • My beacons have Estimote Monitoring enabled (Check it in the Estimote Cloud, or via app)
  • My Android device/devices supports BLE and has Android OS version >= 5.0.0
  • My Android device/devices have bluetooth enabled
  • My app has Location Permissions granted

Basic information

Estimote SDK version: 0.3.3

Android devices affected:
1.Vodafone VFD 600
2.Vodafone VFD 610
3.BlackView BV6000
4.Samsung J3(2016)

Android OS version affected (same order as above):
1.6.0.1
2.7.0
3.7.0
4.5.1.1

Beacon hardware version: G1.8

Description

I'm getting an Exception that crashes the App when starting to scan for beacons. For some reason this happens mostly on the listed devices, but it is also possible to trigger on other devices by turning off and on the Bluetooth before and/or after the scanning starts. This can be a bit hard to reproduce, sorry I don't have more information on this.

After entering this state, it's very hard to make it stop. In some case I had to uninstall the App to stop the behaviour. This could be related to the fact that the App crashes and the observationHandler.stop() is never called, because onDestroy() is also never called. This is annoying because the notification keeps firing.

Although the Bluetooth error code varies between 2 and 4, the problem seems to arise from the same place: PostLollipopEstimoteScanner.kt:29

(Optional) Steps to reproduce:

  1. Create a ProximityObserver
    My code:
Notification notification =
                notificationHelper.getNotification("Beacon Scan", "Scan is running...", null);
        cloudCredentials = new EstimoteCloudCredentials(ESTIMOTE_APP_ID, ESTIMOTE_APP_TOKEN);
        proximityObserver = new ProximityObserverBuilder(mActivity, cloudCredentials)
                .withBalancedPowerMode()
                .withScannerInForegroundService(notification)
                .withOnErrorAction(onErrorAction)
                .build();

        venueZone = proximityObserver.zoneBuilder()
                .forAttachmentKeyAndValue("place", "some_place")
                .inNearRange()
                .withOnEnterAction(onEnterAction)
                .withOnExitAction(onExitAction)
                .withOnChangeAction(onChangeAction)
                .create();

        observationHandler =
                proximityObserver
                        .addProximityZone(venueZone)
                        .start();
  1. Start scanning
  2. Turn the BT on and off as necessary until the App crashes

Expected behavior: Either a warning or some error for the developer to deal with.

Actual behavior: Application crashes

Additional information

FATAL EXCEPTION: main
                  Process: pt.vasp.mobile.vaspat, PID: 10609
                  io.reactivex.exceptions.UndeliverableException: java.lang.Exception: Bluetooth Low Energy scan failed with error code: 2
                      at io.reactivex.plugins.RxJavaPlugins.onError(RxJavaPlugins.java:349)
                      at io.reactivex.internal.operators.observable.ObservableCreate$CreateEmitter.onError(ObservableCreate.java:74)
                      at com.estimote.scanning_plugin.packet_provider.scanner.PostLollipopEstimoteScanner$scan$1$callback$1.onScanFailed(PostLollipopEstimoteScanner.kt:29)
                      at android.bluetooth.le.BluetoothLeScanner$1.run(BluetoothLeScanner.java:416)
                      at android.os.Handler.handleCallback(Handler.java:739)
                      at android.os.Handler.dispatchMessage(Handler.java:95)
                      at android.os.Looper.loop(Looper.java:148)
                      at android.app.ActivityThread.main(ActivityThread.java:5417)
                      at java.lang.reflect.Method.invoke(Native Method)
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
                   Caused by: java.lang.Exception: Bluetooth Low Energy scan failed with error code: 2
                      at com.estimote.scanning_plugin.packet_provider.scanner.PostLollipopEstimoteScanner$scan$1$callback$1.onScanFailed(PostLollipopEstimoteScanner.kt:29) 
                      at android.bluetooth.le.BluetoothLeScanner$1.run(BluetoothLeScanner.java:416) 
                      at android.os.Handler.handleCallback(Handler.java:739) 
                      at android.os.Handler.dispatchMessage(Handler.java:95) 
                      at android.os.Looper.loop(Looper.java:148) 
                      at android.app.ActivityThread.main(ActivityThread.java:5417) 
                      at java.lang.reflect.Method.invoke(Native Method) 
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
FATAL EXCEPTION: main
                  Process: pt.vasp.mobile.vaspat, PID: 31263
                  io.reactivex.exceptions.UndeliverableException: java.lang.Exception: Bluetooth Low Energy scan failed with error code: 4
                      at io.reactivex.plugins.RxJavaPlugins.onError(RxJavaPlugins.java:349)
                      at io.reactivex.internal.operators.observable.ObservableCreate$CreateEmitter.onError(ObservableCreate.java:74)
                      at com.estimote.scanning_plugin.packet_provider.scanner.PostLollipopEstimoteScanner$scan$1$callback$1.onScanFailed(PostLollipopEstimoteScanner.kt:29)
                      at android.bluetooth.le.BluetoothLeScanner$1.run(BluetoothLeScanner.java:442)
                      at android.os.Handler.handleCallback(Handler.java:739)
                      at android.os.Handler.dispatchMessage(Handler.java:95)
                      at android.os.Looper.loop(Looper.java:145)
                      at android.app.ActivityThread.main(ActivityThread.java:6934)
                      at java.lang.reflect.Method.invoke(Native Method)
                      at java.lang.reflect.Method.invoke(Method.java:372)
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)
                   Caused by: java.lang.Exception: Bluetooth Low Energy scan failed with error code: 4
                      at com.estimote.scanning_plugin.packet_provider.scanner.PostLollipopEstimoteScanner$scan$1$callback$1.onScanFailed(PostLollipopEstimoteScanner.kt:29) 
                      at android.bluetooth.le.BluetoothLeScanner$1.run(BluetoothLeScanner.java:442) 
                      at android.os.Handler.handleCallback(Handler.java:739) 
                      at android.os.Handler.dispatchMessage(Handler.java:95) 
                      at android.os.Looper.loop(Looper.java:145) 
                      at android.app.ActivityThread.main(ActivityThread.java:6934) 
                      at java.lang.reflect.Method.invoke(Native Method) 
                      at java.lang.reflect.Method.invoke(Method.java:372) 
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404) 
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199) 

Crash if Bluetooth is disabled

Hi,
I encountered crashes when I use Proximity SDK if I forgot to activate Bluetooth on my device.
Here is the stacktrace:

Fatal Exception: java.lang.IllegalStateException: Cannot obtain BluetoothLeScanner instance. Ensure Bluetooth is enabled on your device at com.estimote.scanning_sdk.dagger.BluetoothModule.providesBluetoothLeScanner(BluetoothModule.kt:30) at com.estimote.scanning_sdk.dagger.BluetoothModule_ProvidesBluetoothLeScannerFactory.get(BluetoothModule_ProvidesBluetoothLeScannerFactory.java:31) at com.estimote.scanning_sdk.dagger.BluetoothModule_ProvidesBluetoothLeScannerFactory.get(BluetoothModule_ProvidesBluetoothLeScannerFactory.java:10) at dagger.internal.DoubleCheck.get(DoubleCheck.java:47) at com.estimote.scanning_sdk.dagger.ScannerModule_ProvideScannerFactoryFactory.get(ScannerModule_ProvideScannerFactoryFactory.java:30) at com.estimote.scanning_sdk.dagger.ScannerModule_ProvideScannerFactoryFactory.get(ScannerModule_ProvideScannerFactoryFactory.java:10) at dagger.internal.DoubleCheck.get(DoubleCheck.java:47) at com.estimote.scanning_sdk.dagger.ScannerModule_ProvideScannerFactory.get(ScannerModule_ProvideScannerFactory.java:30) at com.estimote.scanning_sdk.dagger.ScannerModule_ProvideScannerFactory.get(ScannerModule_ProvideScannerFactory.java:10) at dagger.internal.DoubleCheck.get(DoubleCheck.java:47) at com.estimote.scanning_sdk.dagger.UseCaseModule_ProvideIBeaconScanUseCaseFactory.get(UseCaseModule_ProvideIBeaconScanUseCaseFactory.java:46) at com.estimote.scanning_sdk.dagger.UseCaseModule_ProvideIBeaconScanUseCaseFactory.get(UseCaseModule_ProvideIBeaconScanUseCaseFactory.java:12) at dagger.internal.DoubleCheck.get(DoubleCheck.java:47) at com.estimote.scanning_sdk.dagger.PacketProviderModule_ProvidesPacketProviderFactory.get(PacketProviderModule_ProvidesPacketProviderFactory.java:105) at com.estimote.scanning_sdk.dagger.PacketProviderModule_ProvidesPacketProviderFactory.get(PacketProviderModule_ProvidesPacketProviderFactory.java:22) at dagger.internal.DoubleCheck.get(DoubleCheck.java:47) at com.estimote.scanning_sdk.api.EstimoteBluetoothScannerFactory_MembersInjector.injectMembers(EstimoteBluetoothScannerFactory_MembersInjector.java:40) at com.estimote.scanning_sdk.api.EstimoteBluetoothScannerFactory_MembersInjector.injectMembers(EstimoteBluetoothScannerFactory_MembersInjector.java:9) at com.estimote.scanning_sdk.dagger.DaggerEstimoteScanningSdkComponent.inject(DaggerEstimoteScanningSdkComponent.java:269) at com.estimote.scanning_sdk.dagger.Dagger$Companion.injectInTo(Dagger.kt:28) at com.estimote.scanning_sdk.api.EstimoteBluetoothScannerFactory.<init>(EstimoteBluetoothScannerFactory.kt:30) at com.estimote.proximity_sdk.dagger.MonitorModule.provideEstimoteBluetoothScannerFactory(MonitorModule.kt:21) at com.estimote.proximity_sdk.dagger.MonitorModule_ProvideEstimoteBluetoothScannerFactoryFactory.get(MonitorModule_ProvideEstimoteBluetoothScannerFactoryFactory.java:24) at com.estimote.proximity_sdk.dagger.MonitorModule_ProvideEstimoteBluetoothScannerFactoryFactory.get(MonitorModule_ProvideEstimoteBluetoothScannerFactoryFactory.java:8) at dagger.internal.DoubleCheck.get(DoubleCheck.java:47) at com.estimote.proximity_sdk.dagger.MonitorModule_ProvideEstimoteMonitorFactory.get(MonitorModule_ProvideEstimoteMonitorFactory.java:42) at com.estimote.proximity_sdk.dagger.MonitorModule_ProvideEstimoteMonitorFactory.get(MonitorModule_ProvideEstimoteMonitorFactory.java:12) at dagger.internal.DoubleCheck.get(DoubleCheck.java:47) at com.estimote.proximity_sdk.dagger.ProximityObserverModule_ProvideEstimoteProximityUseCaseFactory.get(ProximityObserverModule_ProvideEstimoteProximityUseCaseFactory.java:45) at com.estimote.proximity_sdk.dagger.ProximityObserverModule_ProvideEstimoteProximityUseCaseFactory.get(ProximityObserverModule_ProvideEstimoteProximityUseCaseFactory.java:12) at dagger.internal.DoubleCheck.get(DoubleCheck.java:47) at com.estimote.proximity_sdk.dagger.ProximityObserverModule_ProvideProximityObserverFactory.get(ProximityObserverModule_ProvideProximityObserverFactory.java:32) at com.estimote.proximity_sdk.dagger.ProximityObserverModule_ProvideProximityObserverFactory.get(ProximityObserverModule_ProvideProximityObserverFactory.java:10) at dagger.internal.DoubleCheck.get(DoubleCheck.java:47) at com.estimote.proximity_sdk.proximity.ProximityObserverFactory_MembersInjector.injectMembers(ProximityObserverFactory_MembersInjector.java:31) at com.estimote.proximity_sdk.proximity.ProximityObserverFactory_MembersInjector.injectMembers(ProximityObserverFactory_MembersInjector.java:7) at com.estimote.proximity_sdk.dagger.DaggerProximitySdkComponent$ProximityObserverComponentImpl.inject(DaggerProximitySdkComponent.java:182) at com.estimote.proximity_sdk.dagger.Dagger$Companion.injectInTo(Dagger.kt:31) at com.estimote.proximity_sdk.proximity.ProximityObserverFactory.create(ProximityObserverFactory.kt:23) at com.medium.reactnative.estimote.RNEstimoteModule.start(RNEstimoteModule.java:129) at java.lang.reflect.Method.invoke(Method.java) at com.facebook.react.bridge.JavaMethodWrapper.invoke(JavaMethodWrapper.java:374) at com.facebook.react.bridge.JavaModuleWrapper.invoke(JavaModuleWrapper.java:162) at com.facebook.react.bridge.queue.NativeRunnable.run(NativeRunnable.java) at android.os.Handler.handleCallback(Handler.java:751) at android.os.Handler.dispatchMessage(Handler.java:95) at com.facebook.react.bridge.queue.MessageQueueThreadHandler.dispatchMessage(MessageQueueThreadHandler.java:31) at android.os.Looper.loop(Looper.java:154) at com.facebook.react.bridge.queue.MessageQueueThreadImpl$3.run(MessageQueueThreadImpl.java:194) at java.lang.Thread.run(Thread.java:762)

I think you should write a small listener which can activate / desactivate Bluetooth and also shows a popup to the user in order to activate Bluetooth.

Ranging monitoring not working on Android 7.0

Prerequisites

  • [X ] Put an X between the brackets on this line if you have done all of the following:
    • My beacons have Estimote Monitoring enabled (Check it in the Estimote Cloud, or via app)
    • My Android device/devices supports BLE and has Android OS version >= 5.0.0
    • My Android device/devices have bluetooth enabled
    • My app has Location Permissions granted

Basic information

Estimote SDK version: compile 'com.estimote:proximity-sdk:0.4.1'
compile 'com.estimote:sdk:1.0.12'
gardle version 2.8

Android devices affected: [Paste here your Android device model/models that you are having problems with.]
Asus zenfone Max Plus.
Asus_X018D ZB5770TL

Android OS version affected: Android 7.0 nougat

Beacon hardware version: [Paste here your beacons hardware version (you can check that in Estimote Cloud).]

Hardware Version
F3.3

Description

ranging and regions dont work. In older devices and versions of android it works perfectly but in my version it just doesnt work.

  1. Try any ranging. It dont work. Maybe is my configuration and im doing something bad. but is strange since it works on older versions of android correctly.

it never enters: beaconManager.setRangingListener or onEnteredRegion

`apply plugin: 'com.android.application'

android {
compileSdkVersion 27
buildToolsVersion "27.0.2"

defaultConfig {
    applicationId "com.cyclops.pruebaestimote4"
    minSdkVersion 21
    targetSdkVersion 27
    versionCode 4
    versionName "1.3"
    useLibrary 'org.apache.http.legacy'
}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}

}

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'

// add the following line, and replace "1.0.12" with the latest version
// of Estimote Android SDK; you'll find the latest version number on:
//   https://github.com/Estimote/Android-SDK/releases
compile 'com.android.support:appcompat-v7:27.0.2'
compile 'com.android.support:design:27.0.2'
//compile 'com.estimote:proximity-sdk:0.4.1'
compile 'com.estimote:sdk:1.0.12'
compile 'com.android.support:support-v4:27.0.0'
compile 'org.apache.httpcomponents:httpcore:4.4.1'
compile 'org.apache.httpcomponents:httpclient:4.5'

}`

`// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:1.5.0'

    // NOTE: Do not place your application dependencies here; they belong
    // in the individual module build.gradle files
}

}

allprojects {
repositories {
jcenter()
maven {
url "https://maven.google.com"
}
}
}

task clean(type: Delete) {
delete rootProject.buildDir
}
`

Expected behavior: I expect ranging to work correctly in newer versions of android. It works on older versions

Actual behavior: it works once every 2 hours and badly. (not all beacons detected)

Additional information

Add here any logs you want to attach, or any other info, like pictures for example

forAttachmentKeyAndValue("yourKey", "") does not work for me

Prerequisites

  • [X ] Put an X between the brackets on this line if you have done all of the following:
    • My beacons have Estimote Monitoring enabled (Check it in the Estimote Cloud, or via app)
    • My Android device/devices supports BLE and has Android OS version >= 5.0.0
    • My Android device/devices have bluetooth enabled
    • My app has Location Permissions granted

Basic information

Estimote SDK version: 0.2.0

Android devices affected: Tested with an LG G3

Android OS version affected: Oreo 8.0.0

Beacon hardware version: Generc

Description

Hi,

I updated to 0.2.0 and -in parallel- adapted the Beacon Attachment tag in the cloud.
I read the respective changelog:

Deprecated forAttachmentKey("yourKey") when creating ProximityZone. Now you need to use key:value pairs. Using deprecated method will work as calling forAttachmentKeyAndValue("yourKey", "")

That's why I replaced forAttachmentKey("yourKey") with forAttachmentKeyAndValue("yourKey", "").

To cut a long story short: forAttachmentKeyAndValue("yourKey", "") does not work for me. The application starts as usual, but it does not start scanning (without any error). I have to use a non empty value as second parameter (i.e. forAttachmentKeyAndValue("yourKey", "bar")). Knowing this, it's no big issue, but I assume that's not what was originally intended? ;-)

Best regards
Dominic

proximity observer error

Prerequisites

  • Put an X between the brackets on this line if you have done all of the following:
    • My beacons have Estimote Monitoring enabled (Check it in the Estimote Cloud, or via app)
    • My Android device/devices supports BLE and has Android OS version >= 5.0.0
    • My Android device/devices have bluetooth enabled
    • My app has Location Permissions granted

Basic information

Estimote SDK version: 0.5.0

Android devices affected: Samsung Galaxy A3 - 7.0 and HTC 6.0

Android OS version affected: 7.0, 6.0 and 5.1

Beacon hardware version: F3.3

Description

App always crashing in withOnErrorAction method. It says below error.

proximity observer error: com.estimote.proximity_sdk.exception.NoBeaconsForGivenZonesException: No beacons for given attachment/tag values. Make sure you've entered attachment/tag names correctly, your app has network connection available (at least once), and attachments/tags are correctly assigned to your beacons in the Estimote Cloud.

Expected behavior: It should not crash even if its not connected. Also need to know why its not connected with beacons when iOS app is connected with it and working fine on Enter and Exit.

Actual behavior: Not connecting with beacons and app gets crashed.

Additional information

Using JAVA with Android Project not Kotlin

image

No Enter/Exit events received with Beacon attachment feature

Prerequisites

  • [ X] Put an X between the brackets on this line if you have done all of the following:
    • My beacons have Estimote Monitoring enabled (Check it in the Estimote Cloud, or via app)
    • My Android device/devices supports BLE and has Android OS version >= 5.0.0
    • My Android device/devices have bluetooth enabled
    • My app has Location Permissions granted

Basic information

'com.estimote:proximity-sdk:0.1.0-alpha.6'

Estimote SDK version: [Paste here the SDK version that you are using (like 0.1.0-alpha.6)]

Android devices affected:
Samsung S8

Android OS version affected: [Android 7.0]

Beacon hardware version:
Firmware Version 4.9.4
Hardware Version F3.3

Description

I have used sample app on https://github.com/Estimote/Android-Proximity-SDK/tree/master/example/ProximityApp

Updated the code to test for one beacon on which attachement is already set in cloud. After running the app and moving away and near to beacons does not trigger OnExit or OnEnter events.

Is this code up to date ?
(Optional) Steps to reproduce:

Expected behavior: [What you expect to happen]

Actual behavior: [What actually happens]

Additional information

See sample code below

class MainActivity : AppCompatActivity() {

    object MyLogger {
        fun d(message: String) {
            if (BuildConfig.DEBUG) {
                Log.d("TAG", message);
            }
        }
        // other logging methods
    }


    // In order to run this example you need to create an App in your Estimote Cloud account and put here your AppId and AppToken
    // ============cloud credentials are marked with xxxxxxx below for security

    private val cloudCredentials = EstimoteCloudCredentials("xxxxxx", "xxxxxxx")

    // ============

    // Actions to trigger
    private val makeMintDeskFilled: (ProximityAttachment) -> Unit = { _ -> mint_image.reveal() }
    private val makeMintDeskWhite: (ProximityAttachment) -> Unit = { mint_image.collapse() }
    private val makeBlueberryDeskFilled: (ProximityAttachment) -> Unit = { _ -> blueberry_image.reveal() }
    private val makeBlueberryDeskWhite: (ProximityAttachment) -> Unit = { blueberry_image.collapse() }
    private val makeVenueFilled: (ProximityAttachment) -> Unit = { _ -> venue_image.reveal()
        MyLogger.d("Entered Region")
        Toast.makeText(this, "Entered Region", Toast.LENGTH_SHORT).show()
    }
    private val makeVenueWhite: (ProximityAttachment) -> Unit = { venue_image.collapse()
        MyLogger.d("Exited Region")
        Toast.makeText(this, "Exited Region", Toast.LENGTH_SHORT).show()}
    private val displayToastAboutMissingRequirements: (List<Requirement>) -> Unit = { Toast.makeText(this, "Unable to start proximity observation. Requirements not fulfilled: ${it.size}", Toast.LENGTH_SHORT).show() }
    private val displayToastAboutError: (Throwable) -> Unit = { Toast.makeText(this, "Error while trying to start proximity observation: ${it.message}", Toast.LENGTH_SHORT).show() }

    // Notification about pending BLE scanning to display in notification bar
    private lateinit var notification: Notification
    // Estimote's main object for doing proximity observations
    private lateinit var proximityObserver: ProximityObserver
    // Handler to stop the observation. You will get this Handler after starting observation, don't worry.
    private lateinit var proximityObservationHandler: ProximityObserver.Handler

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        // Take a look at NotificationCreator class which handles different OS versions
        notification = NotificationCreator().create(this)
        mint_image.setColor(R.color.mint_cocktail)
        blueberry_image.setColor(R.color.blueberry_muffin)
        venue_image.setColor(R.color.icy_marshmallow)


        RequirementsWizardFactory.createEstimoteRequirementsWizard().fulfillRequirements(
                this,
                onRequirementsFulfilled = { startProximityObservation() },
                onRequirementsMissing =  displayToastAboutMissingRequirements,
                onError = displayToastAboutError

        )
        MyLogger.d("Trace: Oncreate")
    }


    private fun startProximityObservation() {
        proximityObserver = ProximityObserverBuilder(applicationContext, cloudCredentials)
               .withScannerInForegroundService(notification)
                .withLowPowerMode()
                .build()

        MyLogger.d("Trace: In observation")


        val venueZone = proximityObserver.zoneBuilder()
                .forAttachmentKeyAndValue("floor", "1st")
                .inCustomRange(3.0)
                .withOnEnterAction(makeVenueFilled)
                .withOnExitAction(makeVenueWhite)
                .create()
        MyLogger.d("Trace: zone created")


        // Add zones to ProximityObserver and START observation!
        proximityObservationHandler = proximityObserver
                .addProximityZones(venueZone)
                .start()
        MyLogger.d("Trace: started")

    }

    override fun onDestroy() {
        super.onDestroy()

        proximityObservationHandler.stop()
        MyLogger.d("Trace: Destroyed")
    }

}


Bluetooth Low Energy scan failed with error code: 4

Prerequisites

  • [ X] Put an X between the brackets on this line if you have done all of the following:
    • My beacons have Estimote Monitoring enabled (Check it in the Estimote Cloud, or via app)
    • My Android device/devices supports BLE and has Android OS version >= 5.0.0
    • My Android device/devices have bluetooth enabled
    • My app has Location Permissions granted

Basic information

Estimote SDK version: [0.4.1 mustard:0.2.1]

Android devices affected: [Samsung Galaxy J1 Ace, Motorola G5 Play]

Android OS version affected: [Android Lollipop 5.1.1 Api 22, Android Marshmellow 6.0.1]

Beacon hardware version: [F3.3 / Estimote OS 4.13.2]

Description

[When our app start and begans to scan for beacons it crash, see below for log details, if need we have crashlytics info ]

(Optional) Steps to reproduce:

  1. [staring the app]

Expected behavior: [start searching for beacons, zone event should be fired upon a beacon detection, no to crash the app]

Actual behavior: [crash]

Additional information

Might be the same case as issue #37 or at least related

Caused by java.lang.Exception
Bluetooth Low Energy scan failed with error code: 2
arrow_right
com.estimote.scanning_plugin.packet_provider.scanner.PostLollipopEstimoteScanner$scan$1$callback$1.onScanFailed (PostLollipopEstimoteScanner.kt:30)
android.bluetooth.le.BluetoothLeScanner$1.run (BluetoothLeScanner.java:416)
android.os.Handler.handleCallback (Handler.java:746)
android.os.Handler.dispatchMessage (Handler.java:95)
android.os.Looper.loop (Looper.java:148)
android.app.ActivityThread.main (ActivityThread.java:5459)
java.lang.reflect.Method.invoke (Method.java)
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:728)
com.android.internal.os.ZygoteInit.main (ZygoteInit.java:618)


Fatal Exception: io.b.c.f
java.lang.Exception: Bluetooth Low Energy scan failed with error code: 2
io.reactivex.plugins.RxJavaPlugins.onError (RxJavaPlugins.java:349)
io.reactivex.internal.operators.observable.ObservableFlatMap$InnerObserver.onError (ObservableFlatMap.java:573)
io.reactivex.internal.observers.BasicFuseableObserver.onError (BasicFuseableObserver.java:100)
io.reactivex.observers.SerializedObserver.onError (SerializedObserver.java:155)
io.reactivex.internal.operators.observable.ObservableDebounceTimed$DebounceTimedObserver.onError (ObservableDebounceTimed.java:104)
io.reactivex.internal.operators.observable.ObservableRefCount$ConnectionObserver.onError (ObservableRefCount.java:134)
io.reactivex.internal.operators.observable.ObservablePublish$PublishObserver.onError (ObservablePublish.java:184)
io.reactivex.internal.observers.BasicFuseableObserver.onError (BasicFuseableObserver.java:100)
io.reactivex.internal.observers.BasicFuseableObserver.onError (BasicFuseableObserver.java:100)
io.reactivex.internal.operators.observable.ObservableRefCount$ConnectionObserver.onError (ObservableRefCount.java:134)
io.reactivex.internal.operators.observable.ObservablePublish$PublishObserver.onError (ObservablePublish.java:184)
io.reactivex.internal.operators.observable.ObservableCreate$CreateEmitter.tryOnError (ObservableCreate.java:85)
io.reactivex.internal.operators.observable.ObservableCreate$CreateEmitter.onError (ObservableCreate.java:73)
com.estimote.proximity_sdk.monitoring.estimote_monitoring.SimpleEstimoteMonitor$startEstimoteLocationScan$1$2.invoke (SimpleEstimoteMonitor.kt:44)
com.estimote.proximity_sdk.monitoring.estimote_monitoring.SimpleEstimoteMonitor$startEstimoteLocationScan$1$2.invoke (SimpleEstimoteMonitor.kt:16)
com.estimote.scanning_plugin.api.use_cases.ScanUseCase$notifyUserCallbacks$2.accept (ScanUseCase.kt:28)
com.estimote.scanning_plugin.api.use_cases.ScanUseCase$notifyUserCallbacks$2.accept (ScanUseCase.kt:8)
io.reactivex.internal.observers.LambdaObserver.onError (LambdaObserver.java:77)
io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.checkTerminate (ObservableFlatMap.java:495)
io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.drainLoop (ObservableFlatMap.java:331)
io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.drain (ObservableFlatMap.java:323)
io.reactivex.internal.operators.observable.ObservableFlatMap$InnerObserver.onError (ObservableFlatMap.java:571)
io.reactivex.internal.observers.BasicFuseableObserver.onError (BasicFuseableObserver.java:100)
io.reactivex.internal.observers.BasicFuseableObserver.onError (BasicFuseableObserver.java:100)
io.reactivex.internal.observers.BasicFuseableObserver.onError (BasicFuseableObserver.java:100)
io.reactivex.internal.observers.BasicFuseableObserver.onError (BasicFuseableObserver.java:100)
io.reactivex.internal.operators.observable.ObservableCreate$CreateEmitter.tryOnError (ObservableCreate.java:85)
io.reactivex.internal.operators.observable.ObservableCreate$CreateEmitter.onError (ObservableCreate.java:73)
com.estimote.scanning_plugin.packet_provider.scanner.PostLollipopEstimoteScanner$scan$1$callback$1.onScanFailed (PostLollipopEstimoteScanner.kt:30)
android.bluetooth.le.BluetoothLeScanner$1.run (BluetoothLeScanner.java:416)

working with unique identifier instead of the Attachment-based identification

First, great to see some progress on the android SDK. This alpha version of the proximity SDK is already working better than anything before.

For our use case unfortunately the Attachment-based identification would not work. Each of my customer has one beacon and they need to be able to select a beacon from a scan they make.
Is there any way to work with the unique identifier with this SDK?

Many Thanks
Stephan

How to find the Distance between beacon and phone device

Prerequisites

  • Put an X between the brackets on this line if you have done all of the following:
    • My beacons have Estimote Monitoring enabled (Check it in the Estimote Cloud, or via app)
    • My Android device/devices supports BLE and has Android OS version >= 5.0.0
    • My Android device/devices have bluetooth enabled
    • My app has Location Permissions granted

Basic information

Estimote SDK version: [Paste here the SDK version that you are using (like 0.1.0-alpha.6)]

Android devices affected: [Paste here your Android device model/models that you are having problems with.]

Android OS version affected: [Android OS version (ex. Oreo 8.0.0)]

Beacon hardware version: [Paste here your beacons hardware version (you can check that in Estimote Cloud).]

Description

[Description of the issue]

(Optional) Steps to reproduce:

  1. [First Step]
  2. [Second Step]
  3. [and so on...]

Expected behavior: [What you expect to happen]

Actual behavior: [What actually happens]

Additional information

Add here any logs you want to attach, or any other info, like pictures for example

Am using proximity sdk in java code ,i dont know how to find the distance.
In estimote sdk we have RegionUtils.computeAccuracy function but proximity sdk i dont know which method have to call

Restore foreground service after reboot

Prerequisites

  • Put an X between the brackets on this line if you have done all of the following:
    • My beacons have Estimote Monitoring enabled (Check it in the Estimote Cloud, or via app)
    • My Android device/devices supports BLE and has Android OS version >= 5.0.0
    • My Android device/devices have bluetooth enabled
    • My app has Location Permissions granted

Basic information

Estimote SDK version: 0.3.3

Android devices affected: Samsung Galaxy S7

Android OS version affected: all

Beacon hardware version: F3.3

Description

As I already have when I monitor Geofence areas, I need to have the same behavior for Beacons.

Steps to reproduce:

  1. Register background scan service with Foreground Service
  2. Reboot your phone
  3. No more background scan

Expected behavior: The background scan is restored after booting up.

Additional information

As stated in the official guidelines, "silent bluetooth scan" is not allowed. But if you create a class that extends BroadcastReceiver, it might be possible to restore the previously created persistent notification. By doing so, it doesn't seem to be in contradiction with the guidelines.

Can I do by myself with latest SDK? I think it's a little different than the use case described with ProximityTrigger for Android 8.0 Oreo. I don't want to trigger when the app is killed, I "just" want the service to be reactivated.

io.reactivex.exceptions.UndeliverableException: java.lang.Exception: Bluetooth Low Energy scan failed with error code: 2

Hi, I'm getting an error onResume of the App.

`

@Override
    public void onCreate() {

        super.onCreate();
        Log.d(TAG, "Created Proximity Service");
  


        proximityLiveData = new MutableLiveData<>();
        proximityMap = new HashMap<>();


        //Establish Cloud Credentials
        EstimoteCloudCredentials cloudCredentials = new EstimoteCloudCredentials(appId, appToken);
        proximityObserver = new ProximityObserverBuilder(this,cloudCredentials)
                .withOnErrorAction(new Function1<Throwable, Unit>() {
                    @Override
                    public Unit invoke(Throwable throwable) {
                        throwable.printStackTrace();
                        return null;
                    }
                })
                .withBalancedPowerMode()
                .build();


                //Build the location
                proximityZone = proximityObserver.zoneBuilder()
                        .forAttachmentKeyAndValue(location, locationName)//should be a variable
                        .inCustomRange(rangeInMeters)
                        .withOnEnterAction(new Function1<ProximityAttachment, Unit>() {
                            @Override
                            public Unit invoke(ProximityAttachment proximityAttachment) {

                                //Beacon onEnter of set Proximity
                                Log.d(TAG, "Found beacon! " + proximityAttachment.getDeviceId() + proximityAttachment.getPayload());
                                return null;
                            }
                        })
                        .withOnExitAction(new Function1<ProximityAttachment, Unit>() {
                            @Override
                            public Unit invoke(ProximityAttachment proximityAttachment) {
                                Log.d(TAG, "Exiting. " + proximityAttachment.getDeviceId() + proximityAttachment.getPayload());
                                return null;
                            }
                        })
                        .create();
        proximityObserver.addProximityZone(proximityZone);

    }

    @Override
    public void onStart(Intent intent, int startId) {
        super.onStart(intent, startId);
       proximityObserver.start();
    }
`

Main Activity

@Override
   protected void onStart() {

       bindService(serviceIntent,serviceConnection, Context.BIND_AUTO_CREATE);
       boundService = true;
       startService(serviceIntent);

       Log.d(TAG,"Started Main Activity");
       super.onStart();
}

W/System.err: io.reactivex.exceptions.UndeliverableException: java.lang.Exception: Bluetooth Low Energy scan failed with error code: 2 W/System.err: at io.reactivex.plugins.RxJavaPlugins.onError(RxJavaPlugins.java:349) W/System.err: at io.reactivex.internal.operators.observable.ObservableFlatMap$InnerObserver.onError(ObservableFlatMap.java:573) W/System.err: at io.reactivex.internal.observers.BasicFuseableObserver.onError(BasicFuseableObserver.java:100) W/System.err: at io.reactivex.observers.SerializedObserver.onError(SerializedObserver.java:155) W/System.err: at io.reactivex.internal.operators.observable.ObservableDebounceTimed$DebounceTimedObserver.onError(ObservableDebounceTimed.java:104) W/System.err: at io.reactivex.internal.operators.observable.ObservableRefCount$ConnectionObserver.onError(ObservableRefCount.java:134) W/System.err: at io.reactivex.internal.operators.observable.ObservablePublish$PublishObserver.onError(ObservablePublish.java:184) W/System.err: at io.reactivex.internal.observers.BasicFuseableObserver.onError(BasicFuseableObserver.java:100) W/System.err: at io.reactivex.internal.observers.BasicFuseableObserver.onError(BasicFuseableObserver.java:100) W/System.err: at io.reactivex.internal.operators.observable.ObservableRefCount$ConnectionObserver.onError(ObservableRefCount.java:134) W/System.err: at io.reactivex.internal.operators.observable.ObservablePublish$PublishObserver.onError(ObservablePublish.java:184) W/System.err: at io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.checkTerminate(ObservableFlatMap.java:495) W/System.err: at io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.drainLoop(ObservableFlatMap.java:331) W/System.err: at io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.drain(ObservableFlatMap.java:323) W/System.err: at io.reactivex.internal.operators.observable.ObservableFlatMap$InnerObserver.onError(ObservableFlatMap.java:571) W/System.err: at io.reactivex.internal.operators.observable.ObservableCreate$CreateEmitter.tryOnError(ObservableCreate.java:85) W/System.err: at io.reactivex.internal.operators.observable.ObservableCreate$CreateEmitter.onError(ObservableCreate.java:73) W/System.err: at com.estimote.proximity_sdk.monitoring.estimote_monitoring.secure.SecureEstimoteMonitor$mergeWithEstimoteLocationScan$1$2.invoke(SecureEstimoteMonitor.kt:57) W/System.err: at com.estimote.proximity_sdk.monitoring.estimote_monitoring.secure.SecureEstimoteMonitor$mergeWithEstimoteLocationScan$1$2.invoke(SecureEstimoteMonitor.kt:20) W/System.err: at com.estimote.scanning_plugin.api.use_cases.ScanUseCase$notifyUserCallbacks$2.accept(ScanUseCase.kt:28) W/System.err: at com.estimote.scanning_plugin.api.use_cases.ScanUseCase$notifyUserCallbacks$2.accept(ScanUseCase.kt:8) W/System.err: at io.reactivex.internal.observers.LambdaObserver.onError(LambdaObserver.java:77) W/System.err: at io.reactivex.internal.observers.BasicFuseableObserver.onError(BasicFuseableObserver.java:100) I/chatty: uid=10317(liquid_studio.com.indoor_proximity) identical 2 lines W/System.err: at io.reactivex.internal.observers.BasicFuseableObserver.onError(BasicFuseableObserver.java:100) W/System.err: at io.reactivex.internal.operators.observable.ObservableCreate$CreateEmitter.tryOnError(ObservableCreate.java:85) W/System.err: at io.reactivex.internal.operators.observable.ObservableCreate$CreateEmitter.onError(ObservableCreate.java:73) W/System.err: at com.estimote.scanning_plugin.packet_provider.scanner.PostLollipopEstimoteScanner$scan$1$callback$1.onScanFailed(PostLollipopEstimoteScanner.kt:30) W/System.err: at android.bluetooth.le.BluetoothLeScanner$1.run(BluetoothLeScanner.java:547) W/System.err: at android.os.Handler.handleCallback(Handler.java:790) W/System.err: at android.os.Handler.dispatchMessage(Handler.java:99) W/System.err: at android.os.Looper.loop(Looper.java:164) W/System.err: at android.app.ActivityThread.main(ActivityThread.java:6494) W/System.err: at java.lang.reflect.Method.invoke(Native Method) W/System.err: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)

None Stop ParseFrom Byte

Prerequisites

  • Put an X between the brackets on this line if you have done all of the following:
    [x] * My beacons have Estimote Monitoring enabled (Check it in the Estimote Cloud, or via app)
    [x]* My Android device/devices supports BLE and has Android OS version >= 5.0.0
    [x]* My Android device/devices have bluetooth enabled
    [x]* My app has Location Permissions granted

Basic information

Estimote SDK version: [implementation 'com.estimote:proximity-sdk:0.3.2']

Android devices affected: [Samsung (Android 6.0.1 Version API Level 23) ]

Android OS version affected: [Android OS version (ex. Marshmallow 6.0.1)]

Beacon hardware version: [G1.12]

Description

[None Stop ParseFromByte ]

(Optional) Steps to reproduce:

  1. [First Step]
  2. [Second Step]
  3. [and so on...]

Expected behavior: [Send A notification If you enter on beacon zone and exit on beacon zone]

Actual behavior: [None Stop ParseFromByte]

Additional information

Add here any logs you want to attach, or any other info, like pictures for example

this is MY logs
02-27 12:27:33.677 31103-31103/? I/libpersona: KNOX_SDCARD checking this for 10314
02-27 12:27:33.677 31103-31103/? I/libpersona: KNOX_SDCARD not a persona
02-27 12:27:33.677 31103-31103/? E/Zygote: v2
02-27 12:27:33.677 31103-31103/? I/SELinux: Function: selinux_compare_spd_ram, index[1], SPD-policy is existed. and_ver=SEPF_SM-N910G_5.1.1 ver=51
02-27 12:27:33.677 31103-31103/? W/SELinux: Function: selinux_compare_spd_ram, index[1], priority [2], priority version is VE=SEPF_SECMOBILE_6.0.1_0029
02-27 12:27:33.677 31103-31103/? E/Zygote: accessInfo : 0
02-27 12:27:33.677 31103-31103/sg.com.legate.bt001v23 W/SELinux: SELinux: seapp_context_lookup: seinfo=default, level=s0:c512,c768, pkgname=sg.com.legate.bt001v23
02-27 12:27:33.677 31103-31103/sg.com.legate.bt001v23 I/art: Late-enabling -Xcheck:jni
02-27 12:27:33.747 31103-31103/sg.com.legate.bt001v23 D/TimaKeyStoreProvider: TimaSignature is unavailable
02-27 12:27:33.747 31103-31103/sg.com.legate.bt001v23 D/ActivityThread: Added TimaKeyStore provider
02-27 12:27:33.977 31103-31103/sg.com.legate.bt001v23 W/art: Failed execv(/system/bin/dex2oat --runtime-arg -classpath --runtime-arg --debuggable --instruction-set=arm --instruction-set-features=smp,div,atomic_ldrd_strd --runtime-arg -Xrelocate --boot-image=/system/framework/boot.art --runtime-arg -Xms64m --runtime-arg -Xmx512m --instruction-set-variant=krait --instruction-set-features=default --dex-file=/data/app/sg.com.legate.bt001v23-2/split_lib_dependencies_apk.apk --oat-file=/data/dalvik-cache/arm/data@[email protected]@[email protected]) because non-0 exit status
02-27 12:27:34.497 31103-31103/sg.com.legate.bt001v23 W/art: Failed execv(/system/bin/dex2oat --runtime-arg -classpath --runtime-arg --debuggable --instruction-set=arm --instruction-set-features=smp,div,atomic_ldrd_strd --runtime-arg -Xrelocate --boot-image=/system/framework/boot.art --runtime-arg -Xms64m --runtime-arg -Xmx512m --instruction-set-variant=krait --instruction-set-features=default --dex-file=/data/app/sg.com.legate.bt001v23-2/split_lib_slice_0_apk.apk --oat-file=/data/dalvik-cache/arm/data@[email protected]@[email protected]) because non-0 exit status
02-27 12:27:34.567 31103-31103/sg.com.legate.bt001v23 W/art: Failed execv(/system/bin/dex2oat --runtime-arg -classpath --runtime-arg --debuggable --instruction-set=arm --instruction-set-features=smp,div,atomic_ldrd_strd --runtime-arg -Xrelocate --boot-image=/system/framework/boot.art --runtime-arg -Xms64m --runtime-arg -Xmx512m --instruction-set-variant=krait --instruction-set-features=default --dex-file=/data/app/sg.com.legate.bt001v23-2/split_lib_slice_1_apk.apk --oat-file=/data/dalvik-cache/arm/data@[email protected]@[email protected]) because non-0 exit status
02-27 12:27:34.627 31103-31103/sg.com.legate.bt001v23 W/art: Failed execv(/system/bin/dex2oat --runtime-arg -classpath --runtime-arg --debuggable --instruction-set=arm --instruction-set-features=smp,div,atomic_ldrd_strd --runtime-arg -Xrelocate --boot-image=/system/framework/boot.art --runtime-arg -Xms64m --runtime-arg -Xmx512m --instruction-set-variant=krait --instruction-set-features=default --dex-file=/data/app/sg.com.legate.bt001v23-2/split_lib_slice_2_apk.apk --oat-file=/data/dalvik-cache/arm/data@[email protected]@[email protected]) because non-0 exit status
02-27 12:27:34.707 31103-31103/sg.com.legate.bt001v23 W/art: Failed execv(/system/bin/dex2oat --runtime-arg -classpath --runtime-arg --debuggable --instruction-set=arm --instruction-set-features=smp,div,atomic_ldrd_strd --runtime-arg -Xrelocate --boot-image=/system/framework/boot.art --runtime-arg -Xms64m --runtime-arg -Xmx512m --instruction-set-variant=krait --instruction-set-features=default --dex-file=/data/app/sg.com.legate.bt001v23-2/split_lib_slice_3_apk.apk --oat-file=/data/dalvik-cache/arm/data@[email protected]@[email protected]) because non-0 exit status
02-27 12:27:34.787 31103-31103/sg.com.legate.bt001v23 W/art: Failed execv(/system/bin/dex2oat --runtime-arg -classpath --runtime-arg --debuggable --instruction-set=arm --instruction-set-features=smp,div,atomic_ldrd_strd --runtime-arg -Xrelocate --boot-image=/system/framework/boot.art --runtime-arg -Xms64m --runtime-arg -Xmx512m --instruction-set-variant=krait --instruction-set-features=default --dex-file=/data/app/sg.com.legate.bt001v23-2/split_lib_slice_4_apk.apk --oat-file=/data/dalvik-cache/arm/data@[email protected]@[email protected]) because non-0 exit status
02-27 12:27:34.867 31103-31103/sg.com.legate.bt001v23 W/art: Failed execv(/system/bin/dex2oat --runtime-arg -classpath --runtime-arg --debuggable --instruction-set=arm --instruction-set-features=smp,div,atomic_ldrd_strd --runtime-arg -Xrelocate --boot-image=/system/framework/boot.art --runtime-arg -Xms64m --runtime-arg -Xmx512m --instruction-set-variant=krait --instruction-set-features=default --dex-file=/data/app/sg.com.legate.bt001v23-2/split_lib_slice_5_apk.apk --oat-file=/data/dalvik-cache/arm/data@[email protected]@[email protected]) because non-0 exit status
02-27 12:27:34.947 31103-31103/sg.com.legate.bt001v23 W/art: Failed execv(/system/bin/dex2oat --runtime-arg -classpath --runtime-arg --debuggable --instruction-set=arm --instruction-set-features=smp,div,atomic_ldrd_strd --runtime-arg -Xrelocate --boot-image=/system/framework/boot.art --runtime-arg -Xms64m --runtime-arg -Xmx512m --instruction-set-variant=krait --instruction-set-features=default --dex-file=/data/app/sg.com.legate.bt001v23-2/split_lib_slice_6_apk.apk --oat-file=/data/dalvik-cache/arm/data@[email protected]@[email protected]) because non-0 exit status
02-27 12:27:34.997 31103-31103/sg.com.legate.bt001v23 W/art: Failed execv(/system/bin/dex2oat --runtime-arg -classpath --runtime-arg --debuggable --instruction-set=arm --instruction-set-features=smp,div,atomic_ldrd_strd --runtime-arg -Xrelocate --boot-image=/system/framework/boot.art --runtime-arg -Xms64m --runtime-arg -Xmx512m --instruction-set-variant=krait --instruction-set-features=default --dex-file=/data/app/sg.com.legate.bt001v23-2/split_lib_slice_7_apk.apk --oat-file=/data/dalvik-cache/arm/data@[email protected]@[email protected]) because non-0 exit status
02-27 12:27:35.067 31103-31103/sg.com.legate.bt001v23 W/art: Failed execv(/system/bin/dex2oat --runtime-arg -classpath --runtime-arg --debuggable --instruction-set=arm --instruction-set-features=smp,div,atomic_ldrd_strd --runtime-arg -Xrelocate --boot-image=/system/framework/boot.art --runtime-arg -Xms64m --runtime-arg -Xmx512m --instruction-set-variant=krait --instruction-set-features=default --dex-file=/data/app/sg.com.legate.bt001v23-2/split_lib_slice_8_apk.apk --oat-file=/data/dalvik-cache/arm/data@[email protected]@[email protected]) because non-0 exit status
02-27 12:27:35.127 31103-31103/sg.com.legate.bt001v23 W/art: Failed execv(/system/bin/dex2oat --runtime-arg -classpath --runtime-arg --debuggable --instruction-set=arm --instruction-set-features=smp,div,atomic_ldrd_strd --runtime-arg -Xrelocate --boot-image=/system/framework/boot.art --runtime-arg -Xms64m --runtime-arg -Xmx512m --instruction-set-variant=krait --instruction-set-features=default --dex-file=/data/app/sg.com.legate.bt001v23-2/split_lib_slice_9_apk.apk --oat-file=/data/dalvik-cache/arm/data@[email protected]@[email protected]) because non-0 exit status
02-27 12:27:35.137 31103-31103/sg.com.legate.bt001v23 W/System: ClassLoader referenced unknown path: /data/app/sg.com.legate.bt001v23-2/lib/arm
02-27 12:27:35.137 31103-31103/sg.com.legate.bt001v23 I/InstantRun: starting instant run server: is main process
02-27 12:27:35.277 31103-31103/sg.com.legate.bt001v23 W/art: Before Android 4.1, method android.graphics.PorterDuffColorFilter android.support.graphics.drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter, android.content.res.ColorStateList, android.graphics.PorterDuff$Mode) would have incorrectly overridden the package-private method in android.graphics.drawable.Drawable
02-27 12:27:35.467 31103-31103/sg.com.legate.bt001v23 D/TextView: setTypeface with style : 0
02-27 12:27:35.467 31103-31103/sg.com.legate.bt001v23 D/TextView: setTypeface with style : 0
02-27 12:27:35.517 31103-31103/sg.com.legate.bt001v23 D/TextView: setTypeface with style : 0
02-27 12:27:35.537 31103-31103/sg.com.legate.bt001v23 D/TextView: setTypeface with style : 0
02-27 12:27:35.637 31103-31103/sg.com.legate.bt001v23 D/BluetoothAdapter: STATE_ON
02-27 12:27:35.637 31103-31103/sg.com.legate.bt001v23 D/BluetoothAdapter: STATE_ON
02-27 12:27:35.647 31103-31103/sg.com.legate.bt001v23 D/BluetoothAdapter: STATE_ON
02-27 12:27:35.647 31103-31103/sg.com.legate.bt001v23 D/BluetoothAdapter: STATE_ON
02-27 12:27:36.087 31103-31103/sg.com.legate.bt001v23 D/BluetoothLeScanner: Start Scan
02-27 12:27:36.097 31103-31103/sg.com.legate.bt001v23 D/BluetoothAdapter: STATE_ON
02-27 12:27:36.097 31103-31103/sg.com.legate.bt001v23 D/BluetoothAdapter: STATE_ON
02-27 12:27:36.097 31103-31103/sg.com.legate.bt001v23 D/BluetoothAdapter: STATE_ON
02-27 12:27:36.097 31103-31103/sg.com.legate.bt001v23 D/BluetoothAdapter: STATE_ON
02-27 12:27:36.137 31103-31116/sg.com.legate.bt001v23 D/BluetoothLeScanner: onClientRegistered() - status=0 clientIf=9
02-27 12:27:36.147 31103-31103/sg.com.legate.bt001v23 D/BluetoothLeScanner: Start Scan
02-27 12:27:36.157 31103-31103/sg.com.legate.bt001v23 D/BluetoothAdapter: STATE_ON
02-27 12:27:36.157 31103-31103/sg.com.legate.bt001v23 D/BluetoothAdapter: STATE_ON
02-27 12:27:36.157 31103-31103/sg.com.legate.bt001v23 D/BluetoothAdapter: STATE_ON
02-27 12:27:36.157 31103-31103/sg.com.legate.bt001v23 D/BluetoothAdapter: STATE_ON
02-27 12:27:36.207 31103-31241/sg.com.legate.bt001v23 D/BluetoothLeScanner: onClientRegistered() - status=0 clientIf=10
02-27 12:27:36.207 31103-31103/sg.com.legate.bt001v23 D/BluetoothLeScanner: Start Scan
02-27 12:27:36.207 31103-31103/sg.com.legate.bt001v23 D/BluetoothAdapter: STATE_ON
02-27 12:27:36.207 31103-31103/sg.com.legate.bt001v23 D/BluetoothAdapter: STATE_ON
02-27 12:27:36.207 31103-31103/sg.com.legate.bt001v23 D/BluetoothAdapter: STATE_ON
02-27 12:27:36.217 31103-31103/sg.com.legate.bt001v23 D/BluetoothAdapter: STATE_ON
02-27 12:27:36.257 31103-31115/sg.com.legate.bt001v23 D/BluetoothLeScanner: onClientRegistered() - status=0 clientIf=11
02-27 12:27:36.257 31103-31103/sg.com.legate.bt001v23 D/BluetoothLeScanner: Start Scan
02-27 12:27:36.267 31103-31103/sg.com.legate.bt001v23 D/BluetoothAdapter: STATE_ON
02-27 12:27:36.267 31103-31103/sg.com.legate.bt001v23 D/BluetoothAdapter: STATE_ON
02-27 12:27:36.267 31103-31103/sg.com.legate.bt001v23 D/BluetoothAdapter: STATE_ON
02-27 12:27:36.267 31103-31103/sg.com.legate.bt001v23 D/BluetoothAdapter: STATE_ON
02-27 12:27:36.307 31103-31116/sg.com.legate.bt001v23 D/BluetoothLeScanner: onClientRegistered() - status=0 clientIf=12
02-27 12:27:36.317 31103-31103/sg.com.legate.bt001v23 D/BluetoothLeScanner: Start Scan
02-27 12:27:36.317 31103-31103/sg.com.legate.bt001v23 D/BluetoothAdapter: STATE_ON
02-27 12:27:36.317 31103-31103/sg.com.legate.bt001v23 D/BluetoothAdapter: STATE_ON
02-27 12:27:36.317 31103-31103/sg.com.legate.bt001v23 D/BluetoothAdapter: STATE_ON
02-27 12:27:36.317 31103-31103/sg.com.legate.bt001v23 D/BluetoothAdapter: STATE_ON
02-27 12:27:36.357 31103-31203/sg.com.legate.bt001v23 D/BluetoothLeScanner: onClientRegistered() - status=0 clientIf=13
02-27 12:27:36.367 31103-31103/sg.com.legate.bt001v23 D/BluetoothLeScanner: Start Scan
02-27 12:27:36.367 31103-31103/sg.com.legate.bt001v23 D/BluetoothAdapter: STATE_ON
02-27 12:27:36.367 31103-31103/sg.com.legate.bt001v23 D/BluetoothAdapter: STATE_ON
02-27 12:27:36.367 31103-31103/sg.com.legate.bt001v23 D/BluetoothAdapter: STATE_ON
02-27 12:27:36.367 31103-31103/sg.com.legate.bt001v23 D/BluetoothAdapter: STATE_ON
02-27 12:27:36.407 31103-31241/sg.com.legate.bt001v23 D/BluetoothLeScanner: onClientRegistered() - status=0 clientIf=14
02-27 12:27:36.547 31103-31103/sg.com.legate.bt001v23 D/BluetoothLeScanner: Start Scan
02-27 12:27:36.547 31103-31103/sg.com.legate.bt001v23 D/BluetoothAdapter: STATE_ON
02-27 12:27:36.547 31103-31103/sg.com.legate.bt001v23 D/BluetoothAdapter: STATE_ON
02-27 12:27:36.547 31103-31103/sg.com.legate.bt001v23 D/BluetoothAdapter: STATE_ON
02-27 12:27:36.547 31103-31103/sg.com.legate.bt001v23 D/BluetoothAdapter: STATE_ON
02-27 12:27:36.587 31103-31115/sg.com.legate.bt001v23 D/BluetoothLeScanner: onClientRegistered() - status=0 clientIf=15
02-27 12:27:36.687 31103-31103/sg.com.legate.bt001v23 D/SecWifiDisplayUtil: Metadata value : none
02-27 12:27:36.687 31103-31103/sg.com.legate.bt001v23 D/ViewRootImpl: #1 mView = com.android.internal.policy.PhoneWindow$DecorView{5c354e I.E...... R.....ID 0,0-0,0}
02-27 12:27:36.687 31103-31330/sg.com.legate.bt001v23 D/OpenGLRenderer: Use EGL_SWAP_BEHAVIOR_PRESERVED: true
02-27 12:27:36.697 31103-31103/sg.com.legate.bt001v23 D/ViewRootImpl: #1 mView = android.widget.LinearLayout{7d4a66f V.E...... ......I. 0,0-0,0}
02-27 12:27:36.797 31103-31330/sg.com.legate.bt001v23 I/Adreno: QUALCOMM build : d842ad3, Ia10634f51b
Build Date : 01/04/16
OpenGL ES Shader Compiler Version: XE031.06.00.05
Local Branch : mybranch17578993
Remote Branch : quic/LA.BF.2.1.2_rb1.7
Remote Branch : NONE
Reconstruct Branch : NOTHING
02-27 12:27:36.797 31103-31330/sg.com.legate.bt001v23 D/libEGL: eglInitialize EGLDisplay = 0x9ef797c4
02-27 12:27:36.797 31103-31330/sg.com.legate.bt001v23 I/OpenGLRenderer: Initialized EGL, version 1.4
02-27 12:27:36.877 31103-31103/sg.com.legate.bt001v23 W/art: Before Android 4.1, method int android.support.v7.widget.ListViewCompat.lookForSelectablePosition(int, boolean) would have incorrectly overridden the package-private method in android.widget.ListView
02-27 12:27:36.887 31103-31103/sg.com.legate.bt001v23 D/ViewRootImpl: MSG_RESIZED_REPORT: ci=Rect(0, 96 - 0, 0) vi=Rect(0, 96 - 0, 0) or=1
02-27 12:27:36.897 31103-31103/sg.com.legate.bt001v23 W/DisplayListCanvas: DisplayListCanvas is started on unbinded RenderNode (without mOwningView)
02-27 12:27:36.897 31103-31330/sg.com.legate.bt001v23 D/libGLESv1: DTS_GLAPI : DTS is not allowed for Package : sg.com.legate.bt001v23
02-27 12:27:36.967 31103-31103/sg.com.legate.bt001v23 W/DisplayListCanvas: DisplayListCanvas is started on unbinded RenderNode (without mOwningView)
02-27 12:27:37.007 31103-31330/sg.com.legate.bt001v23 V/RenderScript: 0x9d931000 Launching thread(s), CPUs 4
02-27 12:27:37.017 31103-31103/sg.com.legate.bt001v23 D/ViewRootImpl: MSG_RESIZED_REPORT: ci=Rect(0, 0 - 0, 0) vi=Rect(0, 0 - 0, 0) or=1
02-27 12:27:37.017 31103-31103/sg.com.legate.bt001v23 I/Timeline: Timeline: Activity_idle id: android.os.BinderProxy@aa5c13 time:20117546
02-27 12:27:37.557 31103-31103/sg.com.legate.bt001v23 D/ViewRootImpl: #3 mView = null
02-27 12:27:38.097 31103-31103/sg.com.legate.bt001v23 D/ProximityAnalytics: Reporting start monitoring for a48885a7e4cee8ef1d4888bc964c1232
02-27 12:27:38.147 31103-31367/sg.com.legate.bt001v23 D/BluetoothLeScanner: Start Scan
02-27 12:27:38.157 31103-31367/sg.com.legate.bt001v23 D/BluetoothAdapter: STATE_ON
02-27 12:27:38.157 31103-31367/sg.com.legate.bt001v23 D/BluetoothAdapter: STATE_ON
02-27 12:27:38.157 31103-31367/sg.com.legate.bt001v23 D/BluetoothAdapter: STATE_ON
02-27 12:27:38.157 31103-31367/sg.com.legate.bt001v23 D/BluetoothAdapter: STATE_ON
02-27 12:27:38.197 31103-31241/sg.com.legate.bt001v23 D/BluetoothLeScanner: onClientRegistered() - status=0 clientIf=16
02-27 12:27:38.207 31103-31367/sg.com.legate.bt001v23 D/BluetoothLeScanner: Start Scan
02-27 12:27:38.207 31103-31367/sg.com.legate.bt001v23 D/BluetoothAdapter: STATE_ON
02-27 12:27:38.207 31103-31367/sg.com.legate.bt001v23 D/BluetoothAdapter: STATE_ON
02-27 12:27:38.207 31103-31367/sg.com.legate.bt001v23 D/BluetoothAdapter: STATE_ON
02-27 12:27:38.207 31103-31367/sg.com.legate.bt001v23 D/BluetoothAdapter: STATE_ON
02-27 12:27:38.257 31103-31203/sg.com.legate.bt001v23 D/BluetoothLeScanner: onClientRegistered() - status=0 clientIf=17
02-27 12:27:39.277 31103-31116/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:39.287 31103-31370/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:39.287 31103-31203/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:39.287 31103-31203/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:39.287 31103-31203/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:39.287 31103-31203/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:39.287 31103-31203/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:39.287 31103-31203/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:39.287 31103-31203/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:39.287 31103-31203/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:39.287 31103-31203/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:39.287 31103-31203/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:39.287 31103-31203/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:39.287 31103-31203/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:39.287 31103-31370/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:39.287 31103-31116/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:39.287 31103-31116/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:39.287 31103-31116/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:39.497 31103-31103/sg.com.legate.bt001v23 D/ProximitySDK: Sent usage metrics of one id.
02-27 12:27:40.287 31103-31116/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:40.287 31103-31115/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:40.287 31103-31115/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:40.287 31103-31203/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:40.287 31103-31203/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:40.287 31103-31203/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:40.287 31103-31116/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:40.287 31103-31203/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:40.287 31103-31116/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:40.287 31103-31203/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:40.287 31103-31203/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:40.287 31103-31203/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:40.287 31103-31203/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:42.297 31103-31116/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:42.297 31103-31370/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:42.297 31103-31370/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:42.297 31103-31379/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:42.297 31103-31379/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:42.297 31103-31379/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:42.297 31103-31379/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:42.297 31103-31116/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:43.307 31103-31115/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:43.307 31103-31241/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:43.307 31103-31241/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:43.307 31103-31379/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:43.307 31103-31379/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:43.307 31103-31379/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:43.307 31103-31379/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:43.307 31103-31379/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:43.307 31103-31115/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:47.977 31103-31115/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:47.977 31103-31115/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:47.977 31103-31115/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:47.987 31103-31115/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:47.987 31103-31115/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:47.987 31103-31370/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:47.987 31103-31370/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:47.987 31103-31370/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:47.987 31103-31370/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:47.987 31103-31370/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:47.987 31103-31370/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:47.987 31103-31370/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:47.987 31103-31370/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:47.987 31103-31370/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:47.987 31103-31370/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:47.987 31103-31370/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:47.987 31103-31370/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:48.897 31103-31370/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:48.897 31103-31370/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:48.897 31103-31370/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:48.897 31103-31370/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:48.897 31103-31370/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:48.897 31103-31370/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:48.897 31103-31203/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:48.897 31103-31203/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:48.897 31103-31203/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:48.897 31103-31241/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:48.897 31103-31241/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:48.897 31103-31241/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:48.897 31103-31241/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:48.897 31103-31241/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:48.897 31103-31241/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:48.897 31103-31241/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:48.897 31103-31241/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:48.897 31103-31241/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:48.897 31103-31241/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:48.897 31103-31241/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:48.897 31103-31241/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:48.897 31103-31241/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:49.917 31103-31203/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:49.917 31103-31203/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:49.917 31103-31203/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:49.917 31103-31116/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:49.917 31103-31116/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:49.917 31103-31116/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:49.917 31103-31116/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:49.917 31103-31116/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:49.917 31103-31203/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:52.337 31103-31379/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:52.337 31103-31379/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:52.337 31103-31379/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:52.337 31103-31116/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:52.337 31103-31379/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:52.337 31103-31116/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:52.337 31103-31379/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:52.337 31103-31379/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:52.337 31103-31379/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:52.337 31103-31379/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:52.337 31103-31379/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:52.337 31103-31379/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:53.347 31103-31115/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:53.347 31103-31115/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:53.347 31103-31370/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:53.347 31103-31370/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:53.347 31103-31370/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:53.347 31103-31370/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:53.347 31103-31370/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:53.347 31103-31370/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:53.347 31103-31370/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:57.657 31103-31203/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:57.657 31103-31203/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:57.657 31103-31203/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:57.657 31103-31241/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:57.657 31103-31241/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:57.667 31103-31115/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:57.667 31103-31115/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:57.667 31103-31115/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:57.667 31103-31115/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:27:57.667 31103-31115/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:02.717 31103-31116/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:02.717 31103-31241/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:02.717 31103-31241/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:02.717 31103-31115/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:02.717 31103-31115/sg.com.legate.bt001v23 D/ScanRecord: first manudata for manu ID
02-27 12:28:02.717 31103-31115/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:02.717 31103-31115/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:02.717 31103-31115/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:02.717 31103-31115/sg.com.legate.bt001v23 D/ScanRecord: first manudata for manu ID
02-27 12:28:02.717 31103-31115/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:02.717 31103-31115/sg.com.legate.bt001v23 D/ScanRecord: first manudata for manu ID
02-27 12:28:02.717 31103-31115/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:02.717 31103-31115/sg.com.legate.bt001v23 D/ScanRecord: first manudata for manu ID
02-27 12:28:02.717 31103-31115/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:02.717 31103-31115/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:02.717 31103-31115/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:02.717 31103-31115/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:02.717 31103-31116/sg.com.legate.bt001v23 D/ScanRecord: first manudata for manu ID
02-27 12:28:02.717 31103-31116/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:02.717 31103-31116/sg.com.legate.bt001v23 D/ScanRecord: first manudata for manu ID
02-27 12:28:02.717 31103-31116/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:02.717 31103-31116/sg.com.legate.bt001v23 D/ScanRecord: first manudata for manu ID
02-27 12:28:02.717 31103-31116/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:02.717 31103-31116/sg.com.legate.bt001v23 D/ScanRecord: first manudata for manu ID
02-27 12:28:02.717 31103-31116/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:02.717 31103-31116/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:03.577 31103-31241/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:03.577 31103-31241/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:03.577 31103-31241/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:03.577 31103-31241/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:03.577 31103-31241/sg.com.legate.bt001v23 D/ScanRecord: first manudata for manu ID
02-27 12:28:03.577 31103-31370/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:03.577 31103-31203/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:03.577 31103-31203/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:03.577 31103-31370/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:03.577 31103-31203/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:03.577 31103-31203/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:03.577 31103-31203/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:03.577 31103-31203/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:03.577 31103-31203/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:03.577 31103-31203/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:03.577 31103-31203/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:03.577 31103-31203/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:03.577 31103-31203/sg.com.legate.bt001v23 D/ScanRecord: first manudata for manu ID
02-27 12:28:03.697 31103-31116/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:03.697 31103-31116/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:03.697 31103-31116/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:04.717 31103-31116/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:04.717 31103-31116/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:04.717 31103-31116/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:04.717 31103-31370/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:04.717 31103-31370/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:04.717 31103-31370/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:04.717 31103-31370/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:04.717 31103-31370/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:04.717 31103-31370/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:04.717 31103-31370/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:04.717 31103-31370/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:04.717 31103-31370/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:04.717 31103-31370/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:04.717 31103-31370/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:07.857 31103-31103/sg.com.legate.bt001v23 V/ActivityThread: updateVisibility : ActivityRecord{5bf52ca token=android.os.BinderProxy@aa5c13 {sg.com.legate.bt001v23/sg.com.legate.bt001v23.MainActivity}} show : true
02-27 12:28:07.897 31103-31487/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:07.897 31103-31115/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:07.897 31103-31487/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:07.897 31103-31115/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:07.897 31103-31241/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:07.897 31103-31241/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:07.907 31103-31241/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:07.907 31103-31241/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:07.907 31103-31241/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:07.907 31103-31241/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:08.537 31103-31103/sg.com.legate.bt001v23 V/ActivityThread: updateVisibility : ActivityRecord{5bf52ca token=android.os.BinderProxy@aa5c13 {sg.com.legate.bt001v23/sg.com.legate.bt001v23.MainActivity}} show : false
02-27 12:28:09.977 31103-31203/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:13.457 31103-31379/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:13.457 31103-31370/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:13.457 31103-31487/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:13.457 31103-31487/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:13.457 31103-31487/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:13.457 31103-31379/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:13.457 31103-31379/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:15.497 31103-31370/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:15.497 31103-31370/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:15.497 31103-31203/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:15.497 31103-31487/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:15.497 31103-31487/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:15.497 31103-31203/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:17.567 31103-31203/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:17.567 31103-31203/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:17.567 31103-31203/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:17.567 31103-31203/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:17.577 31103-31115/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:17.577 31103-31115/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:17.577 31103-31487/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:17.577 31103-31487/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:17.577 31103-31487/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:17.577 31103-31487/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:17.577 31103-31487/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:17.577 31103-31487/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:17.577 31103-31487/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:17.577 31103-31487/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:18.597 31103-31487/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:18.597 31103-31487/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:18.597 31103-31487/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:18.597 31103-31370/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:18.597 31103-31370/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:18.597 31103-31203/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:18.597 31103-31203/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:18.597 31103-31203/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:18.597 31103-31203/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:18.597 31103-31203/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:18.597 31103-31203/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:18.597 31103-31203/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:18.597 31103-31203/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:18.597 31103-31203/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:18.597 31103-31203/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:18.597 31103-31203/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:19.707 31103-31203/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:19.707 31103-31203/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:19.707 31103-31203/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:19.707 31103-31203/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:19.707 31103-31203/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:19.707 31103-31487/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:19.707 31103-31203/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:19.707 31103-31487/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:19.707 31103-31487/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:19.707 31103-31487/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:19.707 31103-31487/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:19.707 31103-31487/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:25.197 31103-31370/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:25.207 31103-31379/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:25.207 31103-31115/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:28.267 31103-31379/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:28.267 31103-31203/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:28.267 31103-31115/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:28.267 31103-31115/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:28.277 31103-31379/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:28.277 31103-31203/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:31.427 31103-31116/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:31.427 31103-31116/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:31.437 31103-31241/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:31.437 31103-31241/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:31.437 31103-31370/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:31.437 31103-31370/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:32.457 31103-31241/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:32.467 31103-31241/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:32.467 31103-31241/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:32.467 31103-31115/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:32.467 31103-31115/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:32.467 31103-31203/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:32.467 31103-31203/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:32.467 31103-31203/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:32.467 31103-31203/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:32.467 31103-31203/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:32.467 31103-31203/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:33.467 31103-31241/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:33.467 31103-31116/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:33.467 31103-31116/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:33.467 31103-31241/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:33.467 31103-31241/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:33.467 31103-31241/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:33.467 31103-31370/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:33.467 31103-31370/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:33.467 31103-31370/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:33.467 31103-31370/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:33.467 31103-31370/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:33.467 31103-31370/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:33.467 31103-31370/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:33.477 31103-31370/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:33.477 31103-31370/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:33.477 31103-31370/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:33.477 31103-31370/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:33.477 31103-31370/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:33.477 31103-31370/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:34.527 31103-31241/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:34.527 31103-31241/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:34.527 31103-31241/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:34.527 31103-31241/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:34.527 31103-31241/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:34.527 31103-31379/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:34.527 31103-31379/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:34.537 31103-31379/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:34.537 31103-31379/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:34.537 31103-31203/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:34.537 31103-31203/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:34.537 31103-31203/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:34.537 31103-31203/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:34.537 31103-31203/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:34.547 31103-31203/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:34.547 31103-31203/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:37.887 31103-31379/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:37.887 31103-31379/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:37.887 31103-31370/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:37.887 31103-31370/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:37.887 31103-31370/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:37.887 31103-31370/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:40.947 31103-31487/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:40.947 31103-31203/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:40.947 31103-31116/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:43.627 31103-31103/sg.com.legate.bt001v23 I/Timeline: Timeline: Activity_idle id: android.os.BinderProxy@aa5c13 time:20184154
02-27 12:28:43.997 31103-31370/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:44.007 31103-31203/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:44.007 31103-31203/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:44.007 31103-31487/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:44.007 31103-31487/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:44.007 31103-31370/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:47.957 31103-31487/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:47.957 31103-31487/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:47.957 31103-31487/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:47.957 31103-31487/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:47.957 31103-31487/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:47.957 31103-31487/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:47.957 31103-31487/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:47.957 31103-31487/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:47.967 31103-31487/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:47.967 31103-31487/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:47.967 31103-31487/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:48.507 31103-31241/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:48.507 31103-31241/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:48.507 31103-31241/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:48.507 31103-31241/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:48.507 31103-31241/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:49.547 31103-31379/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:49.547 31103-31379/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:49.547 31103-31379/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:49.547 31103-31379/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:49.547 31103-31379/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:28:49.547 31103-31379/sg.com.legate.bt001v23 D/ScanRecord: parseFromBytes
02-27 12:29:13.537 31103-31103/sg.com.legate.bt001v23 V/ActivityThread: updateVisibility : ActivityRecord{5bf52ca token=android.os.BinderProxy@aa5c13 {sg.com.legate.bt001v23/sg.com.legate.bt001v23.MainActivity}} show : true
02-27 12:29:14.267 31103-31103/sg.com.legate.bt001v23 V/ActivityThread: updateVisibility : ActivityRecord{5bf52ca token=android.os.BinderProxy@aa5c13 {sg.com.legate.bt001v23/sg.com.legate.bt001v23.MainActivity}} show : false
02-27 12:31:58.197 31103-31103/sg.com.legate.bt001v23 I/Timeline: Timeline: Activity_idle id: android.os.BinderProxy@aa5c13 time:20378728
02-27 12:31:59.207 31103-31103/sg.com.legate.bt001v23 D/ViewRootImpl: ViewPostImeInputStage processPointer 0
02-27 12:31:59.267 31103-31103/sg.com.legate.bt001v23 D/ViewRootImpl: ViewPostImeInputStage processPointer 1

Exception No interface method getDeviceIdToProximityAttachmentMapping

Prerequisites

  • Put an X between the brackets on this line if you have done all of the following:
    • My beacons have Estimote Monitoring enabled (Check it in the Estimote Cloud, or via app)
    • My Android device/devices supports BLE and has Android OS version >= 5.0.0
    • My Android device/devices have bluetooth enabled
    • My app has Location Permissions granted

Basic information

Estimote SDK version: implementation 'com.estimote:proximity-sdk:0.2.2'

Android devices affected: Huawei P8 lite 2017

Android OS version affected: Android 7

Beacon hardware version: F3.3

Description

hi,
I'm developing an application with estimote proximity sdk.
I just copied and pasted the example described here: https://github.com/Estimote/Android-Proximity-SDK
When the ProximityObserver starts it throws the following exception:

java.lang.NoSuchMethodError: No interface method getDeviceIdToProximityAttachmentMapping(Ljava/util/List;)Lio/reactivex/Single; in class Lcom/estimote/internal_plugins_api/cloud/proximity/ProximityCloud; or its super classes (declaration of 'com.estimote.internal_plugins_api.cloud.proximity.ProximityCloud' appears in /data/app/hiis.isti.cnr.it.estimoteproximitydelegate-2/split_lib_dependencies_apk.apk)

java.lang.NoSuchMethodError: No interface method getDeviceIdToProximityAttachmentMapping(Ljava/util/List;)Lio/reactivex/Single; in class Lcom/estimote/internal_plugins_api/cloud/proximity/ProximityCloud; or its super classes (declaration of 'com.estimote.internal_plugins_api.cloud.proximity.ProximityCloud' appears in /data/app/hiis.isti.cnr.it.estimotedelegate-2/split_lib_dependencies_apk.apk)
at com.estimote.proximity_sdk.proximity.mapping.CloudOnlyAttachmentMappingProvider.provideAttachmentMapping(CloudOnlyAttachmentMappingProvider.kt:11)
at com.estimote.proximity_sdk.proximity.ProximityObservationUseCase.run(ProximityObservationUseCase.kt:23)
at com.estimote.proximity_sdk.proximity.EstimoteProximityObserver.start(EstimoteProximityObserver.kt:28)
at com.estimote.proximity_sdk.telemetry_reporter.TelemetryProximityObserverWrapper.start(TelemetryProximityObserverWrapper.kt:31)
at hiis.isti.cnr.it.estimotedelegate.MainActivity$4.invoke(MainActivity.java:80)
at hiis.isti.cnr.it.estimotedelegate.MainActivity$4.invoke(MainActivity.java:77)
at com.estimote.mustard.rx_goodness.rx_requirements_wizard.EstimoteRequirementsWizard$notifyCallbacks$1.accept(EstimoteRequirementsWizard.kt:43)
at com.estimote.mustard.rx_goodness.rx_requirements_wizard.EstimoteRequirementsWizard$notifyCallbacks$1.accept(EstimoteRequirementsWizard.kt:10)
at io.reactivex.internal.observers.ConsumerSingleObserver.onSuccess(ConsumerSingleObserver.java:63)
at io.reactivex.internal.operators.single.SingleFlatMap$SingleFlatMapCallback$FlatMapSingleObserver.onSuccess(SingleFlatMap.java:111)
at io.reactivex.internal.operators.single.SingleMap$MapSingleObserver.onSuccess(SingleMap.java:64)
at io.reactivex.internal.operators.single.SingleJust.subscribeActual(SingleJust.java:30)
at io.reactivex.Single.subscribe(Single.java:2707)
at io.reactivex.internal.operators.single.SingleMap.subscribeActual(SingleMap.java:34)
at io.reactivex.Single.subscribe(Single.java:2707)
at io.reactivex.internal.operators.single.SingleFlatMap$SingleFlatMapCallback.onSuccess(SingleFlatMap.java:84)
at io.reactivex.internal.operators.single.SingleFlatMap$SingleFlatMapCallback$FlatMapSingleObserver.onSuccess(SingleFlatMap.java:111)
at io.reactivex.internal.operators.single.SingleMap$MapSingleObserver.onSuccess(SingleMap.java:64)
at io.reactivex.internal.operators.single.SingleJust.subscribeActual(SingleJust.java:30)
at io.reactivex.Single.subscribe(Single.java:2707)
at io.reactivex.internal.operators.single.SingleMap.subscribeActual(SingleMap.java:34)
at io.reactivex.Single.subscribe(Single.java:2707)
at io.reactivex.internal.operators.single.SingleFlatMap$SingleFlatMapCallback.onSuccess(SingleFlatMap.java:84)
at io.reactivex.internal.operators.single.SingleMap$MapSingleObserver.onSuccess(SingleMap.java:64)
at io.reactivex.internal.operators.single.SingleJust.subscribeActual(SingleJust.java:30)
at io.reactivex.Single.subscribe(Single.java:2707)
at io.reactivex.internal.operators.single.SingleMap.subscribeActual(SingleMap.java:34)
at io.reactivex.Single.subscribe(Single.java:2707)
at io.reactivex.internal.operators.single.SingleFlatMap.subscribeActual(SingleFlatMap.java:36)
at io.reactivex.Single.subscribe(Single.java:2707)
at io.reactivex.internal.operators.single.SingleFlatMap.subscribeActual(SingleFlatMap.java:36)
at io.reactivex.Single.subscribe(Single.java:2707)
at io.reactivex.Single.subscribe(Single.java:2693)
at com.estimote.mustard.rx_goodness.rx_requirements_wizard.EstimoteRequirementsWizard.notifyCallbacks(EstimoteRequirementsWizard.kt:41)
at com.estimote.mustard.rx_goodness.rx_requirements_wizard.EstimoteRequirementsWizard.fulfillRequirements(EstimoteRequirementsWizard.kt:22)
at hiis.isti.cnr.it.estimotedelegate.MainActivity.onCreate(MainActivity.java:77)
at android.app.Activity.performCreate(Activity.java:6910)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1123)
E/AndroidRuntime: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2746)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2864)
at android.app.ActivityThread.-wrap12(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1567)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:156)
at android.app.ActivityThread.main(ActivityThread.java:6523)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:942)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:832)

Can anyone knows which is the problem?

Thanks

Marco

Scan while app in background

Prerequisites

  • done all of the following:
    • My beacons have Estimote Monitoring enabled (Check it in the Estimote Cloud, or via app)
    • My Android device/devices supports BLE and has Android OS version >= 5.0.0
    • My Android device/devices have bluetooth enabled
    • My app has Location Permissions granted

Basic information

Estimote SDK version: 1.4.0

Android devices affected:
1- Pixle 2 XL
2- Galaxy S6

Android OS version affected:
1- Oreo 8.1.0
2- Nougat 7.0

Beacon hardware version: G1.12

Description

I used Estimote SDK & Procimity SDK for searching for the beacons, and all is working well.

I was wondering if there's a way to keep the monitoring live even if the app is killed (without using foreground notification) as I need to trigger API call once I found the Beacon

How to handle Stopping monitoring

I get this error when I am monitoring but then call stop monitoring on the sdk.
It shows me a error as below:

Throwale for zones Monitoring stopped while being inside one of the zones. From now on it is impossible to tell when the user exits the zone. You should handle this case properly in your App logic.

Q: how to handle this case properly. I don' t see any method calls to exit a zone manually in code or tell something that the app stopped.

io.reactivex.exceptions.UndeliverableException: java.lang.Exception: Bluetooth Low Energy scan failed with error code: 2

Hi, I'm getting an error onResume of the App.

Android 8.0
Pixel XL
implementation 'com.estimote:proximity-sdk:0.4.1'

@Override
    public void onCreate() {

        super.onCreate();
        Log.d(TAG, "Created Proximity Service");
  


        proximityLiveData = new MutableLiveData<>();
        proximityMap = new HashMap<>();


        //Establish Cloud Credentials
        EstimoteCloudCredentials cloudCredentials = new EstimoteCloudCredentials(appId, appToken);
        proximityObserver = new ProximityObserverBuilder(this,cloudCredentials)
                .withOnErrorAction(new Function1<Throwable, Unit>() {
                    @Override
                    public Unit invoke(Throwable throwable) {
                        throwable.printStackTrace();
                        return null;
                    }
                })
                .withBalancedPowerMode()
                .build();


                //Build the location
                proximityZone = proximityObserver.zoneBuilder()
                        .forAttachmentKeyAndValue(location, locationName)//should be a variable
                        .inCustomRange(rangeInMeters)
                        .withOnEnterAction(new Function1<ProximityAttachment, Unit>() {
                            @Override
                            public Unit invoke(ProximityAttachment proximityAttachment) {

                                //Beacon onEnter of set Proximity
                                Log.d(TAG, "Found beacon! " + proximityAttachment.getDeviceId() + proximityAttachment.getPayload());
                                return null;
                            }
                        })
                        .withOnExitAction(new Function1<ProximityAttachment, Unit>() {
                            @Override
                            public Unit invoke(ProximityAttachment proximityAttachment) {
                                Log.d(TAG, "Exiting. " + proximityAttachment.getDeviceId() + proximityAttachment.getPayload());
                                return null;
                            }
                        })
                        .create();
        proximityObserver.addProximityZone(proximityZone);

    }

    @Override
    public void onStart(Intent intent, int startId) {
        super.onStart(intent, startId);
       proximityObserver.start();
    }
`

Main Activity

@Override
   protected void onStart() {

       bindService(serviceIntent,serviceConnection, Context.BIND_AUTO_CREATE);
       boundService = true;
       startService(serviceIntent);

       Log.d(TAG,"Started Main Activity");
       super.onStart();
}

`W/System.err: io.reactivex.exceptions.UndeliverableException: java.lang.Exception: Bluetooth Low Energy scan failed with error code: 2
W/System.err:     at io.reactivex.plugins.RxJavaPlugins.onError(RxJavaPlugins.java:349)
W/System.err:     at io.reactivex.internal.operators.observable.ObservableFlatMap$InnerObserver.onError(ObservableFlatMap.java:573)
W/System.err:     at io.reactivex.internal.observers.BasicFuseableObserver.onError(BasicFuseableObserver.java:100)
W/System.err:     at io.reactivex.observers.SerializedObserver.onError(SerializedObserver.java:155)
W/System.err:     at io.reactivex.internal.operators.observable.ObservableDebounceTimed$DebounceTimedObserver.onError(ObservableDebounceTimed.java:104)
W/System.err:     at io.reactivex.internal.operators.observable.ObservableRefCount$ConnectionObserver.onError(ObservableRefCount.java:134)
W/System.err:     at io.reactivex.internal.operators.observable.ObservablePublish$PublishObserver.onError(ObservablePublish.java:184)
W/System.err:     at io.reactivex.internal.observers.BasicFuseableObserver.onError(BasicFuseableObserver.java:100)
W/System.err:     at io.reactivex.internal.observers.BasicFuseableObserver.onError(BasicFuseableObserver.java:100)
W/System.err:     at io.reactivex.internal.operators.observable.ObservableRefCount$ConnectionObserver.onError(ObservableRefCount.java:134)
W/System.err:     at `io.reactivex.internal.operators.observable.ObservablePublish$PublishObserver.onError(ObservablePublish.java:184)`
W/System.err:     at io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.checkTerminate(ObservableFlatMap.java:495)
W/System.err:     at io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.drainLoop(ObservableFlatMap.java:331)
W/System.err:     at io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.drain(ObservableFlatMap.java:323)
W/System.err:     at io.reactivex.internal.operators.observable.ObservableFlatMap$InnerObserver.onError(ObservableFlatMap.java:571)
W/System.err:     at

UPDATE:
Was able to avoid this using a boolean for a Running observer.

  @Override
    public void onStart(Intent intent, int startId) {
        super.onStart(intent, startId);
        if (!observing){
            observationHandler = proximityObserver.start();
            observing = true;
        }
    }

Access Beacon Identifier

Hello,
I'm working on an android app that uses beacons and need to get the beacon identifier from the proximityObserver.
I get these messages in the log tab:

D/ProximityAnalytics: Reporting start monitoring for f9b26cb6ab3bdeea6c2db393c7d1441a
D/ProximitySDK: Sent usage metrics of one id
D/ProximityAnalytics: Reporting ENTER for f9b26cb6ab3bdeea6c2db393c7d1441a
D/ProximityAnalytics: Reporting EXIT for f9b26cb6ab3bdeea6c2db393c7d1441a

How/Where can I get/save this identifier?

Unable to create bluetooth LE scanner instance

Prerequisites

  • Put an X between the brackets on this line if you have done all of the following:
    • My beacons have Estimote Monitoring enabled (Check it in the Estimote Cloud, or via app)
    • My Android device/devices supports BLE and has Android OS version >= 5.0.0
    • My Android device/devices have bluetooth enabled
    • My app has Location Permissions granted

Basic information

Estimote SDK version: [0.4.1 and mustard:0.2.1]

Android devices affected: [Android Lollipop 5.1.1 Api 22, Android Nougat 7.0 Api 24]

Android OS version affected: [Samsung Galaxy J1 Ace, Samsung Note 5,Huawei P10 (VTR-L09), Huawei P10 (WAS-LX3)]

Beacon hardware version: [F3.3 / Estimote OS 4.13.2]

Description

[When our app start and began to scan for beacons it crash, see below for log details, if need we have crashlytics info]

example case:

  1. [stop buetooth services]
  2. [restart or initialize the app]
  3. [ask for permisssion, answer yes]
  4. [Wait for first scan and Crashes

Expected behavior: [Scan for beacons, zone event should be fired upon a beacon detection, no to crash the app]

Actual behavior: [After bluetooh has been active and scans happens, app shouldn't crash]

Additional information

Might be the same case as issue #36 or at least related, the behavior and the way to created it is almost the same


Fatal Exception: java.lang.IllegalStateException
Unable to create bluetooth LE scanner instance
arrow_right
com.estimote.scanning_plugin.packet_provider.scanner.AlwaysErrorEstimoteScaner.scan (AlwaysErrorEstimoteScaner.kt:13)
com.estimote.scanning_plugin.packet_provider.use_cases.EstimoteLocationScanUseCase.run (EstimoteLocationScanUseCase.kt:22)
com.estimote.scanning_plugin.packet_provider.EstimotePacketProvider.provideEstimoteLocation (EstimotePacketProvider.kt:43)
com.estimote.scanning_plugin.api.EstimoteBluetoothScanner$estimoteLocationScan$1.invoke (EstimoteBluetoothScanner.kt:16)
com.estimote.scanning_plugin.api.EstimoteBluetoothScanner$estimoteLocationScan$1.invoke (EstimoteBluetoothScanner.kt:10)
com.estimote.scanning_plugin.api.use_cases.ScanUseCase$scanForPacketsAccordingToSettings$1.apply (ScanUseCase.kt:22)
com.estimote.scanning_plugin.api.use_cases.ScanUseCase$scanForPacketsAccordingToSettings$1.apply (ScanUseCase.kt:8)
io.reactivex.internal.operators.observable.ObservableScalarXMap$ScalarXMapObservable.subscribeActual (ObservableScalarXMap.java:142)
io.reactivex.Observable.subscribe (Observable.java:10903)
io.reactivex.Observable.subscribe (Observable.java:10889)
io.reactivex.Observable.subscribe (Observable.java:10818)
com.estimote.scanning_plugin.api.use_cases.ScanUseCase.notifyUserCallbacks (ScanUseCase.kt:28)
com.estimote.scanning_plugin.api.use_cases.ScanUseCase.run (ScanUseCase.kt:14)
com.estimote.scanning_plugin.api.scan_launchers.BaseScannerScanLauncher.start (BaseScannerScanLauncher.kt:25)
com.estimote.scanning_plugin.api.scan_launchers.BaseScannerScanLauncher.start (BaseScannerScanLauncher.kt:8)
com.estimote.proximity_sdk.monitoring.estimote_monitoring.SimpleEstimoteMonitor$startEstimoteLocationScan$1.subscribe (SimpleEstimoteMonitor.kt:45)
io.reactivex.internal.operators.observable.ObservableCreate.subscribeActual (ObservableCreate.java:40)
io.reactivex.Observable.subscribe (Observable.java:10903)

ProximityObserver.Handler not stop()

Prerequisites

  • Put an X between the brackets on this line if you have done all of the following:
    • My beacons have Estimote Monitoring enabled (Check it in the Estimote Cloud, or via app)
    • My Android device/devices supports BLE and has Android OS version >= 5.0.0
    • My Android device/devices have bluetooth enabled
    • My app has Location Permissions granted

Basic information

Estimote SDK version: 0.5.1

Android devices affected: All

Android OS version affected: All

Beacon hardware version: F3.3

Description

We have implemented Estimote Proximity SDK v0.5.1 in our current Android app. After adding
ProximityZone to proximityObserver, we stop “ProximityObserver.Handler” by calling below method.

observationHandler.stop();

But it seems like that ProximityObserver.Handler not being stopped. Each time whenever ProximityZone added, it returns multiple entry in withOnEnterAction having same key-value pair.

Also we can’t find any method which shows the state of ProximityObserver.Handler either it is running or not.

Telemetry data not being sent

Prerequisites

  • My beacons have Estimote Monitoring enabled (Check it in the Estimote Cloud, or via app)
  • My Android device/devices supports BLE and has Android OS version >= 5.0.0
  • My Android device/devices have bluetooth enabled
  • My app has Location Permissions granted

Basic information

Proximity SDK version: 0.5.1

Android devices affected: Blackview BV600

Android OS version affected: Nougat 7.0

Beacon hardware version: F3.3

Beacon firmware version: 4.14.1

Description

I'm not seeing any updates on Telemetry data in the Estimote Cloud platform. I'm not using withTelemetryReportingDisabled.

Steps to reproduce:

  1. Create a ProximityObserver
    My code:
private val cloudCredentials = EstimoteCloudCredentials(ESTIMOTE_APP_ID, ESTIMOTE_APP_TOKEN)
private val proximityObserver = ProximityObserverBuilder(mActivity, cloudCredentials)
            .withBalancedPowerMode()
            .withOnErrorAction { System.err.println("opps! erro!") }
            .build()

private val venueZone = proximityObserver.zoneBuilder()
            .forAttachmentKeyAndValue("company", "vasp")
            .inFarRange()
            .withOnEnterAction { println("Entered: " + it.getPayload()["local"]) }
            .withOnExitAction { println("Exited: " + it.getPayload()["local"]) }
            .withOnChangeAction { it.forEach { println("Changed: ${it.getPayload()["local"]}") } }
            .create()

private var observationHandler: Handler? = null

RequirementsWizardFactory.createEstimoteRequirementsWizard().fulfillRequirements(
                mActivity,
                onRequirementsFulfilled = {
                    observationHandler = proximityObserver.addProximityZone(venueZone).start()
                },
                onRequirementsMissing = { println("onRequirementsMissing") },
                onError = { println("onError") })
  1. Wait to see which beacon got detected
  2. Check beacon on the Estimote Cloud platform and notice there isn't new telemetry data

Expected behavior: Telemetry is sent to Estimote Cloud

Actual behavior: Telemetry is not sent to Estimote Cloud

Additional information

Telemetry data seems to be either sent or aggregated hourly, I took that into account and tested in different hours throughout the day.
I used the iOS Estimote App and the telemetry data is only sent if I select the beacon from the list and connect to it.
Should I be doing anything else?

Off-topic:
Also, where do I submit Issues with the mobile apps and the Estimote Cloud platform?

Too many Entry / Exit Notifications

The entry and exit functions are being called atleast 6 to 7 times, every time and to accuracy is also
not at all reliable.

I placed the beacon on the right side and started the app -> Got Entered Notifications
Moved the beacon from right to left -> Got Exit Notifications and Entered Notifications immediately after Exit Notifications

Here is the log:

12-28 17:07:42.991 18505-18505/com.abc.abcapp D/xyz: Entered Proximity for Beacon: india_beetroot
12-28 17:07:43.012 18505-18505/com.abc.abcapp D/xyz: Beacons in Range: [india_beetroot]
12-28 17:07:43.041 18505-18505/com.abc.abcapp D/xyz: Entered Proximity for Beacon: india_beetroot
12-28 17:07:43.041 18505-18505/com.abc.abcapp D/xyz: Beacons in Range: [india_beetroot]
12-28 17:07:43.058 18505-18505/com.abc.abcapp D/xyz: Entered Proximity for Beacon: india_beetroot
12-28 17:07:43.058 18505-18505/com.abc.abcapp D/xyz: Beacons in Range: [india_beetroot]
12-28 17:07:43.073 18505-18505/com.abc.abcapp D/xyz: Entered Proximity for Beacon: india_beetroot
12-28 17:07:43.073 18505-18505/com.abc.abcapp D/xyz: Beacons in Range: [india_beetroot]
12-28 17:07:43.090 18505-18505/com.abc.abcapp D/xyz: Entered Proximity for Beacon: india_beetroot
12-28 17:07:43.090 18505-18505/com.abc.abcapp D/xyz: Beacons in Range: [india_beetroot]
12-28 17:07:43.104 18505-18505/com.abc.abcapp D/xyz: Entered Proximity for Beacon: india_beetroot
12-28 17:07:43.105 18505-18505/com.abc.abcapp D/xyz: Beacons in Range: [india_beetroot]
12-28 17:07:43.124 18505-18505/com.abc.abcapp D/xyz: Entered Proximity for Beacon: india_beetroot
12-28 17:07:43.124 18505-18505/com.abc.abcapp D/xyz: Beacons in Range: [india_beetroot]
12-28 17:07:43.144 18505-18505/com.abc.abcapp D/xyz: Entered Proximity for Beacon: india_beetroot
12-28 17:07:43.144 18505-18505/com.abc.abcapp D/xyz: Beacons in Range: [india_beetroot]
12-28 17:07:43.399 18505-18505/com.abc.abcapp D/xyz: Check In Date: 2017-12-28 17:07:43.393 +0530

12-28 17:08:47.716 18505-18505/com.abc.abcapp D/xyz: Exited Proximity for Beacon: india_beetroot
12-28 17:08:47.733 18505-18505/com.abc.abcapp D/xyz: Exited Proximity for Beacon: india_beetroot
12-28 17:08:47.748 18505-18505/com.abc.abcapp D/xyz: Exited Proximity for Beacon: india_beetroot
12-28 17:08:47.760 18505-18505/com.abc.abcapp D/xyz: Exited Proximity for Beacon: india_beetroot
12-28 17:08:47.784 18505-18505/com.abc.abcapp D/xyz: Exited Proximity for Beacon: india_beetroot
12-28 17:08:47.799 18505-18505/com.abc.abcapp D/xyz: Exited Proximity for Beacon: india_beetroot
12-28 17:08:47.812 18505-18505/com.abc.abcapp D/xyz: Exited Proximity for Beacon: india_beetroot
12-28 17:08:47.818 18505-18505/com.abc.abcapp D/xyz: Check Out Date: 2017-12-28 17:08:47.816 +0530

Here is the code: in my Application class

Initialisation:

 EstimoteCloudCredentials cloudCredentials = new EstimoteCloudCredentials("xxxxx", "xxxxxx");
        proximityObserver = new ProximityObserverBuilder(this.getApplicationContext(), cloudCredentials)
                .withScannerInForegroundService(foreground.build())
                .withLowPowerMode()
                .withOnErrorAction(new Function1<Throwable, Unit>() {
                    @Override
                    public Unit invoke(Throwable throwable) {
                        return null;
                    }
                })
                .build();

Creating zone:

      indiaBeetroot =
                proximityObserver.zoneBuilder()
                        .forAttachmentKeyAndValue("beacon_name", Const.Beacons.INDIA_BEETROOT)
                        .inFarRange()
                        .withOnEnterAction(new Function1<ProximityAttachment, Unit>() {
                            @Override
                            public Unit invoke(ProximityAttachment proximityAttachment) {
                                Log.d(Const.DEBUG, "Entered Proximity for Beacon: " + Const.Beacons.INDIA_BEETROOT);
                                //Log.d(Const.DEBUG, "Attachment: " + proximityAttachment.toString());

                                String identifier = Const.Beacons.INDIA_BEETROOT;

                                Set<String> set = mPrefs.getStringSet(Const.PREFS_BEACONS_DETECTED_2, new HashSet<String>());

                                if (set.size() == 0) {
                                    Log.d(Const.DEBUG, "No beacons detected before this.... Adding event to Firebase");
                                    addEventToFirebase();

                                    showNotification(CHECKED_IN_TITLE, CHECKED_IN_DESCRIPTION);
                                }

                                set.add(identifier);

                                Log.d(Const.DEBUG, "Beacons in Range: " + set.toString());
                                mPrefs.edit().putStringSet(Const.PREFS_BEACONS_DETECTED_2, set).apply();

                                return null;
                            }
                        })
                        .withOnExitAction(new Function1<ProximityAttachment, Unit>() {
                            @Override
                            public Unit invoke(ProximityAttachment proximityAttachment) {
                                Log.d(Const.DEBUG, "Exited Proximity for Beacon: " + Const.Beacons.INDIA_BEETROOT);

                                String identifier = Const.Beacons.INDIA_BEETROOT;

                                Set<String> set = mPrefs.getStringSet(Const.PREFS_BEACONS_DETECTED_2, new HashSet<String>());

                                if (set.size() > 0) {
                                    set.remove(identifier);

                                    Log.d(Const.DEBUG, "Beacons in Range: " + set.toString());
                                    mPrefs.edit().putStringSet(Const.PREFS_BEACONS_DETECTED_2, set).apply();

                                    if (set.size() == 0) {
                                        updateEventToFirebase();

                                        showNotification(CHECKOUT_TITLE, CHECKOUT_DESCRIPTION);
                                    }
                                }
                                return null;
                            }
                        })
                        .withOnChangeAction(new Function1<List<? extends ProximityAttachment>, Unit>() {
                            @Override
                            public Unit invoke(List<? extends ProximityAttachment> proximityAttachments) {
                                return null;
                            }
                        })
                        .create();

Registering Observer:

proximityObserver
                .addProximityZone(indiaBeetroot)
                .start();

Strange behaviour with Sony Xperia XA

Hello All,
I've built a sample code like the example provided by Estimote using the new proximiy-sdk 0.1.0-alpha5.
That App runs quite well in Huawei P9 with Android 7, LG with Android 5, but not with a Sony Xperia XA F3111 with Android 6.0;
The strange behaviour I mentioned in the title is this:

I put the beacon near the smartphone, and the Xperia doesn't detect it.
then I block the screen with a single press of the start button. When i unblock the screen, immediately after i press the startup button again, the enter event is raised (.withOnEnterAction is executed).
The same happens when the beacon exits from the zone:
I put the beacon far way from the phone and nothing happens (xperia doesn't raise the exit event (.withOnExitAction). I block the screen pressing the start button one time. Imediately after I press the start button again to unblock the screen the exit event is raised.

Here the sample MainActivity:

public class MainActivity extends AppCompatActivity {

    private static final String ESTIMOTE_APP_ID = "it-xxxxxxxxxxx-notification--kox";
    private static final String ESTIMOTE_APP_TOKEN = "646cxxxxxxxxxxdf9806acd98ce05c92";
    private static final String TAG = "MainActivity";

    private ProximityObserver.Handler observationHandler;

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

        EstimoteCloudCredentials cloudCredentials = new EstimoteCloudCredentials(ESTIMOTE_APP_ID, ESTIMOTE_APP_TOKEN);
        ProximityObserver proximityObserver = new ProximityObserverFactory().create(this.getApplicationContext(), cloudCredentials);

        ProximityZone venueZone = proximityObserver.zoneBuilder()
                                    .forAttachmentKeyAndValue("venue", "office")
                                    .inCustomRange(0.5)
                                    .withOnEnterAction(new Function1<ProximityAttachment, Unit>() {
                                        @Override public Unit invoke(ProximityAttachment proximityAttachment) {
                                            /* Do something here */
                                            Log.e(TAG, "I see the light");
                                            return null;
                                        }
                                    })
                                    .withOnExitAction(new Function1<ProximityAttachment, Unit>() {
                                        @Override
                                        public Unit invoke(ProximityAttachment proximityAttachment) {
                                            /* Do something here */
                                            Log.e(TAG, "In the darkness");
                                            return null;
                                        }
                                    })
                                    .create();

        Notification notification = new Notification.Builder(this)
                .setSmallIcon(android.R.drawable.ic_dialog_info)
                .setContentTitle("Beacon Scanner")
                .setContentText("Scan is running...")
                .build();

        this.observationHandler =
                proximityObserver
                        .addProximityZone(venueZone)
                        .withLowLatencyPowerMode()
                        .startWithScannerInForegroundService(notification);
    }

    @Override
    protected void onDestroy() {
        observationHandler.stop();
        super.onDestroy();
    }
}

Anybody else experienced the same with Xperia?
Thanks in advance for support.
Raffo

How to get distance value from beacon to device

Prerequisites

  • Put an X between the brackets on this line if you have done all of the following:
    • My beacons have Estimote Monitoring enabled (Check it in the Estimote Cloud, or via app)
    • My Android device/devices supports BLE and has Android OS version >= 5.0.0
    • My Android device/devices have bluetooth enabled
    • My app has Location Permissions granted

Basic information

Estimote SDK version: [Paste here the SDK version that you are using (like 0.1.0-alpha.6)]

Android devices affected: [Paste here your Android device model/models that you are having problems with.]

Android OS version affected: [Android OS version (ex. Oreo 8.0.0)]

Beacon hardware version: [Paste here your beacons hardware version (you can check that in Estimote Cloud).]

Description

[Description of the issue]

(Optional) Steps to reproduce:

  1. [First Step]
  2. [Second Step]
  3. [and so on...]

Expected behavior: [What you expect to happen]

Actual behavior: [What actually happens]

Additional information

Add here any logs you want to attach, or any other info, like pictures for example

I want to know distance for each beacon when i pass the Rssi value of beacon .

    BluetoothScanner scanner = new EstimoteBluetoothScannerFactory(MainActivity.this).getSimpleScanner();
    scanner.estimoteConnectivityScan()
            .withLowLatencyPowerMode()
            .withOnPacketFoundAction(new Function1<EstimoteConnectivity, Unit>() {

                @Override
                public Unit invoke(EstimoteConnectivity estimoteConnectivity) {
                    Log.i("ProximitySDK", "Found device " + estimoteConnectivity.getDeviceId());
                  
                    return null;
                }
            }).start();

so in this function i can get each beacon details without distance.

Do you have any sample like a app that send a notifications on both IOS and Android i try the proximityApp but it only do is scanning

Prerequisites

  • Put an X between the brackets on this line if you have done all of the following:
    • My beacons have Estimote Monitoring enabled (Check it in the Estimote Cloud, or via app)
    • My Android device/devices supports BLE and has Android OS version >= 5.0.0
    • My Android device/devices have bluetooth enabled
    • My app has Location Permissions granted

Basic information

Estimote SDK version: [Paste here the SDK version that you are using (like 0.1.0-alpha.6)]

Android devices affected: [Paste here your Android device model/models that you are having problems with.]

Android OS version affected: [Android OS version (ex. Oreo 8.0.0)]

Beacon hardware version: [Paste here your beacons hardware version (you can check that in Estimote Cloud).]

Description

[Description of the issue]

(Optional) Steps to reproduce:

  1. [First Step]
  2. [Second Step]
  3. [and so on...]

Expected behavior: [What you expect to happen]

Actual behavior: [What actually happens]

Additional information

Add here any logs you want to attach, or any other info, like pictures for example

OnExitAction not being called?

I'm using the Example application to test the beacons out, and as with the old SDK the onExit event is not being called.

I'm using Flip To Sleep on my Location Beacon, and if I start the application while the beacon is flipped down, it is not detected. As soon as I flip it back up, it is detected - so I'm sure flip to sleep is working. However, flipping the beacon upside down does not trigger the onExit (even after quite a while).

Crash when activating service?

Prerequisites

  • Put an X between the brackets on this line if you have done all of the following:
    • My beacons have Estimote Monitoring enabled (Check it in the Estimote Cloud, or via app)
    • My Android device/devices supports BLE and has Android OS version >= 5.0.0
    • My Android device/devices have bluetooth enabled
    • My app has Location Permissions granted

Basic information

Estimote SDK version: 0.2.3

Android devices affected: Wiko Fever

Android OS version affected: Marshmallow 6.0

Beacon hardware version: F3.3

Description

On an old smartphone running on Android 6.0, I have troubles to receive a notification when I enter an area defined by some beacons. It's working fine with a Samsung Galaxy S7 on Android 7.0 by the way.

I don't know exactly when this happens because I'm activating Bluetooth on the device, in order to register and unregister the service in the background. And immediately after, I should receive a notification from one signal (the onEnter event should make a http call and the remote server activate should send a push notification).

Here's a snippet and the stacktrace

Additional information

Snippet

Notification notification = new Notification.Builder(context)
                .setContentTitle("Title")
                .setContentText("Monitoring…")
                .addAction(android.R.drawable.stat_sys_data_bluetooth, "Configure", pendingIntent)
                .setSmallIcon(R.drawable.ic_notification)
                .build();

        ProximityObserverBuilder builder = new ProximityObserverBuilder(context, new EstimoteCloudCredentials(appId, appToken));
        proximityObserver = builder
                .withBalancedPowerMode()
                .withScannerInForegroundService(notification)
                .withOnErrorAction(errorAction)
                .build();

Stacktrace:

#0. Crashed: main
       at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3226)
       at android.app.ActivityThread.-wrap17(ActivityThread.java)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1586)
       at android.os.Handler.dispatchMessage(Handler.java:111)
       at android.os.Looper.loop(Looper.java:207)
       at android.app.ActivityThread.main(ActivityThread.java:5728)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:679)

--

Fatal Exception: java.lang.RuntimeException: Unable to start service com.estimote.scanning_sdk.packet_provider.service.PacketProviderWrapperService@703325b with null: java.lang.IllegalArgumentException: null notification
       at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3226)
       at android.app.ActivityThread.-wrap17(ActivityThread.java)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1586)
       at android.os.Handler.dispatchMessage(Handler.java:111)
       at android.os.Looper.loop(Looper.java:207)
       at android.app.ActivityThread.main(ActivityThread.java:5728)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:679)

Caused by java.lang.IllegalArgumentException: null notification
       at android.os.Parcel.readException(Parcel.java:1603)
       at android.os.Parcel.readException(Parcel.java:1552)
       at android.app.ActivityManagerProxy.setServiceForeground(ActivityManagerNative.java:3876)
       at android.app.Service.startForeground(Service.java:653)
       at com.estimote.scanning_sdk.packet_provider.service.PacketProviderWrapperService.showNotification(PacketProviderWrapperService.kt:73)
       at com.estimote.scanning_sdk.packet_provider.service.PacketProviderWrapperService.onStartCommand(PacketProviderWrapperService.kt:32)
       at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3209)
       at android.app.ActivityThread.-wrap17(ActivityThread.java)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1586)
       at android.os.Handler.dispatchMessage(Handler.java:111)
       at android.os.Looper.loop(Looper.java:207)
       at android.app.ActivityThread.main(ActivityThread.java:5728)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:679)

#0. Crashed: main
       at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3226)
       at android.app.ActivityThread.-wrap17(ActivityThread.java)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1586)
       at android.os.Handler.dispatchMessage(Handler.java:111)
       at android.os.Looper.loop(Looper.java:207)
       at android.app.ActivityThread.main(ActivityThread.java:5728)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:679)

#1. Queue
       at java.lang.Object.wait(Object.java)
       at java.lang.Thread.parkFor$(Thread.java:1220)
       at sun.misc.Unsafe.park(Unsafe.java:299)
       at java.util.concurrent.locks.LockSupport.park(LockSupport.java:158)
       at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2013)
       at java.util.concurrent.PriorityBlockingQueue.take(PriorityBlockingQueue.java:510)
       at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.performOperation(DependencyPriorityBlockingQueue.java:197)
       at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.get(DependencyPriorityBlockingQueue.java:236)
       at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.take(DependencyPriorityBlockingQueue.java:65)
       at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.take(DependencyPriorityBlockingQueue.java:46)
       at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1038)
       at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1098)
       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
       at java.lang.Thread.run(Thread.java:818)

#2. HeapTaskDaemon
       at dalvik.system.VMRuntime.runHeapTasks(VMRuntime.java)
       at java.lang.Daemons$HeapTaskDaemon.run(Daemons.java:443)
       at java.lang.Thread.run(Thread.java:818)

#3. Queue
       at java.lang.Object.wait(Object.java)
       at java.lang.Thread.parkFor$(Thread.java:1220)
       at sun.misc.Unsafe.park(Unsafe.java:299)
       at java.util.concurrent.locks.LockSupport.park(LockSupport.java:158)
       at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2013)
       at java.util.concurrent.PriorityBlockingQueue.take(PriorityBlockingQueue.java:510)
       at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.performOperation(DependencyPriorityBlockingQueue.java:197)
       at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.get(DependencyPriorityBlockingQueue.java:236)
       at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.take(DependencyPriorityBlockingQueue.java:65)
       at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.take(DependencyPriorityBlockingQueue.java:46)
       at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1038)
       at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1098)
       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
       at java.lang.Thread.run(Thread.java:818)

#4. Queue
       at java.lang.Object.wait(Object.java)
       at java.lang.Thread.parkFor$(Thread.java:1220)
       at sun.misc.Unsafe.park(Unsafe.java:299)
       at java.util.concurrent.locks.LockSupport.park(LockSupport.java:158)
       at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2013)
       at java.util.concurrent.PriorityBlockingQueue.take(PriorityBlockingQueue.java:510)
       at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.performOperation(DependencyPriorityBlockingQueue.java:197)
       at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.get(DependencyPriorityBlockingQueue.java:236)
       at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.take(DependencyPriorityBlockingQueue.java:65)
       at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.take(DependencyPriorityBlockingQueue.java:46)
       at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1038)
       at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1098)
       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
       at java.lang.Thread.run(Thread.java:818)

#5. Answers Events Handler1
       at java.lang.Object.wait(Object.java)
       at java.lang.Thread.parkFor$(Thread.java:1220)
       at sun.misc.Unsafe.park(Unsafe.java:299)
       at java.util.concurrent.locks.LockSupport.park(LockSupport.java:158)
       at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2013)
       at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1078)
       at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1071)
       at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1038)
       at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1098)
       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
       at io.fabric.sdk.android.services.common.ExecutorUtils$1$1.onRun(ExecutorUtils.java:75)
       at io.fabric.sdk.android.services.common.BackgroundPriorityRunnable.run(BackgroundPriorityRunnable.java:30)
       at java.lang.Thread.run(Thread.java:818)

#6. Crashlytics Exception Handler1
       at dalvik.system.VMStack.getThreadStackTrace(VMStack.java)
       at java.lang.Thread.getStackTrace(Thread.java:580)
       at java.lang.Thread.getAllStackTraces(Thread.java:522)
       at com.crashlytics.android.core.CrashlyticsController.writeSessionEvent(CrashlyticsController.java:1317)
       at com.crashlytics.android.core.CrashlyticsController.writeFatal(CrashlyticsController.java:1004)
       at com.crashlytics.android.core.CrashlyticsController.access$400(CrashlyticsController.java:67)
       at com.crashlytics.android.core.CrashlyticsController$7.call(CrashlyticsController.java:319)
       at com.crashlytics.android.core.CrashlyticsController$7.call(CrashlyticsController.java:312)
       at java.util.concurrent.FutureTask.run(FutureTask.java:237)
       at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
       at io.fabric.sdk.android.services.common.ExecutorUtils$1$1.onRun(ExecutorUtils.java:75)
       at io.fabric.sdk.android.services.common.BackgroundPriorityRunnable.run(BackgroundPriorityRunnable.java:30)
       at java.lang.Thread.run(Thread.java:818)

#7. ReferenceQueueDaemon
       at java.lang.Object.wait(Object.java)
       at java.lang.Daemons$ReferenceQueueDaemon.run(Daemons.java:164)
       at java.lang.Thread.run(Thread.java:818)

#8. FinalizerDaemon
       at java.lang.Object.wait(Object.java)
       at java.lang.Object.wait(Object.java:423)
       at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:101)
       at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:72)
       at java.lang.Daemons$FinalizerDaemon.run(Daemons.java:207)
       at java.lang.Thread.run(Thread.java:818)

#9. Queue
       at java.lang.Object.wait(Object.java)
       at java.lang.Thread.parkFor$(Thread.java:1220)
       at sun.misc.Unsafe.park(Unsafe.java:299)
       at java.util.concurrent.locks.LockSupport.park(LockSupport.java:158)
       at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2013)
       at java.util.concurrent.PriorityBlockingQueue.take(PriorityBlockingQueue.java:510)
       at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.performOperation(DependencyPriorityBlockingQueue.java:197)
       at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.get(DependencyPriorityBlockingQueue.java:236)
       at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.take(DependencyPriorityBlockingQueue.java:65)
       at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.take(DependencyPriorityBlockingQueue.java:46)
       at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1038)
       at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1098)
       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
       at java.lang.Thread.run(Thread.java:818)

#10. Queue
       at java.lang.Object.wait(Object.java)
       at java.lang.Thread.parkFor$(Thread.java:1220)
       at sun.misc.Unsafe.park(Unsafe.java:299)
       at java.util.concurrent.locks.LockSupport.park(LockSupport.java:158)
       at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2013)
       at java.util.concurrent.PriorityBlockingQueue.take(PriorityBlockingQueue.java:510)
       at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.performOperation(DependencyPriorityBlockingQueue.java:197)
       at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.get(DependencyPriorityBlockingQueue.java:236)
       at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.take(DependencyPriorityBlockingQueue.java:65)
       at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.take(DependencyPriorityBlockingQueue.java:46)
       at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1038)
       at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1098)
       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
       at java.lang.Thread.run(Thread.java:818)

#11. Queue
       at java.lang.Object.wait(Object.java)
       at java.lang.Thread.parkFor$(Thread.java:1220)
       at sun.misc.Unsafe.park(Unsafe.java:299)
       at java.util.concurrent.locks.LockSupport.park(LockSupport.java:158)
       at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2013)
       at java.util.concurrent.PriorityBlockingQueue.take(PriorityBlockingQueue.java:510)
       at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.performOperation(DependencyPriorityBlockingQueue.java:197)
       at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.get(DependencyPriorityBlockingQueue.java:236)
       at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.take(DependencyPriorityBlockingQueue.java:65)
       at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.take(DependencyPriorityBlockingQueue.java:46)
       at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1038)
       at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1098)
       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
       at java.lang.Thread.run(Thread.java:818)

#12. main
       at java.lang.Object.wait(Object.java)
       at java.lang.Thread.parkFor$(Thread.java:1220)
       at sun.misc.Unsafe.park(Unsafe.java:299)
       at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:198)
       at java.util.concurrent.FutureTask.awaitDone(FutureTask.java:418)
       at java.util.concurrent.FutureTask.get(FutureTask.java:176)
       at com.crashlytics.android.core.CrashlyticsBackgroundWorker.submitAndWait(CrashlyticsBackgroundWorker.java:41)
       at com.crashlytics.android.core.CrashlyticsController.handleUncaughtException(CrashlyticsController.java:312)
       at com.crashlytics.android.core.CrashlyticsController$6.onUncaughtException(CrashlyticsController.java:296)
       at com.crashlytics.android.core.CrashlyticsUncaughtExceptionHandler.uncaughtException(CrashlyticsUncaughtExceptionHandler.java:30)
       at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:693)
       at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:690)

#13. Queue
       at java.lang.Object.wait(Object.java)
       at java.lang.Thread.parkFor$(Thread.java:1220)
       at sun.misc.Unsafe.park(Unsafe.java:299)
       at java.util.concurrent.locks.LockSupport.park(LockSupport.java:158)
       at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2013)
       at java.util.concurrent.PriorityBlockingQueue.take(PriorityBlockingQueue.java:510)
       at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.performOperation(DependencyPriorityBlockingQueue.java:197)
       at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.get(DependencyPriorityBlockingQueue.java:236)
       at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.take(DependencyPriorityBlockingQueue.java:65)
       at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.take(DependencyPriorityBlockingQueue.java:46)
       at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1038)
       at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1098)
       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
       at java.lang.Thread.run(Thread.java:818)

#14. Thread-139
       at java.lang.Object.wait(Object.java)
       at java.lang.Thread.parkFor$(Thread.java:1220)
       at sun.misc.Unsafe.park(Unsafe.java:299)
       at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:198)
       at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2053)
       at java.util.concurrent.LinkedBlockingQueue.poll(LinkedBlockingQueue.java:435)
       at com.google.android.gms.common.zza.zza(Unknown Source)
       at com.google.android.gms.ads.identifier.AdvertisingIdClient.zza(Unknown Source)
       at com.google.android.gms.ads.identifier.AdvertisingIdClient.start(Unknown Source)
       at com.google.android.gms.ads.identifier.AdvertisingIdClient.getAdvertisingIdInfo(Unknown Source)
       at java.lang.reflect.Method.invoke(Method.java)
       at io.fabric.sdk.android.services.common.AdvertisingInfoReflectionStrategy.getInfo(AdvertisingInfoReflectionStrategy.java:106)
       at io.fabric.sdk.android.services.common.AdvertisingInfoReflectionStrategy.getAdvertisingId(AdvertisingInfoReflectionStrategy.java:76)
       at io.fabric.sdk.android.services.common.AdvertisingInfoReflectionStrategy.getAdvertisingInfo(AdvertisingInfoReflectionStrategy.java:66)
       at io.fabric.sdk.android.services.common.AdvertisingInfoProvider.getAdvertisingInfoFromStrategies(AdvertisingInfoProvider.java:118)
       at io.fabric.sdk.android.services.common.AdvertisingInfoProvider.access$000(AdvertisingInfoProvider.java:28)
       at io.fabric.sdk.android.services.common.AdvertisingInfoProvider$1.onRun(AdvertisingInfoProvider.java:70)
       at io.fabric.sdk.android.services.common.BackgroundPriorityRunnable.run(BackgroundPriorityRunnable.java:30)
       at java.lang.Thread.run(Thread.java:818)

#15. Queue
       at java.lang.Object.wait(Object.java)
       at java.lang.Thread.parkFor$(Thread.java:1220)
       at sun.misc.Unsafe.park(Unsafe.java:299)
       at java.util.concurrent.locks.LockSupport.park(LockSupport.java:158)
       at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2013)
       at java.util.concurrent.PriorityBlockingQueue.take(PriorityBlockingQueue.java:510)
       at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.performOperation(DependencyPriorityBlockingQueue.java:197)
       at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.get(DependencyPriorityBlockingQueue.java:236)
       at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.take(DependencyPriorityBlockingQueue.java:65)
       at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.take(DependencyPriorityBlockingQueue.java:46)
       at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1038)
       at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1098)
       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
       at java.lang.Thread.run(Thread.java:818)

#16. FinalizerWatchdogDaemon
       at java.lang.Object.wait(Object.java)
       at java.lang.Daemons$FinalizerWatchdogDaemon.waitForObject(Daemons.java:298)
       at java.lang.Daemons$FinalizerWatchdogDaemon.run(Daemons.java:267)
       at java.lang.Thread.run(Thread.java:818)

#17. Queue
       at libcore.io.Posix.poll(Posix.java)
       at libcore.io.BlockGuardOs.poll(BlockGuardOs.java:195)
       at libcore.io.IoBridge.isConnected(IoBridge.java:238)
       at libcore.io.IoBridge.connectErrno(IoBridge.java:193)
       at libcore.io.IoBridge.connect(IoBridge.java:127)
       at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:188)
       at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:457)
       at java.net.Socket.connect(Socket.java:927)
       at com.android.okhttp.internal.Platform.connectSocket(Platform.java:117)
       at com.android.okhttp.internal.http.SocketConnector.connectRawSocket(SocketConnector.java:160)
       at com.android.okhttp.internal.http.SocketConnector.connectTls(SocketConnector.java:79)
       at com.android.okhttp.Connection.connect(Connection.java:167)
       at com.android.okhttp.Connection.connectAndSetOwner(Connection.java:209)
       at com.android.okhttp.OkHttpClient$1.connectAndSetOwner(OkHttpClient.java:128)
       at com.android.okhttp.internal.http.HttpEngine.nextConnection(HttpEngine.java:352)
       at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:341)
       at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:259)
       at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:454)
       at com.android.okhttp.internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:114)
       at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:245)
       at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.getOutputStream(DelegatingHttpsURLConnection.java:218)
       at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java)
       at io.fabric.sdk.android.services.network.HttpRequest.openOutput(HttpRequest.java:2450)
       at io.fabric.sdk.android.services.network.HttpRequest.startPart(HttpRequest.java:2463)
       at io.fabric.sdk.android.services.network.HttpRequest.part(HttpRequest.java:2542)
       at io.fabric.sdk.android.services.network.HttpRequest.part(HttpRequest.java:2526)
       at io.fabric.sdk.android.services.network.HttpRequest.part(HttpRequest.java:2512)
       at io.fabric.sdk.android.services.settings.AbstractAppSpiCall.applyMultipartDataTo(AbstractAppSpiCall.java:108)
       at io.fabric.sdk.android.services.settings.AbstractAppSpiCall.invoke(AbstractAppSpiCall.java:76)
       at io.fabric.sdk.android.services.settings.UpdateAppSpiCall.invoke(UpdateAppSpiCall.java:29)
       at io.fabric.sdk.android.Onboarding.performUpdateApp(Onboarding.java:204)
       at io.fabric.sdk.android.Onboarding.performUpdateApp(Onboarding.java:194)
       at io.fabric.sdk.android.Onboarding.performAutoConfigure(Onboarding.java:175)
       at io.fabric.sdk.android.Onboarding.doInBackground(Onboarding.java:112)
       at io.fabric.sdk.android.Onboarding.doInBackground(Onboarding.java:45)
       at io.fabric.sdk.android.InitializationTask.doInBackground(InitializationTask.java:63)
       at io.fabric.sdk.android.InitializationTask.doInBackground(InitializationTask.java:28)
       at io.fabric.sdk.android.services.concurrency.AsyncTask$2.call(AsyncTask.java:311)
       at java.util.concurrent.FutureTask.run(FutureTask.java:237)
       at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:423)
       at java.util.concurrent.FutureTask.run(FutureTask.java:237)
       at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
       at java.lang.Thread.run(Thread.java:818)


Configure attachement locally

Description

Current proximity SDK forces us to define Attachment in Estimote cloud only, my use case requires me to configure beacons locally and setting up attachment without going to cloud.

Hi @pawelDylag

You seem to mention that this functionality may be available soon based on my reading of your comments at #7

Can you please confirm if there is a way currently to avoid cloud configuration for this as its kind of roadblock for me and stopping me to migrate from your Android SDK to Proximity SDK

Thanks
Ajit

Crash when starting a ProximityObserver without internet access

Prerequisites

  • My beacons have Estimote Monitoring enabled (Check it in the Estimote Cloud, or via app)
  • My Android device/devices supports BLE and has Android OS version >= 5.0.0
  • My Android device/devices have bluetooth enabled
  • My app has Location Permissions granted

Basic information

Estimote SDK version: 3.3.0

Android devices affected: Vodafone VFD 510

Android OS version affected: Nougat 7.1.1

Beacon hardware version: G1.8

Description

I'm getting an exception that seems to be related with the lack of internet access to reach cloud.estimote.com. I stumbled upon this while testing the app without internet access. When I start the service without internet access the app crashes (stack trace at the bottom).

Steps to reproduce:

  1. Create a ProximityObserver
    My code:
Notification notification =
                notificationHelper.getNotification("Beacon Scan", "Scan is running...", null);
        cloudCredentials = new EstimoteCloudCredentials(ESTIMOTE_APP_ID, ESTIMOTE_APP_TOKEN);
        proximityObserver = new ProximityObserverBuilder(mActivity, cloudCredentials)
                .withBalancedPowerMode()
                .withScannerInForegroundService(notification)
                .withOnErrorAction(onErrorAction)
                .build();

        venueZone = proximityObserver.zoneBuilder()
                .forAttachmentKeyAndValue("place", "some_place")
                .inNearRange()
                .withOnEnterAction(onEnterAction)
                .withOnExitAction(onExitAction)
                .withOnChangeAction(onChangeAction)
                .create();

        observationHandler =
                proximityObserver
                        .addProximityZone(venueZone)
                        .start();
  1. Turn off Wi-Fi, and remove the SIM card (and any internet access)
  2. Start the app

Expected behavior: Either a warning or some error for the developer to deal with.

Actual behavior: Application crashes

Additional information

03-04 22:19:51.471 2384-2384/pt.company.mobile.company_at D/Error: ERR: exClass=java.lang.IllegalStateException
03-04 22:19:51.471 2384-2384/pt.company.mobile.company_at D/Error: ERR: exMsg=invoke(...) must not be null
03-04 22:19:51.471 2384-2384/pt.company.mobile.company_at D/Error: ERR: file=ProximityObservationUseCase.kt
03-04 22:19:51.471 2384-2384/pt.company.mobile.company_at D/Error: ERR: class=com.estimote.proximity_sdk.proximity.ProximityObservationUseCaseKt$sam$Consumer$78f55195
03-04 22:19:51.471 2384-2384/pt.company.mobile.company_at D/Error: ERR: method=accept line=-1
03-04 22:19:51.472 2384-2384/pt.company.mobile.company_at D/Error: ERR: stack=io.reactivex.exceptions.CompositeException: 2 exceptions occurred. 
                                                                at io.reactivex.internal.observers.LambdaObserver.onError(LambdaObserver.java:80)
                                                                at io.reactivex.internal.operators.observable.ObservableCreate$CreateEmitter.tryOnError(ObservableCreate.java:85)
                                                                at io.reactivex.internal.operators.observable.ObservableCreate$CreateEmitter.onError(ObservableCreate.java:73)
                                                                at com.estimote.proximity_sdk.proximity.ProximityObservationUseCase$stopMonitoringWhenDisposed$1$2.accept(ProximityObservationUseCase.kt:55)
                                                                at com.estimote.proximity_sdk.proximity.ProximityObservationUseCase$stopMonitoringWhenDisposed$1$2.accept(ProximityObservationUseCase.kt:17)
                                                                at io.reactivex.internal.observers.ConsumerSingleObserver.onError(ConsumerSingleObserver.java:47)
                                                                at io.reactivex.internal.operators.single.SingleMap$MapSingleObserver.onError(SingleMap.java:69)
                                                                at io.reactivex.internal.operators.single.SingleMap$MapSingleObserver.onError(SingleMap.java:69)
                                                                at io.reactivex.internal.operators.single.SingleMap$MapSingleObserver.onError(SingleMap.java:69)
                                                                at io.reactivex.internal.operators.single.SingleMap$MapSingleObserver.onError(SingleMap.java:69)
                                                                at io.reactivex.internal.operators.single.SingleObserveOn$ObserveOnSingleObserver.run(SingleObserveOn.java:79)
                                                                at io.reactivex.android.schedulers.HandlerScheduler$ScheduledRunnable.run(HandlerScheduler.java:109)
                                                                at android.os.Handler.handleCallback(Handler.java:751)
                                                                at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                at android.os.Looper.loop(Looper.java:154)
                                                                at android.app.ActivityThread.main(ActivityThread.java:6146)
                                                                at java.lang.reflect.Method.invoke(Native Method)
                                                                at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
                                                                at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
                                                              ComposedException 1 :
                                                            	**java.net.UnknownHostException: Unable to resolve host "cloud.estimote.com": No address associated with hostname**
                                                                at java.net.Inet6AddressImpl.lookupHostByName(Inet6AddressImpl.java:125)
                                                                at java.net.Inet6AddressImpl.lookupAllHostAddr(Inet6AddressImpl.java:74)
                                                                at java.net.InetAddress.getAllByName(InetAddress.java:752)
                                                                at okhttp3.Dns$1.lookup(Dns.java:39)
                                                                at okhttp3.internal.connection.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:171)
                                                                at okhttp3.internal.connection.RouteSelector.nextProxy(RouteSelector.java:137)
                                                                at okhttp3.internal.connection.RouteSelector.next(RouteSelector.java:82)
                                                                at okhttp3.internal.connection.StreamAllocation.findConnection(StreamAllocation.java:171)
                                                                at okhttp3.internal.connection.StreamAllocation.findHealthyConnection(StreamAllocation.java:121)
                                                                at okhttp3.internal.connection.StreamAllocation.newStream(StreamAllocation.java:100)
                                                                at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.java:42)
                                                                at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
                                                                at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67)
                                                                at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.java:93)
                                                                at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
                                                                at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67)
                                                                at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.java:93)
                                                                at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
                                                                at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.java:120)
                                                                at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
                                                                at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67)
                                                                at com.estimote.cloud_plugin.common.AuthorizationHeaderInterceptor.intercept(HttpInterceptors.kt:26)
                                                                at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
                                                                at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67)
                                                                at com.estimote.cloud_plugin.common.UserAgentHeaderInterceptor.intercept(HttpInterceptors.kt:16)
                                                            		at okhttp3.

Why you reply fast on github but i message on facebook and post in forum and also email the support no reply so i try to post a issue on github

Prerequisites

  • Put an X between the brackets on this line if you have done all of the following:
    • My beacons have Estimote Monitoring enabled (Check it in the Estimote Cloud, or via app)
    • My Android device/devices supports BLE and has Android OS version >= 5.0.0
    • My Android device/devices have bluetooth enabled
    • My app has Location Permissions granted

Basic information

Estimote SDK version: [Paste here the SDK version that you are using (like 0.1.0-alpha.6)]

Android devices affected: [Paste here your Android device model/models that you are having problems with.]

Android OS version affected: [Android OS version (ex. Oreo 8.0.0)]

Beacon hardware version: [Paste here your beacons hardware version (you can check that in Estimote Cloud).]

Description

[Description of the issue]

(Optional) Steps to reproduce:

  1. [First Step]
  2. [Second Step]
  3. [and so on...]

Expected behavior: [What you expect to happen]

Actual behavior: [What actually happens]

Additional information

Add here any logs you want to attach, or any other info, like pictures for example

Crash when toggling Airplane mode

Hi,

Using latest Proximity SDK (alpha 6), it seems that I sometimes have hard crash of my App when activating / deactivating airplane mode.

Here's the stacktrace grabbed with Crashlytics:

Fatal Exception: io.reactivex.exceptions.CompositeException: 2 exceptions occurred. at io.reactivex.internal.observers.LambdaObserver.onError(LambdaObserver.java:80) at io.reactivex.internal.operators.observable.ObservableCreate$CreateEmitter.tryOnError(ObservableCreate.java:85) at io.reactivex.internal.operators.observable.ObservableCreate$CreateEmitter.onError(ObservableCreate.java:73) at com.estimote.proximity_sdk.proximity.ProximityObservationUseCase$stopMonitoringWhenDisposed$1$2.accept(ProximityObservationUseCase.kt:54) at com.estimote.proximity_sdk.proximity.ProximityObservationUseCase$stopMonitoringWhenDisposed$1$2.accept(ProximityObservationUseCase.kt:16) at io.reactivex.internal.observers.ConsumerSingleObserver.onError(ConsumerSingleObserver.java:47) at io.reactivex.internal.operators.single.SingleMap$MapSingleObserver.onError(SingleMap.java:69) at io.reactivex.internal.operators.single.SingleMap$MapSingleObserver.onError(SingleMap.java:69) at io.reactivex.internal.operators.single.SingleMap$MapSingleObserver.onError(SingleMap.java:69) at io.reactivex.internal.operators.single.SingleMap$MapSingleObserver.onError(SingleMap.java:69) at io.reactivex.internal.operators.single.SingleObserveOn$ObserveOnSingleObserver.run(SingleObserveOn.java:79) at io.reactivex.android.schedulers.HandlerScheduler$ScheduledRunnable.run(HandlerScheduler.java:109) at android.os.Handler.handleCallback(Handler.java:751) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6692) at java.lang.reflect.Method.invoke(Method.java) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1468) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358) Caused by io.reactivex.exceptions.CompositeException$CompositeExceptionCausalChain: Chain of Causes for CompositeException In Order Received => at com.crashlytics.android.core.TrimmedThrowableData.<init>(TrimmedThrowableData.java:19) at com.crashlytics.android.core.CrashlyticsController.writeSessionEvent(CrashlyticsController.java:1293) at com.crashlytics.android.core.CrashlyticsController.writeFatal(CrashlyticsController.java:1004) at com.crashlytics.android.core.CrashlyticsController.access$400(CrashlyticsController.java:67) at com.crashlytics.android.core.CrashlyticsController$7.call(CrashlyticsController.java:319) at com.crashlytics.android.core.CrashlyticsController$7.call(CrashlyticsController.java:312) at java.util.concurrent.FutureTask.run(FutureTask.java:237) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607) at io.fabric.sdk.android.services.common.ExecutorUtils$1$1.onRun(ExecutorUtils.java:75) at io.fabric.sdk.android.services.common.BackgroundPriorityRunnable.run(BackgroundPriorityRunnable.java:30) at java.lang.Thread.run(Thread.java:762) Caused by java.net.ConnectException: Failed to connect to /192.168.10.100:8080 at okhttp3.internal.connection.RealConnection.connectSocket(RealConnection.java:225) at okhttp3.internal.connection.RealConnection.connectTunnel(RealConnection.java:198) at okhttp3.internal.connection.RealConnection.connect(RealConnection.java:147) at okhttp3.internal.connection.StreamAllocation.findConnection(StreamAllocation.java:195) at okhttp3.internal.connection.StreamAllocation.findHealthyConnection(StreamAllocation.java:121) at okhttp3.internal.connection.StreamAllocation.newStream(StreamAllocation.java:100) at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.java:42) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67) at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.java:93) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67) at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.java:93) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92) at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.java:120) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67) at com.estimote.cloud_plugin.common.AuthorizationHeaderInterceptor.intercept(HttpInterceptors.kt:26) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67) at com.estimote.cloud_plugin.common.UserAgentHeaderInterceptor.intercept(HttpInterceptors.kt:16) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67) at com.estimote.cloud_plugin.common.ContentTypeHeaderInterceptor.intercept(HttpInterceptors.kt:9) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67) at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:185) at okhttp3.RealCall.execute(RealCall.java:69) at retrofit2.OkHttpCall.execute(OkHttpCall.java:174) at com.jakewharton.retrofit2.adapter.rxjava2.CallObservable.subscribeActual(CallObservable.java:41) at io.reactivex.Observable.subscribe(Observable.java:10903) at com.jakewharton.retrofit2.adapter.rxjava2.BodyObservable.subscribeActual(BodyObservable.java:34) at io.reactivex.Observable.subscribe(Observable.java:10903) at io.reactivex.internal.operators.observable.ObservableSingleSingle.subscribeActual(ObservableSingleSingle.java:35) at io.reactivex.Single.subscribe(Single.java:2707) at io.reactivex.internal.operators.single.SingleMap.subscribeActual(SingleMap.java:34) at io.reactivex.Single.subscribe(Single.java:2707) at io.reactivex.internal.operators.single.SingleMap.subscribeActual(SingleMap.java:34) at io.reactivex.Single.subscribe(Single.java:2707) at io.reactivex.internal.operators.single.SingleMap.subscribeActual(SingleMap.java:34) at io.reactivex.Single.subscribe(Single.java:2707) at io.reactivex.internal.operators.single.SingleSubscribeOn$SubscribeOnObserver.run(SingleSubscribeOn.java:89) at io.reactivex.Scheduler$DisposeTask.run(Scheduler.java:452) at io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:61) at io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:52) at java.util.concurrent.FutureTask.run(FutureTask.java:237) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:272) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607) at java.lang.Thread.run(Thread.java:762) Caused by java.net.ConnectException: Network is unreachable at java.net.PlainSocketImpl.socketConnect(PlainSocketImpl.java) at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:334) at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:196) at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:178) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:356) at java.net.Socket.connect(Socket.java:586) at okhttp3.internal.platform.AndroidPlatform.connectSocket(AndroidPlatform.java:63) at okhttp3.internal.connection.RealConnection.connectSocket(RealConnection.java:223) at okhttp3.internal.connection.RealConnection.connectTunnel(RealConnection.java:198) at okhttp3.internal.connection.RealConnection.connect(RealConnection.java:147) at okhttp3.internal.connection.StreamAllocation.findConnection(StreamAllocation.java:195) at okhttp3.internal.connection.StreamAllocation.findHealthyConnection(StreamAllocation.java:121) at okhttp3.internal.connection.StreamAllocation.newStream(StreamAllocation.java:100) at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.java:42) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67) at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.java:93) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67) at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.java:93) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92) at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.java:120) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67) at com.estimote.cloud_plugin.common.AuthorizationHeaderInterceptor.intercept(HttpInterceptors.kt:26) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67) at com.estimote.cloud_plugin.common.UserAgentHeaderInterceptor.intercept(HttpInterceptors.kt:16) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67) at com.estimote.cloud_plugin.common.ContentTypeHeaderInterceptor.intercept(HttpInterceptors.kt:9) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67) at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:185) at okhttp3.RealCall.execute(RealCall.java:69) at retrofit2.OkHttpCall.execute(OkHttpCall.java:174) at com.jakewharton.retrofit2.adapter.rxjava2.CallObservable.subscribeActual(CallObservable.java:41) at io.reactivex.Observable.subscribe(Observable.java:10903) at com.jakewharton.retrofit2.adapter.rxjava2.BodyObservable.subscribeActual(BodyObservable.java:34) at io.reactivex.Observable.subscribe(Observable.java:10903) at io.reactivex.internal.operators.observable.ObservableSingleSingle.subscribeActual(ObservableSingleSingle.java:35) at io.reactivex.Single.subscribe(Single.java:2707) at io.reactivex.internal.operators.single.SingleMap.subscribeActual(SingleMap.java:34) at io.reactivex.Single.subscribe(Single.java:2707) at io.reactivex.internal.operators.single.SingleMap.subscribeActual(SingleMap.java:34) at io.reactivex.Single.subscribe(Single.java:2707) at io.reactivex.internal.operators.single.SingleMap.subscribeActual(SingleMap.java:34) at io.reactivex.Single.subscribe(Single.java:2707) at io.reactivex.internal.operators.single.SingleSubscribeOn$SubscribeOnObserver.run(SingleSubscribeOn.java:89) at io.reactivex.Scheduler$DisposeTask.run(Scheduler.java:452) at io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:61) at io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:52) at java.util.concurrent.FutureTask.run(FutureTask.java:237) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:272) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607) at java.lang.Thread.run(Thread.java:762) Caused by java.lang.IllegalStateException: invoke(...) must not be null at com.estimote.proximity_sdk.proximity.ProximityObservationUseCaseKt$sam$Consumer$c4447207.accept(ProximityObservationUseCase.kt) at io.reactivex.internal.observers.LambdaObserver.onError(LambdaObserver.java:77) at io.reactivex.internal.operators.observable.ObservableCreate$CreateEmitter.tryOnError(ObservableCreate.java:85) at io.reactivex.internal.operators.observable.ObservableCreate$CreateEmitter.onError(ObservableCreate.java:73) at com.estimote.proximity_sdk.proximity.ProximityObservationUseCase$stopMonitoringWhenDisposed$1$2.accept(ProximityObservationUseCase.kt:54) at com.estimote.proximity_sdk.proximity.ProximityObservationUseCase$stopMonitoringWhenDisposed$1$2.accept(ProximityObservationUseCase.kt:16) at io.reactivex.internal.observers.ConsumerSingleObserver.onError(ConsumerSingleObserver.java:47) at io.reactivex.internal.operators.single.SingleMap$MapSingleObserver.onError(SingleMap.java:69) at io.reactivex.internal.operators.single.SingleMap$MapSingleObserver.onError(SingleMap.java:69) at io.reactivex.internal.operators.single.SingleMap$MapSingleObserver.onError(SingleMap.java:69) at io.reactivex.internal.operators.single.SingleMap$MapSingleObserver.onError(SingleMap.java:69) at io.reactivex.internal.operators.single.SingleObserveOn$ObserveOnSingleObserver.run(SingleObserveOn.java:79) at io.reactivex.android.schedulers.HandlerScheduler$ScheduledRunnable.run(HandlerScheduler.java:109) at android.os.Handler.handleCallback(Handler.java:751) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6692) at java.lang.reflect.Method.invoke(Method.java) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1468) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358)

Is there a way to prevent these crash by putting some try and catch somewhere?

Missing dependency: com.estimote:scanning-plugin:0.14.0

Prerequisites

  • Put an X between the brackets on this line if you have done all of the following:
    • My beacons have Estimote Monitoring enabled (Check it in the Estimote Cloud, or via app)
    • My Android device/devices supports BLE and has Android OS version >= 5.0.0
    • My Android device/devices have bluetooth enabled
    • My app has Location Permissions granted

Basic information

Estimote SDK version: 0.3.0

Description

According to your README.md, the latest SDK available for Proximity SDK is 0.3.0. However, I cannot update my project because of the following error:

FAILURE: Build failed with an exception.

* What went wrong:
A problem occurred configuring project ':app'.
> Could not resolve all dependencies for configuration ':app:_debugApk'.
   > A problem occurred configuring project ':react-native-estimote-bridge'.
      > Could not resolve all dependencies for configuration ':react-native-estimote-bridge:_debugPublishCopy'.
         > Could not find com.estimote:scanning-plugin:0.14.0.
           Required by:
               Ynovcampus:react-native-estimote-bridge:unspecified > com.estimote:proximity-sdk:0.3.0

Beacon scan doesn't work with withBalancedPowerMode on Android 5.0 Api 21 Samsung Note 3

Prerequisites

  • Put an X between the brackets on this line if you have done all of the following:
    • My beacons have Estimote Monitoring enabled (Check it in the Estimote Cloud, or via app)
    • My Android device/devices supports BLE and has Android OS version >= 5.0.0
    • My Android device/devices have Bluetooth enabled
    • My app has Location Permissions granted

Basic information

Estimote SDK version: 0.4.1 and mustard:0.2.1

Android devices affected: Samsung Note 3 (so far)

Android OS version affected: Android Lollipop 5.0 (so far)

Beacon hardware version: F3.3 / Estimote OS 4.13.2

Description

When beacon scan start, never detect beacons, but it doesn't show error or start the scanning as per logs check.

We test our app, and also Estimote Proximity App on Git, but when you use

    proximityObserver = ProximityObserverBuilder(applicationContext, cloudCredentials)
            .withScannerInForegroundService(notification)
            .withBalancedPowerMode()
            .build()

It doesn't work on our Samsung Note 3, Android 5.0.0 Api 21, there might be others. But it works only with:

    proximityObserver = ProximityObserverBuilder(applicationContext, cloudCredentials)
            .withScannerInForegroundService(notification)
            .withLowLatencyPowerMode()
            .build()

(Optional) Steps to reproduce:

  1. Wait for first scan
  2. check app logs and no error, or Bluetooth scanning message, and no event are fired (onEnter, onChange, onExit)

Expected behavior: Scan for beacons, zone event should be fired upon a beacon detection

Actual behavior: No zone event's are fired, or error show

Additional information

When i add the proximityObserver .addProximityZone(venueZone) .start(); inside my MainActivity The App automatically Close

Prerequisites

  • Put an X between the brackets on this line if you have done all of the following:
    • My beacons have Estimote Monitoring enabled (Check it in the Estimote Cloud, or via app)
    • My Android device/devices supports BLE and has Android OS version >= 5.0.0
    • My Android device/devices have bluetooth enabled
    • My app has Location Permissions granted

Basic information

Estimote SDK version: [Current version ]

Android devices affected: [Paste here your Android device model/models that you are having problems with.]

Android OS version affected: [Android OS version (ex. Oreo 8.0.0)]

Beacon hardware version: [Paste here your beacons hardware version (you can check that in Estimote Cloud).]

Description

[Description of the issue]

(Optional) Steps to reproduce:

  1. [First Step]
  2. [Second Step]
  3. [and so on...]

Expected behavior: [What you expect to happen]
Should open The App

Actual behavior: [What actually happens]
After i Press run on Android Studio it open then close Automatically

Additional information

Add here any logs you want to attach, or any other info, like pictures for example

Crash when staring and connecting to Estimote Cloud, No beacons near by

Prerequisites

  • [X ] Put an X between the brackets on this line if you have done all of the following:
    • My beacons have Estimote Monitoring enabled (Check it in the Estimote Cloud, or via app)
    • My Android device/devices supports BLE and has Android OS version >= 5.0.0
    • My Android device/devices have bluetooth enabled
    • My app has Location Permissions granted

Basic information

Estimote SDK version: Android-Proximity-SDK 0.4.3

Android devices affected: Galaxy A3

Android OS version affected: 5.0.2

Beacon hardware version: No beacons near by

Description

Customer start app, when connecting to estimote cloud it crash, according to Crashlytics it was a timeout

The customer didn't had a near by beacon, but since it was on another country we can test with the same version with a beacon, the fact that one beacon wasn't near surely it's irrelevant.

(Optional) Steps to reproduce:

  1. Start the app
  2. Wait for the crash

Expected behavior: Not to crash

Actual behavior: Crash

Additional information

If need we can provided access to crashlytics

Fatal Exception: io.b.c.d
timeout
io.reactivex.internal.observers.CallbackCompletableObserver.accept
Caused by java.net.SocketTimeoutException
timeout
arrow_right
okio.Okio$4.newTimeoutException (Okio.java:232)
okio.AsyncTimeout.exit (AsyncTimeout.java:275)
okio.AsyncTimeout$2.read (AsyncTimeout.java:243)
okio.RealBufferedSource.indexOf (RealBufferedSource.java:355)
okio.RealBufferedSource.readUtf8LineStrict (RealBufferedSource.java:227)
okhttp3.internal.http1.Http1Codec.readHeaderLine (Http1Codec.java:215)
okhttp3.internal.http1.Http1Codec.readResponseHeaders (Http1Codec.java:189)
okhttp3.internal.http.CallServerInterceptor.intercept (CallServerInterceptor.java:88)
okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:147)
okhttp3.internal.connection.ConnectInterceptor.intercept (ConnectInterceptor.java:45)
okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:147)
okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:121)
okhttp3.internal.cache.CacheInterceptor.intercept (CacheInterceptor.java:93)
okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:147)
okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:121)
okhttp3.internal.http.BridgeInterceptor.intercept (BridgeInterceptor.java:93)
okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:147)
okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept (RetryAndFollowUpInterceptor.java:126)
okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:147)
okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:121)
com.estimote.cloud_plugin.common.AuthorizationHeaderInterceptor.intercept (HttpInterceptors.kt:26)
okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:147)
okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:121)
com.estimote.cloud_plugin.common.UserAgentHeaderInterceptor.intercept (HttpInterceptors.kt:16)
okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:147)
okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:121)
com.estimote.cloud_plugin.common.ContentTypeHeaderInterceptor.intercept (HttpInterceptors.kt:9)
okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:147)
okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:121)
okhttp3.RealCall.getResponseWithInterceptorChain (RealCall.java:200)
okhttp3.RealCall.execute (RealCall.java:77)

Exception involving com.estimote:mustard library

Prerequisites

  • [x ] Put an X between the brackets on this line if you have done all of the following:
    • My beacons have Estimote Monitoring enabled (Check it in the Estimote Cloud, or via app)
    • My Android device/devices supports BLE and has Android OS version >= 5.0.0
    • My Android device/devices have bluetooth enabled
    • My app has Location Permissions granted

Basic information

Estimote SDK version: com.estimote:proximity-sdk:0.2.3 com.estimote:mustard:0.+

Android devices affected: Samsung Galaxy S5 SM-G900F

Android OS version affected: Android 6.0.1

Beacon hardware version: F3.3

Description

Hi,
I tried to install my application which uses proximity sdk on a device running android 7 and I have no problems. Now I tried to install the same on a samsung s5 with android 6.0.1 and I got the following exception caused by mustard library
:
Caused by: android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?
at android.app.ContextImpl.startActivity(ContextImpl.java:734)
at android.app.ContextImpl.startActivity(ContextImpl.java:721)
at android.content.ContextWrapper.startActivity(ContextWrapper.java:345)
at com.estimote.mustard.rx_goodness.rx_activity_result.RxActivityResult.startActivityForResult(RxActivityResult.kt:31)
at com.estimote.mustard.rx_goodness.rx_activity_result.RxActivityResult.startActivityForResult$default(RxActivityResult.kt:28)
at com.estimote.mustard.rx_goodness.rx_requirements_wizard.spells.FulfillLocationPermissionRequirementSpell.fulfill(FulfillLocationPermissionRequirementSpell.kt:26)
at com.estimote.mustard.rx_goodness.rx_requirements_wizard.EstimoteRequirementsWizard.checkAndFulfillLocationPermission(EstimoteRequirementsWizard.kt:26)
at com.estimote.mustard.rx_goodness.rx_requirements_wizard.EstimoteRequirementsWizard.fulfillRequirements(EstimoteRequirementsWizard.kt:19)
at hiis.isti.cnr.it.estimoteproximitydelegate.MainActivity.onCreate(MainActivity.java:91)

Line 91 of the MainActivity.java is the follpwing:

RequirementsWizardFactory.createEstimoteRequirementsWizard().fulfillRequirements(getApplicationContext(),new Function0() {
@OverRide public Unit invoke() {
Log.d("app", "requirements fulfilled");
checkConfiguration();
return null;
}
},
// onRequirementsMissing
new Function1<List<? extends Requirement>, Unit>() {
@OverRide public Unit invoke(List<? extends Requirement> requirements) {
TextView txtMsg = findViewById(R.id.txtMsg);
txtMsg.setText("Missing Requirements");

                    Log.e("app", "requirements missing: " + requirements);
                    return null;
                }
            },
            // onError
            new Function1<Throwable, Unit>() {
                @Override public Unit invoke(Throwable throwable) {
                    TextView txtMsg = findViewById(R.id.txtMsg);
                    txtMsg.setText("Missing Requirements");
                    Log.e("app", "requirements error: " + throwable);
                    return null;
                }
            });

What do I have to modify?

Thank you,

best

Marco

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.