Giter Club home page Giter Club logo

android-indoor-sdk's People

Contributors

ljdk avatar paweldylag avatar wafel82 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

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-indoor-sdk's Issues

Exemple not working

Hello,

I am sorry to disturb you, but I compile and install your code Exemple on my smartphone, the first page is ok, when click on cloud project, your code failed

08-07 16:21:01.644 7879-7879/com.estimote.indoorapp E/AndroidRuntime: FATAL EXCEPTION: main
                                                                      Process: com.estimote.indoorapp, PID: 7879
                                                                      java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.graphics.Bitmap.isRecycled()' on a null object reference
                                                                          at android.graphics.Canvas.throwIfCannotDraw(Canvas.java:1224)
                                                                          at android.view.GLES20Canvas.drawBitmap(GLES20Canvas.java:589)
                                                                          at com.estimote.indoorsdk.view.IndoorLocationView.drawBeacons(Unknown Source)
                                                                          at com.estimote.indoorsdk.view.IndoorLocationView.onDraw(Unknown Source)
                                                                          at android.view.View.draw(View.java:15518)
                                                                          at android.view.View.updateDisplayListIfDirty(View.java:14449)
                                                                          at android.view.View.getDisplayList(View.java:14472)
                                                                          at android.view.View.draw(View.java:15239)
                                                                          at android.view.ViewGroup.drawChild(ViewGroup.java:3603)
                                                                          at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3397)
                                                                          at android.view.View.updateDisplayListIfDirty(View.java:14444)
                                                                          at android.view.View.getDisplayList(View.java:14472)
                                                                          at android.view.View.draw(View.java:15239)
                                                                          at android.view.ViewGroup.drawChild(ViewGroup.java:3603)
                                                                          at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3397)
                                                                          at android.view.View.updateDisplayListIfDirty(View.java:14444)
                                                                          at android.view.View.getDisplayList(View.java:14472)
                                                                          at android.view.View.draw(View.java:15239)
                                                                          at android.view.ViewGroup.drawChild(ViewGroup.java:3603)
                                                                          at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3397)
                                                                          at android.view.View.updateDisplayListIfDirty(View.java:14444)
                                                                          at android.view.View.getDisplayList(View.java:14472)
                                                                          at android.view.View.draw(View.java:15239)
                                                                          at android.view.ViewGroup.drawChild(ViewGroup.java:3603)
                                                                          at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3397)
                                                                          at android.view.View.updateDisplayListIfDirty(View.java:14444)
                                                                          at android.view.View.getDisplayList(View.java:14472)
                                                                          at android.view.View.draw(View.java:15239)
                                                                          at android.view.ViewGroup.drawChild(ViewGroup.java:3603)
                                                                          at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3397)
                                                                          at android.view.View.updateDisplayListIfDirty(View.java:14444)
                                                                          at android.view.View.getDisplayList(View.java:14472)
                                                                          at android.view.View.draw(View.java:15239)
                                                                          at android.view.ViewGroup.drawChild(ViewGroup.java:3603)
                                                                          at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3397)
                                                                          at android.view.View.draw(View.java:15521)
                                                                          at android.widget.FrameLayout.draw(FrameLayout.java:592)
                                                                          at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:2883)
                                                                          at android.view.View.updateDisplayListIfDirty(View.java:14449)
                                                                          at android.view.View.getDisplayList(View.java:14472)
                                                                          at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:266)
                                                                          at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:272)
                                                                          at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:311)
                                                                          at android.view.ViewRootImpl.draw(ViewRootImpl.java:2534)
                                                                          at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2366)
                                                                          at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1994)
                                                                          at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1062)
                                                                          at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5873)
                                                                          at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767)
                                                                          at android.view.Choreographer.doCallbacks(Choreographer.java:580)
                                                                          at android.view.Choreographer.doFrame(Choreographer.java:550)
                                                                          at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753)
                                                                          at android.os.Handler.handleCallback(Handler.java:739)
                                                                          at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                          at android.os.Looper.loop(Looper.java:135)
                                                                          at android.app.ActivityThread.main(ActivityThread.java:5753)
                                                                          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:1405)
                                                                          at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1200)

Have you any idea for resolve this problem ?

Thanks !

OnPositionUpdate being called with same LocationPosition Coordinates for 10+ times

Prerequisites

  • Put an X between the brackets on this line if you have done all of the following:
    My beacons have Estimote Location packet 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:indoorsdk:2.5.3')]

Android devices affected: [Samsung galaxy Tab A (2018) , Samsung galaxy S7 ]

Android OS version affected: [('Oreo 8.0.0', 'Oreo 8.1.0')]

Beacon hardware version: [(4.14.4).]

Description

[
we are facing a serious lag at producing new coordinates after receiving bluetooth packets and feeding them to IndoorLocationManager
onPositionUpdate call back gets called with same coordinates for 10+ times before passing new coordinates.

knowing that we tried to use a manual BluetoothScanner set-up and configured with every power mode from 'com.estimote:scanning-plugin:0.25.1'
]

Steps to reproduce:

this occurs using the sample android app for indoorLocationSDK, even with a standalone app using either JAVA or Kotlin

Expected behavior: [locate phone inside the map with updated coordinates every time onPositionUpdate gets called]

Actual behavior: [onPositionUpdate gets called with same locationPosition(coordinates) for 10+ times]

IOS SDK works fine and updates position's coordinates every second

D/Scanner: 862572595770142
D/Scanner: 862572650194569
D/Scanner: 862572709889621
D/onPositionUpdate: X : 16.66068835019017, Y : 7.8946914599552205
D/Scanner: 862572742171183
D/Scanner: 862572759333215
D/Scanner: 862572764812486
D/Scanner: 862572789582069
D/Scanner: 862572810395350
D/Scanner: 862572920277173
    862572922669360
D/Scanner: 862572946929673
D/Scanner: 862573058964881
D/Scanner: 862573472745714
D/Scanner: 862573656946600
D/onPositionUpdate: X : 16.66068835019017, Y : 7.8946914599552205
D/Scanner: 862573769849985
D/Scanner: 862573805992068
D/Scanner: 862573847166652
D/Scanner: 862573857678631
D/Scanner: 862573942722329
D/Scanner: 862573974062589
D/Scanner: 862573980025610
D/Scanner: 862574086527173
D/Scanner: 862574146367277
D/Scanner: 862574165586131
D/Scanner: 862574247477641
D/Scanner: 862574431533787
D/Scanner: 862574447681495
D/Scanner: 862574491010193
D/Scanner: 862574577520089
D/Scanner: 862574614399724
D/onPositionUpdate: X : 16.66068835019017, Y : 7.8946914599552205
D/Scanner: 862574766614568
D/Scanner: 862574776974360
D/Scanner: 862574860534933
D/Scanner: 862574889709933
D/Scanner: 862574985606808
D/Scanner: 862575131477953
D/Scanner: 862575182356964
D/Scanner: 862575185118162
D/Scanner: 862575232545766
D/Scanner: 862575312892328
D/Scanner: 862575434068005
D/Scanner: 862575439830974
D/Scanner: 862575441889568
D/Scanner: 862575456566391
D/Scanner: 862575468915766
D/Scanner: 862575482291807
D/Scanner: 862575599218266
D/Scanner: 862575641822537
D/Scanner: 862575659209151
D/Scanner: 862575679104776
D/onPositionUpdate: X : 16.66068835019017, Y : 7.8946914599552205
D/Scanner: 862576017256911
D/Scanner: 862576146427432
D/Scanner: 862576262596286
D/Scanner: 862576448748161
D/Scanner: 862576464564515
    862576466973942
D/Scanner: 862576549617224
D/Scanner: 862576567350297
D/onPositionUpdate: X : 16.66068835019017, Y : 7.8946914599552205
D/Scanner: 862576735205349
D/Scanner: 862576837856651
D/Scanner: 862576846036599
D/Scanner: 862576873200661
D/Scanner: 862576903508786
D/Scanner: 862576967721390
D/Scanner: 862576969834671
D/Scanner: 862577183364880
D/Scanner: 862577211294046
D/Scanner: 862577314589515
    862577324928369
D/Scanner: 862577389828473
D/Scanner: 862577476493942
D/Scanner: 862577485012900
D/Scanner: 862577531752327
D/Scanner: 862577545588005
D/Scanner: 862577679419671
D/Scanner: 862577710940661
D/onPositionUpdate: X : 16.66068835019017, Y : 7.8946914599552205
D/Scanner: 862577747736754
    862577753342744
D/Scanner: 862577773344359
D/Scanner: 862577796632952
D/Scanner: 862577804150400
D/Scanner: 862577964000713
D/Scanner: 862577975766754
D/Scanner: 862577992679775
D/Scanner: 862578004619098
D/Scanner: 862578164680817
D/Scanner: 862578170509150
D/Scanner: 862578440390817
D/Scanner: 862578641174827
D/onPositionUpdate: X : 16.66068835019017, Y : 7.8946914599552205
D/Scanner: 862578744410296
D/Scanner: 862578769323369
    862578781424254
D/Scanner: 862578841225139
D/Scanner: 862579050947431
D/Scanner: 862579169316858
D/Scanner: 862579203460556
D/Scanner: 862579252105764
    862579262200452
D/Scanner: 862579363933473
D/Scanner: 862579374231702
D/Scanner: 862579467425764
D/Scanner: 862579474358889
D/Scanner: 862579673309566
D/Scanner: 862579677466806
D/onPositionUpdate: X : 16.66068835019017, Y : 7.8946914599552205
D/Scanner: 862579850443212
D/Scanner: 862579858593108
D/Scanner: 862579882824722
D/Scanner: 862579941698056
D/Scanner: 862579979164774
D/Scanner: 862579994664306
D/Scanner: 862580081559566
D/Scanner: 862580141125972
D/Scanner: 862580248651806
D/Scanner: 862580252341962
D/Scanner: 862580283238160
D/Scanner: 862580285522795
D/Scanner: 862580295170295
D/Scanner: 862580434245503
D/Scanner: 862580449976389
D/Scanner: 862580476310503
D/Scanner: 862580571475555
D/Scanner: 862580646371233
D/onPositionUpdate: X : 16.66068835019017, Y : 7.8946914599552205
D/Scanner: 862580776362951
D/Scanner: 862580982525972
D/Scanner: 862581241841753
D/Scanner: 862581356202326
D/Scanner: 862581432247326
D/Scanner: 862581551207326
D/Scanner: 862581658835868
D/Scanner: 862581685297065
D/Scanner: 862581709300190
D/onPositionUpdate: X : 16.66068835019017, Y : 7.8946914599552205
D/Scanner: 862581736017482
D/Scanner: 862581889777013
D/Scanner: 862581932935555
D/Scanner: 862581936829930
D/Scanner: 862581964966753
D/Scanner: 862582034135242
D/Scanner: 862582088910763
D/Scanner: 862582133942534
D/Scanner: 862582145568211
D/Scanner: 862582180460347
D/Scanner: 862582247686024
D/Scanner: 862582282752274
D/Scanner: 862582295003836
D/Scanner: 862582467009148
D/Scanner: 862582500712951
D/Scanner: 862582553964826
D/Scanner: 862582563611961
D/Scanner: 862582635104617
D/onPositionUpdate: X : 16.66068835019017, Y : 7.8946914599552205
D/Scanner: 862582737204669
D/Scanner: 862582933652065
D/Scanner: 862582951889200
D/Scanner: 862582957094200
D/Scanner: 862582965659357
D/Scanner: 862583081140450
D/Scanner: 862583143654304
D/Scanner: 862583290596648
D/Scanner: 862583335692898
D/Scanner: 862583355490346
D/Scanner: 862583359990606
D/Scanner: 862583384123940
D/Scanner: 862583387962325
D/Scanner: 862583435061388
D/Scanner: 862583541835033
D/Scanner: 862583562779148
    862583566921700
D/Scanner: 862583586047794
D/Scanner: 862583590211075
D/onPositionUpdate: X : 16.66068835019017, Y : 7.8946914599552205
D/Scanner: 862583785498002
D/Scanner: 862583789025294
D/Scanner: 862583834661283
D/Scanner: 862583857368263
D/Scanner: 862583982609356
D/Scanner: 862584059473835
D/Scanner: 862584157497377
D/Scanner: 862584181853940
D/Scanner: 862584185280606
    862584187690450
D/Scanner: 862584256273731
D/Scanner: 862584435986127
    862584441231648
D/Scanner: 862584463454408
D/Scanner: 862584635172585
D/Scanner: 862584657761596
D/Scanner: 862584676392116
D/onPositionUpdate: X : 17.518763250884895, Y : 8.588367877295239
D/Scanner: 862584796967116
D/Scanner: 862584845973627
D/Scanner: 862584886278366
D/Scanner: 862585002824720
D/Scanner: 862585068999929
D/Scanner: 862585075724043
D/Scanner: 862585253207272
D/Scanner: 862585275583314
D/Scanner: 862585466204824
D/Scanner: 862585481629460
D/Scanner: 862585556810606
D/Scanner: 862585578096647
D/Scanner: 862585615627585
D/onPositionUpdate: X : 17.518763250884895, Y : 8.588367877295239
D/Scanner: 862585761993262
D/Scanner: 862585836805137
    862585840951647
    862585844505397
D/Scanner: 862585854406751
D/Scanner: 862585882205606
D/Scanner: 862585889926022
D/Scanner: 862585967804043
D/Scanner: 862586289841907
D/Scanner: 862586345964355
D/Scanner: 862586348638053
D/Scanner: 862586378144980
D/Scanner: 862586450778626
D/Scanner: 862586464972793
D/Scanner: 862586484759720
D/Scanner: 862586695712168
D/Scanner: 862586720228886
D/onPositionUpdate: X : 17.518763250884895, Y : 8.588367877295239
D/Scanner: 862586766297845
D/Scanner: 862586801544095
D/Scanner: 862586881513261
D/Scanner: 862586887148678
D/Scanner: 862586903620345
    862586910396334
D/Scanner: 862586935286230
D/Scanner: 862587068276074
D/Scanner: 862587089320970
D/Scanner: 862587093732845
D/Scanner: 862587106869720
D/Scanner: 862587133962480
D/Scanner: 862587201189772
D/Scanner: 862587278335084
D/Scanner: 862587302935657
D/Scanner: 862587309898209
D/Scanner: 862587341427428
D/Scanner: 862587515236438
D/Scanner: 862587540718417
D/Scanner: 862587544633209
D/Scanner: 862587562087584
D/Scanner: 862587639262949
D/Scanner: 862587698165969
D/onPositionUpdate: X : 17.518763250884895, Y : 8.588367877295239
D/Scanner: 862587752582688
D/Scanner: 862587891477636
D/Scanner: 862587960180292
D/Scanner: 862587976555136
D/Scanner: 862588046940605
D/Scanner: 862588101249615
D/Scanner: 862588132531750
D/Scanner: 862588267277844
D/Scanner: 862588336970240
D/Scanner: 862588379636802
    862588385647167
D/Scanner: 862588444500709

Indoor location app is crashing while running

Prerequisites

  • [X ] Put an X between the brackets on this line if you have done all of the following:
    • My beacons have Estimote Location packet 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: [indoorsdk:2.0.1]

Android devices affected: [Redmi Note $]

Android OS version affected: [Android OS version (Nougat 7.0.0)]

Beacon hardware version: [F3.3]

Description

[My Indoor Location app is crashing while running. I want to pass location Id and display the location according to the location id.]

Steps to reproduce:

  1. [I have changed App ID and App token]
  2. [I have my location name]
  3. [and so on...]

Expected behavior: [ My current indoor location]

Actual behavior: [ App is crashing without loading anything]

(Optional) Additional information

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

I am copying my code below.

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import com.estimote.cloud_plugin.common.EstimoteCloudCredentials;
import com.estimote.indoorsdk.IndoorLocationManagerBuilder;
import com.estimote.indoorsdk_module.algorithm.IndoorLocationManager;
import com.estimote.indoorsdk_module.algorithm.OnPositionUpdateListener;
import com.estimote.indoorsdk_module.algorithm.ScanningIndoorLocationManager;
import com.estimote.indoorsdk_module.cloud.CloudCallback;
import com.estimote.indoorsdk_module.cloud.EstimoteCloudException;
import com.estimote.indoorsdk_module.cloud.IndoorCloudManager;
import com.estimote.indoorsdk_module.cloud.IndoorCloudManagerFactory;
import com.estimote.indoorsdk_module.cloud.Location;
import com.estimote.indoorsdk_module.cloud.LocationPosition;
import com.estimote.indoorsdk_module.view.IndoorLocationView;

public class MainActivity extends AppCompatActivity {
public IndoorLocationManager indoorLocationManager;
public Location location;
IndoorLocationView indoorView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    IndoorCloudManager cloudManager = new IndoorCloudManagerFactory().create(getApplicationContext(), new EstimoteCloudCredentials("YOUR-APP-ID", "YOUR-APP-TOKEN"));
    cloudManager.getLocation("my-kitchen", new CloudCallback<Location>() {
        @Override
        public void success(Location location) {
            // store the Location object for later,
            // you will need it to initialize the IndoorLocationManager!
            //
            // you can also pass it to IndoorLocationView to display a map:
            indoorView = (IndoorLocationView) findViewById(R.id.indoor_view);
             indoorView.setLocation(location);
        }

        @Override
        public void failure(EstimoteCloudException e) {
            // oops!
        }
    });
    ScanningIndoorLocationManager indoorLocationManager =
            new IndoorLocationManagerBuilder(this, location, new EstimoteCloudCredentials("indoorappone-iaa", "29351fc19660c463a1a813d6271bdd8d"))
                    .withDefaultScanner()
                    .build();
    indoorLocationManager.setOnPositionUpdateListener(new OnPositionUpdateListener() {
        @Override
        public void onPositionUpdate(LocationPosition position) {
            // here, we update the IndoorLocationView with the current position,
            // but you can use the position for anything you want
            indoorView.updatePosition(position);
        }

        @Override
        public void onPositionOutsideLocation() {
            indoorView.hidePosition();
        }
    });

}
@Override
protected void onStart() {
    super.onStart();
    indoorLocationManager.startPositioning();
}

@Override
protected void onStop() {
    super.onStop();
    indoorLocationManager.stopPositioning();
}

}

How to create OFFLINE location builder in Android

I want to create a location builder in android via indoor SDK just like an iOS one

i want to track my beacons locally without the cloud, of course i will have to download the map once but it needs to be offline. There ain't no samples for such stuff. Can you please guide me to it?
I did find a sample with an indoor SDK, since it fetches the data from cloud. i actually want to get the location object directly from beaconScanner and it should be done OFFLINE

Thanks

Project not working with Android Studio 2.3 or even 3.0

Thank you for the much needed indoor solution for Android. However, I wasn't able to run it on neither Android Studio 2.3 nor 3.0.
It says that the project "Does not use the Gradle build system. I tried using the import wizard but to no avail.
So, what shall I do to get this project running?

Java Code

Sir can you upload java code of this project?

Estimote IndoorLocation works on Marshmallow but not Pixel 2 or the S9

Prerequisites

  • [x ] Put an X between the brackets on this line if you have done all of the following:
    • My beacons have Estimote Location packet 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:indoorsdk:2.5.3'
'com.estimote:sdk:1.0.12'

Android devices affected:
Pixel 2
Samsung S9 Plus

Android OS version affected: [Android OS version (ex. Oreo 8.0.0)]
Pie (Pixel 2)
Oreo (S9)

Beacon hardware version:
F3.3

Description

Using the sample code (described https://developer.estimote.com/indoor/android-tutorial/), the app worked as expected on Android Lollipop and Marshmallow. However, on phones with Android Oreo and Pie, it seems that the OnPositionUpdateListener always calls hidePosition().

Steps to reproduce:

  1. Follow the tutorial and create an apk
  2. Test the APK on the devices
  3. Run the app

Expected behavior:
An avatar that represents the user moves around in between the displayed beacon as the user moves around in real life.

Actual behavior:
The beacons are displayed, but the avatar is hidden as onPositionOutsideLocation is constantly called on the OnPositionUpdateListener. However, this only appears to be happening on our newer devices.

(Optional)

I am not sure if this is an operating system issue, but I suspect it may be related as the same exact apk works on the older phone models and not the newer ones.

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

No Available API in the SDK to customize multiple user locations in IndoorLocationView

Prerequisites

  • Put an X between the brackets on this line if you have done all of the following:
    • My beacons have Estimote Location packet 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: 2.5.3
Android devices affected: Samsung Galaxy S7
Android OS version affected: Android 8
Beacon hardware version: N/A

Description

SDK users cannot customize other location points inside the indoor location view map.
Our goal is to display the locations of multiple users inside the indoor location view map.
We attempted to implement this by saving all location data of each user in our own backend, and we created an HTTP API call to fetch the other location data present on that map, so that we can display the location of other users as well.

Steps to reproduce:

  1. Setup Estimote
  2. Navigate inside the indoor location view. You should be able to see your real time location in the map
  3. Do this on multiple phones inside a single location.
  4. Send all location of each user in a custom backend API.
  5. Fetch data on that backend API to retrieve other location points of other users.
  6. Display the other location of users in the map using:

` val points = mutableListOf()

    markersView?.data?.forEach {
        points.add(LocationPosition(it.x.toDouble(), it.y.toDouble(), it.z.toDouble()))
    }

    indoor_view.setCustomPoints(points)`

Expected behavior:

  • I should be able to customize the UI of other location points in the map.
  • I should be able to add a label on each location point
  • I should be able to customize colors for each point.

Actual behavior:

  • No available API to do this.

(Optional) Additional information

Screenshot:
The small yellow "dot" in the lower left is other custom point being displayed.

Screen Shot 2019-07-09 at 5 23 32 PM

Position Update does not work correctly

Prerequisites

  • Put an X between the brackets on this line if you have done all of the following:
    • My beacons have Estimote Location packet 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: Indoor SDK 2.1.0

**Android devices affected: Samsung Galaxy s7, Huawei p8 lite 2017

**Android OS version affected: 7.0

**Beacon hardware version: F3.3

Description

I'm trying to develope an application that use Indoor Location SDK to found a postion in a perimeter.
I build indoor location Map with the Estimote's app, but the onPosistionUpdate return the same posistion every time on Samsung s7, but when the app run on Huawei, posistion is updated two times but if i open Estimote app and i click on “configuration” to search nearby Beacons the app return to work correctly.

**Expected behavior: position should be change.

**Actual behavior: position does not change or the application works bad.

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

scanningIndoorLocationManager Not initialized

estimote
When im running the app Caused by: java.lang.IllegalArgumentException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, parameter location
at com.estimote.indoorsdk.algorithm.IndoorLocationManagerBuilder.(Unknown Source)
at com.saravanastores.seehash.saravanastores.MainActivity.onCreate(MainActivity.java:32)

please help me to solve the error, im using java code only not kotlin

onPositionOutsideLocation being called even inside the location

Hello,

I have followed the step by step instruction to set up the indoor location.

While I am outside the location, it calls the onPositionOutsideLocation correctly,

but when I am inside the location, it calls both onPositionUpdate and onPositionOutsideLocation

repeatedly. Is this normal behavior or an experimenting environment problem?

Store cloud location in sd card

Hi,

I'm developing an indoor navigation app for one of our client. The client production floor dont have any internet connection. So i would like to know can you guys add a function to download the location from cloud and store it in device (maybe like a json file or something i'm not sure). so that we can use it at place without network connection.
Thanks :)

Position Update Issues

Prerequisites

  • [X ] Put an X between the brackets on this line if you have done all of the following:
    • My beacons have Estimote Location packet 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: Indoor SDK 2.0.1

Android devices affected: Samsung Galaxy S8+

Android OS version affected: 7.0

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

Description

When using the Estimote Indoor Location SDK I am not getting updates on Android properly. When I start positioning updates I first get an initial position which is roughly correct, but all updates after that are the same position no matter where I move the device. This occurs in both my custom app and when building the example in this repo.

Steps to reproduce:

  1. Load up example app
  2. Select a location
  3. Start positioning
  4. Updates are not correct

Expected behavior:
The SDK should report back correct position updates like it does on iOS

Actual behavior:
It does not report back correct position updates.

Getting this issue after running the SDK

W/System.err: io.reactivex.exceptions.CompositeException: 2 exceptions occurred.
W/System.err: at io.reactivex.internal.subscribers.LambdaSubscriber.onError(LambdaSubscriber.java:79)
W/System.err: at io.reactivex.internal.subscribers.BasicFuseableSubscriber.onError(BasicFuseableSubscriber.java:101)
W/System.err: at io.reactivex.internal.subscribers.BasicFuseableSubscriber.onError(BasicFuseableSubscriber.java:101)
W/System.err: at io.reactivex.internal.subscribers.BasicFuseableSubscriber.onError(BasicFuseableSubscriber.java:101)
W/System.err: at io.reactivex.internal.subscribers.BasicFuseableSubscriber.fail(BasicFuseableSubscriber.java:111)
W/System.err: at io.reactivex.internal.operators.flowable.FlowableMap$MapSubscriber.onNext(FlowableMap.java:66)
W/System.err: at io.reactivex.internal.operators.flowable.FlowableFilter$FilterSubscriber.tryOnNext(FlowableFilter.java:74)
W/System.err: at io.reactivex.internal.operators.flowable.FlowableFilter$FilterSubscriber.onNext(FlowableFilter.java:52)
W/System.err: at io.reactivex.internal.operators.flowable.FlowableMap$MapConditionalSubscriber.onNext(FlowableMap.java:112)
W/System.err: at io.reactivex.internal.operators.flowable.FlowableMap$MapConditionalSubscriber.onNext(FlowableMap.java:112)
W/System.err: at io.reactivex.internal.operators.flowable.FlowableMap$MapConditionalSubscriber.onNext(FlowableMap.java:112)
W/System.err: at io.reactivex.internal.operators.flowable.FlowableMap$MapConditionalSubscriber.onNext(FlowableMap.java:112)
W/System.err: at io.reactivex.internal.operators.flowable.FlowableMap$MapConditionalSubscriber.onNext(FlowableMap.java:112)
W/System.err: at io.reactivex.internal.operators.flowable.FlowableRetryPredicate$RepeatSubscriber.onNext(FlowableRetryPredicate.java:71)
W/System.err: at io.reactivex.internal.operators.flowable.FlowableObserveOn$ObserveOnSubscriber.runAsync(FlowableObserveOn.java:400)
W/System.err: at io.reactivex.internal.operators.flowable.FlowableObserveOn$BaseObserveOnSubscriber.run(FlowableObserveOn.java:176)
W/System.err: at io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:61)
W/System.err: at io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:52)
W/System.err: at java.util.concurrent.FutureTask.run(FutureTask.java:237)
W/System.err: at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:269)
W/System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
W/System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
W/System.err: at java.lang.Thread.run(Thread.java:818)
W/System.err: ComposedException 1 :
W/System.err: kotlin.KotlinNullPointerException
W/System.err: at com.estimote.indoorsdk_module.algorithm.e.c.a(Unknown Source)
W/System.err: at com.estimote.indoorsdk_module.algorithm.e.c.a(Unknown Source)
W/System.err: at com.estimote.indoorsdk_module.algorithm.a$h.a(Unknown Source)
W/System.err: at com.estimote.indoorsdk_module.algorithm.a$h.apply(Unknown Source)
W/System.err: at io.reactivex.internal.operators.flowable.FlowableMap$MapSubscriber.onNext(FlowableMap.java:64)
W/System.err: at io.reactivex.internal.operators.flowable.FlowableFilter$FilterSubscriber.tryOnNext(FlowableFilter.java:74)
W/System.err: at io.reactivex.internal.operators.flowable.FlowableFilter$FilterSubscriber.onNext(FlowableFilter.java:52)
W/System.err: at io.reactivex.internal.operators.flowable.FlowableMap$MapConditionalSubscriber.onNext(FlowableMap.java:112)
W/System.err: at io.reactivex.internal.operators.flowable.FlowableMap$MapConditionalSubscriber.onNext(FlowableMap.java:112)
W/System.err: at io.reactivex.internal.operators.flowable.FlowableMap$MapConditionalSubscriber.onNext(FlowableMap.java:112)
W/System.err: at io.reactivex.internal.operators.flowable.FlowableMap$MapConditionalSubscriber.onNext(FlowableMap.java:112)
W/System.err: at io.reactivex.internal.operators.flowable.FlowableMap$MapConditionalSubscriber.onNext(FlowableMap.java:112)
W/System.err: at io.reactivex.internal.operators.flowable.FlowableRetryPredicate$RepeatSubscriber.onNext(FlowableRetryPredicate.java:71)
W/System.err: at io.reactivex.internal.operators.flowable.FlowableObserveOn$ObserveOnSubscriber.runAsync(FlowableObserveOn.java:400)
W/System.err: at io.reactivex.internal.operators.flowable.FlowableObserveOn$BaseObserveOnSubscriber.run(FlowableObserveOn.java:176)
W/System.err: at io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:61)
W/System.err: at io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:52)
W/System.err: at java.util.concurrent.FutureTask.run(FutureTask.java:237)
W/System.err: at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:269)
W/System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
W/System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
W/System.err: at java.lang.Thread.run(Thread.java:818)
W/System.err: ComposedException 2 :
W/System.err: java.lang.NullPointerException: println needs a message
W/System.err: at android.util.Log.println_native_inner(Native Method)
W/System.err: at android.util.Log.println_native(Log.java:290)
W/System.err: at android.util.Log.d(Log.java:323)
W/System.err: at com.estimote.indoorsdk_module.algorithm.a$3.a(Unknown Source)
W/System.err: at com.estimote.indoorsdk_module.algorithm.a$3.accept(Unknown Source)
W/System.err: at io.reactivex.internal.subscribers.LambdaSubscriber.onError(LambdaSubscriber.java:76)
W/System.err: at io.reactivex.internal.subscribers.BasicFuseableSubscriber.onError(BasicFuseableSubscriber.java:101)
W/System.err: at io.reactivex.internal.subscribers.BasicFuseableSubscriber.onError(BasicFuseableSubscriber.java:101)
W/System.err: at io.reactivex.internal.subscribers.BasicFuseableSubscriber.onError(BasicFuseableSubscriber.java:101)
W/System.err: at io.reactivex.internal.subscribers.BasicFuseableSubscriber.fail(BasicFuseableSubscriber.java:111)
W/System.err: at io.reactivex.internal.operators.flowable.FlowableMap$MapSubscriber.onNext(FlowableMap.java:66)
W/System.err: at io.reactivex.internal.operators.flowable.FlowableFilter$FilterSubscriber.tryOnNext(FlowableFilter.java:74)
W/System.err: at io.reactivex.internal.operators.flowable.FlowableFilter$FilterSubscriber.onNext(FlowableFilter.java:52)
W/System.err: at io.reactivex.internal.operators.flowable.FlowableMap$MapConditionalSubscriber.onNext(FlowableMap.java:112)
W/System.err: at io.reactivex.internal.operators.flowable.FlowableMap$MapConditionalSubscriber.onNext(FlowableMap.java:112)
W/System.err: at io.reactivex.internal.operators.flowable.FlowableMap$MapConditionalSubscriber.onNext(FlowableMap.java:112)
W/System.err: at io.reactivex.internal.operators.flowable.FlowableMap$MapConditionalSubscriber.onNext(FlowableMap.java:112)
W/System.err: at io.reactivex.internal.operators.flowable.FlowableMap$MapConditionalSubscriber.onNext(FlowableMap.java:112)
W/System.err: at io.reactivex.internal.operators.flowable.FlowableRetryPredicate$RepeatSubscriber.onNext(FlowableRetryPredicate.java:71)
W/System.err: at io.reactivex.internal.operators.flowable.FlowableObserveOn$ObserveOnSubscriber.runAsync(FlowableObserveOn.java:400)
W/System.err: at io.reactivex.internal.operators.flowable.FlowableObserveOn$BaseObserveOnSubscriber.run(FlowableObserveOn.java:176)
W/System.err: at io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:61)
W/System.err: at io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:52)
W/System.err: at java.util.concurrent.FutureTask.run(FutureTask.java:237)
W/System.err: at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:269)
W/System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
W/System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
W/System.err: at java.lang.Thread.run(Thread.java:818)
E/AndroidRuntime: FATAL EXCEPTION: RxComputationThreadPool-1
Process: com.estimote.indoorapp, PID: 3333
io.reactivex.exceptions.CompositeException: 2 exceptions occurred.
at io.reactivex.internal.subscribers.LambdaSubscriber.onError(LambdaSubscriber.java:79)
at io.reactivex.internal.subscribers.BasicFuseableSubscriber.onError(BasicFuseableSubscriber.java:101)
at io.reactivex.internal.subscribers.BasicFuseableSubscriber.onError(BasicFuseableSubscriber.java:101)
at io.reactivex.internal.subscribers.BasicFuseableSubscriber.onError(BasicFuseableSubscriber.java:101)
at io.reactivex.internal.subscribers.BasicFuseableSubscriber.fail(BasicFuseableSubscriber.java:111)
at io.reactivex.internal.operators.flowable.FlowableMap$MapSubscriber.onNext(FlowableMap.java:66)
at io.reactivex.internal.operators.flowable.FlowableFilter$FilterSubscriber.tryOnNext(FlowableFilter.java:74)
at io.reactivex.internal.operators.flowable.FlowableFilter$FilterSubscriber.onNext(FlowableFilter.java:52)
at io.reactivex.internal.operators.flowable.FlowableMap$MapConditionalSubscriber.onNext(FlowableMap.java:112)
at io.reactivex.internal.operators.flowable.FlowableMap$MapConditionalSubscriber.onNext(FlowableMap.java:112)
at io.reactivex.internal.operators.flowable.FlowableMap$MapConditionalSubscriber.onNext(FlowableMap.java:112)
at io.reactivex.internal.operators.flowable.FlowableMap$MapConditionalSubscriber.onNext(FlowableMap.java:112)
at io.reactivex.internal.operators.flowable.FlowableMap$MapConditionalSubscriber.onNext(FlowableMap.java:112)
at io.reactivex.internal.operators.flowable.FlowableRetryPredicate$RepeatSubscriber.onNext(FlowableRetryPredicate.java:71)
at io.reactivex.internal.operators.flowable.FlowableObserveOn$ObserveOnSubscriber.runAsync(FlowableObserveOn.java:400)
at io.reactivex.internal.operators.flowable.FlowableObserveOn$BaseObserveOnSubscriber.run(FlowableObserveOn.java:176)
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:269)
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)
ComposedException 1 :
kotlin.KotlinNullPointerException
at com.estimote.indoorsdk_module.algorithm.e.c.a(Unknown Source)
at com.estimote.indoorsdk_module.algorithm.e.c.a(Unknown Source)
at com.estimote.indoorsdk_module.algorithm.a$h.a(Unknown Source)
at com.estimote.indoorsdk_module.algorithm.a$h.apply(Unknown Source)
at io.reactivex.internal.operators.flowable.FlowableMap$MapSubscriber.onNext(FlowableMap.java:64)
at io.reactivex.internal.operators.flowable.FlowableFilter$FilterSubscriber.tryOnNext(FlowableFilter.java:74)
at io.reactivex.internal.operators.flowable.FlowableFilter$FilterSubscriber.onNext(FlowableFilter.java:52)
at io.reactivex.internal.operators.flowable.FlowableMap$MapConditionalSubscriber.onNext(FlowableMap.java:112)
at io.reactivex.internal.operators.flowable.FlowableMap$MapConditionalSubscriber.onNext(FlowableMap.java:112)
at io.reactivex.internal.operators.flowable.FlowableMap$MapConditionalSubscriber.onNext(FlowableMap.java:112)
at io.reactivex.internal.operators.flowable.FlowableMap$MapConditionalSubscriber.onNext(FlowableMap.java:112)
at io.reactivex.internal.operators.flowable.FlowableMap$MapConditionalSubscriber.onNext(FlowableMap.java:112)
at io.reactivex.internal.operators.flowable.FlowableRetryPredicate$RepeatSubscriber.onNext(FlowableRetryPredicate.java:71)
at io.reactivex.internal.operators.flowable.FlowableObserveOn$ObserveOnSubscriber.runAsync(FlowableObserveOn.java:400)
at io.reactivex.internal.operators.flowable.FlowableObserveOn$BaseObserveOnSubscriber.run(FlowableObserveOn.java:176)
at io.reactivex.internal.sch

Issue regarding SQL security break

Dependency sqlite: SQLite is a C-language library that implements a small, fast, self-contained, high-reliability, full-featured, SQL database engine. SQLite is the most used database engine in the world. SQLite is built into all mobile phones and most computers and comes bundled inside countless other applications that people use every day. The SQLite file format is stable, cross-platform, and backwards compatible and the developers pledge to keep it that way through at least the year 2050. SQLite database files are commonly used as containers to transfer rich content between systems and as a long-term archival format for data. There are over 1 trillion (1e12) SQLite databases in active use.

Dependency sqlite version 3.20.1 was detected at lib/x86_64/libIndoorsLocator.so and suffers from the following vulnerabilities:

CVE-2018-8740: In SQLite through 3.22.0, databases whose schema is corrupted using a CREATE TABLE AS statement could cause a NULL pointer dereference, related to build.c and prepare.c.
CVE-2020-11655: SQLite through 3.31.1 allows attackers to cause a denial of service (segmentation fault) via a malformed window-function query because the AggInfo object's initialization is mishandled.
CVE-2018-20505: SQLite 3.25.2, when queries are run on a table with a malformed PRIMARY KEY, allows remote attackers to cause a denial of service (application crash) by leveraging the ability to run arbitrary SQL statements (such as in certain WebSQL use cases).
CVE-2020-13434: SQLite through 3.32.0 has an integer overflow in sqlite3_str_vappendf in printf.c.
CVE-2019-16168: In SQLite through 3.29.0, whereLoopAddBtreeIndex in sqlite3.c can crash a browser or other application because of missing validation of a sqlite_stat1 sz field, aka a "severe division by zero in the query planner."
CVE-2019-19645: alter.c in SQLite through 3.30.1 allows attackers to trigger infinite recursion via certain types of self-referential views in conjunction with ALTER TABLE statements.

App not doing anything but showing map?

Prerequisites

  • Put an X between the brackets on this line if you have done all of the following:
    • My beacons have Estimote Location packet 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: 2.5.4

Android devices affected: Lenovo Tango / Samsung Galaxy S7

Android OS version affected: 6.0.1 and 8.0.0 respectively

Beacon hardware version: F3.3

Description

Followed the guides on both the website and github and all I seem to be getting is an overview of the location I made. I'm not sure if I'm missing code, or placed it wrongly (onStart seems to work against me?). I want to show myself walking in said location and extra information, depending on location.

Steps to reproduce:

irrelevant.

Expected behavior: Show my avatar walking around.
Actual behavior: No avatar, just a map.

(Optional) Additional information

package com.example.finalestimote;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;

import com.estimote.indoorsdk.EstimoteCloudCredentials;
import com.estimote.indoorsdk.IndoorLocationManagerBuilder;
import com.estimote.indoorsdk_module.algorithm.OnPositionUpdateListener;
import com.estimote.indoorsdk_module.algorithm.ScanningIndoorLocationManager;
import com.estimote.indoorsdk_module.cloud.CloudCallback;
import com.estimote.indoorsdk_module.cloud.CloudCredentials;
import com.estimote.indoorsdk_module.cloud.EstimoteCloudException;
import com.estimote.indoorsdk_module.cloud.IndoorCloudManager;
import com.estimote.indoorsdk_module.cloud.IndoorCloudManagerFactory;
import com.estimote.indoorsdk_module.cloud.Location;
import com.estimote.indoorsdk_module.cloud.LocationPosition;
import com.estimote.indoorsdk_module.view.IndoorLocationView;

public class MainActivity extends AppCompatActivity {

IndoorLocationView indoorLocationView;
Location loc;
ScanningIndoorLocationManager indoorLocationManager;

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

    indoorLocationView = (IndoorLocationView) findViewById(R.id.indoor_view);
    //indoorLocationView.setLocation(location);

    final CloudCredentials cloudCredentials = new EstimoteCloudCredentials("ID", "token");
    IndoorCloudManager cloudManager = new IndoorCloudManagerFactory().create(this, cloudCredentials);
    cloudManager.getLocation("locationID", new CloudCallback<Location>() {
        @Override
        public void success(Location location) {
            // do something with your Location object here.
            // You will need it to initialise IndoorLocationManager!
            indoorLocationView = (IndoorLocationView) findViewById(R.id.indoor_view);
            indoorLocationView.setLocation(location);
            loc = location;

            Log.d("locationlocation", "Kantoor" + location);
            indoorLocationManager =
                    new IndoorLocationManagerBuilder(getApplicationContext(), location, cloudCredentials)
                            .withDefaultScanner()
                            .build();

            indoorLocationManager.setOnPositionUpdateListener(new OnPositionUpdateListener() {
                @Override
                public void onPositionUpdate(LocationPosition locationPosition) {
                    indoorLocationView.updatePosition(locationPosition);
                }

                @Override
                public void onPositionOutsideLocation() {


                    indoorLocationView.hidePosition();
                }

            });
            onStart();

        }

        @Override
        public void failure(EstimoteCloudException e) {
            Log.d("Oops", "failure.");
        }
    });


}

@Override
protected void onStart() {
    super.onStart();
    if(indoorLocationManager!=null) {
        indoorLocationManager.startPositioning();
    }
}


@Override
protected void onStop() {
    super.onStop();
    if(indoorLocationManager!=null) {
        indoorLocationManager.stopPositioning();
    }
}

}

Issue with 4.4.2

Unable to run application in Android OS version 4.4.2, application crashes again and again.

Here is log details

2-22 13:52:38.186 6290-6290/com.estimote.indoorapp E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.estimote.indoorapp, PID: 6290
java.lang.NoSuchMethodError: android.bluetooth.BluetoothAdapter.getBluetoothLeScanner
at com.estimote.scanning_sdk.dagger.BluetoothModule.providesBluetoothLeScanner(BluetoothModule.kt:28)
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)

Incompatibility issues with Android Studio

Prerequisites

  • Put an X between the brackets on this line if you have done all of the following:
    • My beacons have Estimote Location packet 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:** [2.1.0]

Description

I'm trying to run the example app on Android Studio 3.0.1, but facing a problem where it says

Error:Could not find method compile() for arguments [com.estimote:indoorsdk:2.1.0] on object of type org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler.

Consult IDE log for more details (Help | Show Log)

in the Gradle scripts and in indoorapp\build.gradle it says similar thing

Error:(11, 1) A problem occurred evaluating project ':app'.
> Could not find method compile() for arguments [com.estimote:indoorsdk:2.1.0] on object of type org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler.

Though I'm unable to open the log, at least I don't know how to, when I right click on the error and click jump to source, it puts me on the line

dependencies {
    compile 'com.estimote:indoorsdk:2.1.0'
}

Steps to reproduce:

  1. Download the files as zip
  2. Open in Android Studio either by clicking "open existing project" or "import project"
  3. open build.gradle and try to compile

Expected behavior: It should just compile and run on my android emulator (Pixel 2 with Oreo)

Actual behavior: It shows the compile error

(Optional) Additional information

Here's the log file -
idea.log

capture

add location builder

Hi,

I would like to know if you add a location builder in a Android Version ?
If yes, when will be available?

Thanks in advance

Problem with screen orientation change

Prerequisites

  • Put an X between the brackets on this line if you have done all of the following:
    • My beacons have Estimote Location packet 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:indoorsdk:2.5.4

Android devices affected: Huawei P9

Android OS version affected: Android 7.0

Beacon hardware version: F3.3

Description

[Description of the issue]

I was using previous versions of your indoorsdk (2.4.0) and didn't noticed this behavior before. I am initializing indoorLocationManager in onCreate of my application activity just like it is in your sample app. When I change screen orientation to landscape, everithing looks OK. But when I put phone back to portrait screen orientation, application will crash.

  1. Run application with indoorsdk initialized in onCreate
  2. Switch phone to landscape
  3. Switch phone back to portrait

Expected behavior: It would be great, if change of screen orientation will not result in app crash.

Actual behavior: Currently, using indoorsdk 2.5.3 and changing screen orientation will result in app crash.

(Optional) Additional information

java.lang.IllegalArgumentException: Service not registered: com.estimote.scanning_plugin.packet_provider.service.PacketProviderWrapperServiceHelper$createServiceConnection$1@5e39d14
W/System.err:     at android.app.LoadedApk.forgetServiceDispatcher(LoadedApk.java:1407)
W/System.err:     at android.app.ContextImpl.unbindService(ContextImpl.java:1657)
W/System.err:     at android.content.ContextWrapper.unbindService(ContextWrapper.java:648)
W/System.err:     at com.estimote.scanning_plugin.packet_provider.service.PacketProviderWrapperServiceHelper$packetProviderLoader$1$1.cancel(PacketProviderWrapperServiceHelper.kt:28)
W/System.err:     at io.reactivex.internal.disposables.CancellableDisposable.dispose(CancellableDisposable.java:49)
W/System.err:     at io.reactivex.internal.disposables.DisposableHelper.dispose(DisposableHelper.java:125)
W/System.err:     at io.reactivex.internal.operators.observable.ObservableCreate$CreateEmitter.dispose(ObservableCreate.java:122)
W/System.err:     at io.reactivex.internal.disposables.DisposableHelper.dispose(DisposableHelper.java:125)
W/System.err:     at io.reactivex.internal.operators.observable.ObservableReplay$ReplayObserver.dispose(ObservableReplay.java:276)
W/System.err:     at io.reactivex.disposables.CompositeDisposable.dispose(CompositeDisposable.java:217)
W/System.err:     at io.reactivex.disposables.CompositeDisposable.dispose(CompositeDisposable.java:80)
W/System.err:     at io.reactivex.internal.operators.observable.ObservableRefCount$DisposeTask.run(ObservableRefCount.java:219)
W/System.err:     at io.reactivex.disposables.RunnableDisposable.onDisposed(RunnableDisposable.java:30)
W/System.err:     at io.reactivex.disposables.RunnableDisposable.onDisposed(RunnableDisposable.java:20)
W/System.err:     at io.reactivex.disposables.ReferenceDisposable.dispose(ReferenceDisposable.java:43)
W/System.err:     at io.reactivex.internal.operators.observable.ObservableRefCount$ConnectionObserver.dispose(ObservableRefCount.java:151)
W/System.err:     at io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.disposeAll(ObservableFlatMap.java:503)
W/System.err:     at io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.dispose(ObservableFlatMap.java:307)
W/System.err:     at io.reactivex.internal.disposables.DisposableHelper.dispose(DisposableHelper.java:125)
W/System.err:     at io.reactivex.internal.observers.LambdaObserver.dispose(LambdaObserver.java:100)
W/System.err:     at com.estimote.scanning_plugin.api.use_cases.RxScanHandler.stop(RxScanHandler.kt:10)
        at com.estimote.indoorsdk_module.algorithm.c.a(Unknown Source)
W/System.err:     at com.estimote.indoorsdk_module.algorithm.c.stopPositioning(Unknown Source)
        at sk.test.activities.MainActivity.onDestroy(MainActivity.kt:157)
W/System.err:     at android.app.Activity.performDestroy(Activity.java:7141)
W/System.err:     at android.app.Instrumentation.callActivityOnDestroy(Instrumentation.java:1158)
W/System.err:     at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:4385)
W/System.err:     at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:4417)
W/System.err:     at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:4696)
W/System.err:     at android.app.ActivityThread.-wrap20(ActivityThread.java)
W/System.err:     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1573)
W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:105)
W/System.err:     at android.os.Looper.loop(Looper.java:156)
W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:6523)
W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
W/System.err:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:942)
W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:832)
E/AndroidRuntime: FATAL EXCEPTION: main
    Process: sk.test, PID: 23771
    java.lang.IllegalArgumentException: Service not registered: com.estimote.scanning_plugin.packet_provider.service.PacketProviderWrapperServiceHelper$createServiceConnection$1@5e39d14
        at android.app.LoadedApk.forgetServiceDispatcher(LoadedApk.java:1407)
        at android.app.ContextImpl.unbindService(ContextImpl.java:1657)
        at android.content.ContextWrapper.unbindService(ContextWrapper.java:648)
        at com.estimote.scanning_plugin.packet_provider.service.PacketProviderWrapperServiceHelper$packetProviderLoader$1$1.cancel(PacketProviderWrapperServiceHelper.kt:28)
        at io.reactivex.internal.disposables.CancellableDisposable.dispose(CancellableDisposable.java:49)
        at io.reactivex.internal.disposables.DisposableHelper.dispose(DisposableHelper.java:125)
        at io.reactivex.internal.operators.observable.ObservableCreate$CreateEmitter.dispose(ObservableCreate.java:122)
        at io.reactivex.internal.disposables.DisposableHelper.dispose(DisposableHelper.java:125)
        at io.reactivex.internal.operators.observable.ObservableReplay$ReplayObserver.dispose(ObservableReplay.java:276)
        at io.reactivex.disposables.CompositeDisposable.dispose(CompositeDisposable.java:217)
        at io.reactivex.disposables.CompositeDisposable.dispose(CompositeDisposable.java:80)
        at io.reactivex.internal.operators.observable.ObservableRefCount$DisposeTask.run(ObservableRefCount.java:219)
        at io.reactivex.disposables.RunnableDisposable.onDisposed(RunnableDisposable.java:30)
        at io.reactivex.disposables.RunnableDisposable.onDisposed(RunnableDisposable.java:20)
        at io.reactivex.disposables.ReferenceDisposable.dispose(ReferenceDisposable.java:43)
        at io.reactivex.internal.operators.observable.ObservableRefCount$ConnectionObserver.dispose(ObservableRefCount.java:151)
        at io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.disposeAll(ObservableFlatMap.java:503)
        at io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.dispose(ObservableFlatMap.java:307)
        at io.reactivex.internal.disposables.DisposableHelper.dispose(DisposableHelper.java:125)
        at io.reactivex.internal.observers.LambdaObserver.dispose(LambdaObserver.java:100)
        at com.estimote.scanning_plugin.api.use_cases.RxScanHandler.stop(RxScanHandler.kt:10)
        at com.estimote.indoorsdk_module.algorithm.c.a(Unknown Source)
        at com.estimote.indoorsdk_module.algorithm.c.stopPositioning(Unknown Source)
        at sk.test.activities.MainActivity.onDestroy(MainActivity.kt:157)
        at android.app.Activity.performDestroy(Activity.java:7141)
        at android.app.Instrumentation.callActivityOnDestroy(Instrumentation.java:1158)
        at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:4385)
        at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:4417)
        at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:4696)
        at android.app.ActivityThread.-wrap20(ActivityThread.java)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1573)
        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)

Unable to resolve host "cloud.estimote.com"

Prerequisites

  • Put an X between the brackets on this line if you have done all of the following:
    • My beacons have Estimote Location packet 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:indoorsdk:2.5.4

Android devices affected: Huawei P9

Android OS version affected: Android 7.0

Beacon hardware version: F3.3

Description

If internet connection is available, indoorskd starts location update with no problem. When internet connection is not available, after some time application crashes during call of startPositioning() on ScanningIndoorLocationManager (In my case I need to restart the application 3-4x and then it will result into this error).

Steps to reproduce:

  1. Disable internet connection on Android device
  2. Attempt to start application and call startPositioning()
  3. Watch the result

Expected behavior: Even there is no internet connection, it would be great if call on startPositioning()
would not crash the whole app...

Actual behavior: Currently, when there is no internet connection, calling startPositioning() will result in an exception and in application crash.

(Optional) Additional information

Console output:

W/System.err: io.reactivex.exceptions.OnErrorNotImplementedException: Unable to resolve host "cloud.estimote.com": No address associated with hostname
        at io.reactivex.internal.functions.Functions$OnErrorMissingConsumer.accept(Functions.java:704)
        at io.reactivex.internal.functions.Functions$OnErrorMissingConsumer.accept(Functions.java:701)
        at io.reactivex.internal.observers.LambdaObserver.onError(LambdaObserver.java:77)
        at io.reactivex.internal.operators.observable.ObservableSubscribeOn$SubscribeOnObserver.onError(ObservableSubscribeOn.java:63)
        at com.jakewharton.retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onError(BodyObservable.java:72)
        at com.jakewharton.retrofit2.adapter.rxjava2.CallObservable.subscribeActual(CallObservable.java:55)
        at io.reactivex.Observable.subscribe(Observable.java:10981)
        at com.jakewharton.retrofit2.adapter.rxjava2.BodyObservable.subscribeActual(BodyObservable.java:34)
        at io.reactivex.Observable.subscribe(Observable.java:10981)
        at io.reactivex.internal.operators.observable.ObservableSubscribeOn$SubscribeTask.run(ObservableSubscribeOn.java:96)
        at io.reactivex.Scheduler$DisposeTask.run(Scheduler.java:452)
        at io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:66)
        at io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:57)
        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:776)
W/System.err: Caused by: 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)
W/System.err:     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.indoorsdk_module.cloud.f.intercept(Unknown Source)
        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)
    	... 12 more
    Caused by: android.system.GaiException: android_getaddrinfo failed: EAI_NODATA (No address associated with hostname)
        at libcore.io.Posix.android_getaddrinfo(Native Method)
        at libcore.io.ForwardingOs.android_getaddrinfo(ForwardingOs.java:55)
        at java.net.Inet6AddressImpl.lookupHostByName(Inet6AddressImpl.java:106)
    	... 39 more
W/System.err: Caused by: android.system.ErrnoException: android_getaddrinfo failed: ENETUNREACH (Network is unreachable)
    	... 42 more

My app can't find beacons

Prerequisites

  • Put an X between the brackets on this line if you have done all of the following:
    • My beacons have Estimote Location packet 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: 2.5.3

Android devices affected: Xiaomi Redmi Note 4

Beacon hardware version: D3.4

Description

I am building an Android app for an indoor location using Android Indoor SDK.
The issue is that my phone can't find any beacons near and it is not showing my location.
The Estimode app finds beacons, but my app is not scanning them.
When I debugged, I saw that the "location" object has scannedBeacon member and its value is 0.
The location is mapped and successfully shown on my app, along with the beacon's position.
The Bluetooth is on and scanning, I can see this in the log:
D/BluetoothAdapter: STATE_ON
D/BluetoothLeScanner: onClientRegistered() - status=0 clientIf=10 mClientIf=0

In the setOnPositionUpdateListener, it always goes on onPositionOutsideLocation(), he can't find any beacons and he thinks he is outside of the room.

Please, can you help me?

package com.example.indoor;

import android.annotation.TargetApi;

import android.content.DialogInterface;
import android.content.pm.PackageManager;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;

import android.widget.Button;
import android.widget.Toast;


import com.estimote.indoorsdk.EstimoteCloudCredentials;
import com.estimote.indoorsdk.IndoorLocationManagerBuilder;
import com.estimote.indoorsdk_module.algorithm.OnPositionUpdateListener;
import com.estimote.indoorsdk_module.cloud.CloudCredentials;
import com.estimote.indoorsdk_module.cloud.Location;
import com.estimote.indoorsdk_module.view.IndoorLocationView;

import com.estimote.indoorsdk_module.cloud.CloudCallback;
import com.estimote.indoorsdk_module.cloud.EstimoteCloudException;
import com.estimote.indoorsdk_module.cloud.IndoorCloudManager;
import com.estimote.indoorsdk_module.cloud.IndoorCloudManagerFactory;

import com.estimote.indoorsdk_module.algorithm.ScanningIndoorLocationManager;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.estimote.indoorsdk_module.cloud.LocationPosition;


import android.os.*;
import android.Manifest;

public class MainActivity extends AppCompatActivity {
    IndoorLocationView indoorLocationView;
    ScanningIndoorLocationManager indoorLocationManager;
    Location loc;
    IndoorCloudManager cloudManager;
    CloudCredentials cloudCredentials;
    final private int REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS = 124;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        cloudCredentials = new EstimoteCloudCredentials("my-app", "token"); //i removed real values
        cloudManager = new IndoorCloudManagerFactory().create(this, cloudCredentials);


        if (Build.VERSION.SDK_INT >= 23) {
            // Marshmallow+ Permission APIs
            permissions();
        }
        Handler handler2 = new Handler();
        Handler handler3 = new Handler();
        Handler handler4 = new Handler();

        getLocation();

        handler2.postDelayed(new Runnable() {
            public void run() {
                locationBuilder();
            }
        }, 2000);
        handler3.postDelayed(new Runnable() {
            public void run() {
                positionListener();
            }
        }, 2000);
        handler4.postDelayed(new Runnable() {
            public void run() {
                startPositioning();
            }
        }, 2000);

  

    }

    @Override
    protected void onStop () {
        super.onStop();
        indoorLocationManager.stopPositioning();
    }

    private void getLocation()
    {
        cloudManager.getLocation("my-loc", new CloudCallback<Location>() {
            @Override
            public void success(Location location) {
                // do something with your Location object here.
                // You will need it to initialise IndoorLocationManager!
                indoorLocationView = findViewById(R.id.indoor);
                indoorLocationView.setLocation(location);
                loc = location;
            }

            @Override
            public void failure(EstimoteCloudException e) {
                // oops!
                Toast.makeText(MainActivity.this, "Error", Toast.LENGTH_LONG).show();
            }
        });
    }

    private void locationBuilder()
    {
        cloudCredentials = new EstimoteCloudCredentials("xxx", "yyy"); //I removed real values
        indoorLocationManager =
                new IndoorLocationManagerBuilder(MainActivity.this, loc, cloudCredentials)
                        .withDefaultScanner()
                        .build();
    }

    private void positionListener()
    {
        indoorLocationManager.setOnPositionUpdateListener(new OnPositionUpdateListener() {

            @Override
            public void onPositionUpdate(LocationPosition locationPosition) {
                indoorLocationView.updatePosition(locationPosition);
                Log.d("Tag", "I'm in");
                // Toast.makeText(MainActivity.this, "Location", Toast.LENGTH_SHORT)
                //       .show();
            }

            @Override
            public void onPositionOutsideLocation() {

                indoorLocationView.hidePosition();
                //   Log.d("TAG", "I'm out");
            }
        });
    }

    private void startPositioning()
    {
        indoorLocationManager.startPositioning();
    }


    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        switch (requestCode) {
            case REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS: {
                Map<String, Integer> perms = new HashMap<String, Integer>();
                // Initial
                perms.put(Manifest.permission.ACCESS_FINE_LOCATION, PackageManager.PERMISSION_GRANTED);


                // Fill with results
                for (int i = 0; i < permissions.length; i++)
                    perms.put(permissions[i], grantResults[i]);

                // Check for ACCESS_FINE_LOCATION
                if (perms.get(Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED

                ) {
                    // All Permissions Granted

                    // Permission Denied
                    Toast.makeText(MainActivity.this, "All Permission GRANTED !! Thank You :)", Toast.LENGTH_SHORT)
                            .show();


                } else {
                    // Permission Denied
                    Toast.makeText(MainActivity.this, "One or More Permissions are DENIED Exiting App :(", Toast.LENGTH_SHORT)
                            .show();

                    finish();
                }
            }
            break;
            default:
                super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        }
    }


    @TargetApi(Build.VERSION_CODES.M)
    private void permissions() {
        List<String> permissionsNeeded = new ArrayList<String>();

        final List<String> permissionsList = new ArrayList<String>();
        if (!addPermission(permissionsList, Manifest.permission.ACCESS_FINE_LOCATION))
            permissionsNeeded.add("Show Location");

        if (permissionsList.size() > 0) {
            if (permissionsNeeded.size() > 0) {

                // Need Rationale
                String message = "App need access to " + permissionsNeeded.get(0);

                for (int i = 1; i < permissionsNeeded.size(); i++)
                    message = message + ", " + permissionsNeeded.get(i);

                showMessageOKCancel(message,
                        new DialogInterface.OnClickListener() {

                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                requestPermissions(permissionsList.toArray(new String[permissionsList.size()]),
                                        REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS);
                            }
                        });
                return;
            }
            requestPermissions(permissionsList.toArray(new String[permissionsList.size()]),
                    REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS);
            return;
        }

        Toast.makeText(MainActivity.this, "No new Permission Required- Launching App .You are Awesome!!", Toast.LENGTH_SHORT)
                .show();
    }

    private void showMessageOKCancel(String message, DialogInterface.OnClickListener okListener) {
        new AlertDialog.Builder(MainActivity.this)
                .setMessage(message)
                .setPositiveButton("OK", okListener)
                .setNegativeButton("Cancel", null)
                .create()
                .show();
    }

    @TargetApi(Build.VERSION_CODES.M)
    private boolean addPermission(List<String> permissionsList, String permission) {

        if (checkSelfPermission(permission) != PackageManager.PERMISSION_GRANTED) {
            permissionsList.add(permission);
            // Check for Rationale Option
            if (!shouldShowRequestPermissionRationale(permission))
                return false;
        }
        return true;
    }

}

onPositionOutsideLocation() fired whilst should be onPositionUpdate()

Prerequisites

  • Put an X between the brackets on this line if you have done all of the following:
    • My beacons have Estimote Location packet 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: [2.5.3]

Android devices affected: [Both WIKO Y80 and HUAWEI P10]

Android OS version affected: [Android 9.0 on Huawei p10]

Beacon hardware version: [F3.3]

Description

I used the sample provided to test indoor location with my 4 beacons and my android devices. I have successfully obtained my CloudLocation and activated the IndoorLocationManager with default presets (as done in the sample). I expect OnPositionUpdate(Location) to be fired but it's not happening. The method OnPositionOutsideLocation is triggered once then nothing happens even if i move my phone across the defined Location. I tried with multiple locations and beacons positioning. I already managed to pair my beacons using BeaconManager using a ProximityObserver and manually registering beacons so the problem isn't related to my beacons.

Steps to reproduce:

  1. Use the sample project 'IndoorApp' of this Git repo
  2. Define cloud credentials
  3. Start the application on my device, authorize bluetooth and position
  4. It should trigger onPositionOutsideLocation() once, then remain quiet

Expected behavior: I expect my position to be updated with onPositionUpdate()

Actual behavior: onPositionOutsideLocation() is triggered once while my device is sitting on my defined Location on estimote cloud

Error when build Indoor-SDK for Android

When trying to build Indoor-SDK for Android. I got the error below. Can you help?

e: C:\Users\vuong\estimote\Android-Indoor-SDK-master\Android-Indoor-SDK-master\example\indoorapp\app\src\main\java\com\estimote\indoorapp\IndoorApplication.kt: (27, 74): Expecting an element
e: C:\Users\vuong\estimote\Android-Indoor-SDK-master\Android-Indoor-SDK-master\example\indoorapp\app\src\main\java\com\estimote\indoorapp\IndoorApplication.kt: (27, 103): Expecting an element
e: C:\Users\vuong\estimote\Android-Indoor-SDK-master\Android-Indoor-SDK-master\example\indoorapp\app\src\main\java\com\estimote\indoorapp\IndoorApplication.kt: (27, 55): Unresolved reference: YOUR
e: C:\Users\vuong\estimote\Android-Indoor-SDK-master\Android-Indoor-SDK-master\example\indoorapp\app\src\main\java\com\estimote\indoorapp\IndoorApplication.kt: (27, 64): Unresolved reference: ID
e: C:\Users\vuong\estimote\Android-Indoor-SDK-master\Android-Indoor-SDK-master\example\indoorapp\app\src\main\java\com\estimote\indoorapp\IndoorApplication.kt: (27, 81): Unresolved reference: YOUR
e: C:\Users\vuong\estimote\Android-Indoor-SDK-master\Android-Indoor-SDK-master\example\indoorapp\app\src\main\java\com\estimote\indoorapp\IndoorApplication.kt: (27, 90): Unresolved reference: TOKEN

Indoor location Forced close

Prerequisites

  • Put an X between the brackets on this line if you have done all of the following:
    • My beacons have Estimote Location packet 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:indoorsdk:2.3.0]

Android devices affected: [HUAWAEI P smart]

Android OS version affected: [Oreo 8.0.0]

Beacon hardware version: [F3.3]

Description

[forced close if I run the activity]

Steps to reproduce:
I did not get it

Expected behavior: [View the map with the user position]

Actual behavior: [Forced close]

(Optional) Additional information

`package com.example.albayan.location_try;

import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import android.app.Notification;
import android.util.Log;
import android.widget.TextView;
import android.widget.Toast;

import com.estimote.indoorsdk.IndoorLocationManagerBuilder;
import com.estimote.indoorsdk_module.algorithm.OnPositionUpdateListener;
import com.estimote.indoorsdk_module.algorithm.ScanningIndoorLocationManager;
import com.estimote.indoorsdk_module.cloud.CloudCallback;
import com.estimote.indoorsdk_module.cloud.EstimoteCloudException;
import com.estimote.indoorsdk_module.cloud.IndoorCloudManager;
import com.estimote.indoorsdk_module.cloud.IndoorCloudManagerFactory;
import com.estimote.indoorsdk_module.cloud.Location;
import com.estimote.indoorsdk_module.cloud.LocationPosition;
import com.estimote.indoorsdk_module.view.IndoorLocationView;
import com.estimote.internal_plugins_api.cloud.CloudCredentials;
import com.estimote.cloud_plugin.common.EstimoteCloudCredentials;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;


public class MainActivity extends AppCompatActivity {

    IndoorLocationView indoorLocationView; // = (IndoorLocationView) findViewById(R.id.indoor_view);
    ScanningIndoorLocationManager indoorLocationManager;

    //IndoorLocationView a = (IndoorLocationView) findViewById(R.id.indoor_view);

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

        indoorLocationView = (IndoorLocationView) findViewById(R.id.indoor_view);

        // Connection to Estimote and the App
        final CloudCredentials cloudCredentials = new EstimoteCloudCredentials("fireguider-ay4", "0e5620d33e32a3d8629c9510acce971c");
        IndoorCloudManager cloudManager = new IndoorCloudManagerFactory().create(this, cloudCredentials);

        // Get the saved map  in estimote
        cloudManager.getLocation("senior-project-room-np8", new CloudCallback<Location>() {

            TextView err = (TextView)findViewById(R.id.error);

            @Override
            public void success(Location location) {
                // view the map in the app ( have to insert it first in the Layout=========================
                indoorLocationView = (IndoorLocationView) findViewById(R.id.indoor_view);
                indoorLocationView.setLocation(location);
                err.setText("setLocation");


                // scan beacons automatically==============================================================
                indoorLocationManager = new IndoorLocationManagerBuilder(MainActivity.this, location,cloudCredentials)
                        .withDefaultScanner()
                        .build();

                // Position Update Listener ===============================================================
                indoorLocationManager.setOnPositionUpdateListener(new OnPositionUpdateListener() {
                    @Override //it will update the user's position in the mpp
                    public void onPositionUpdate(LocationPosition locationPosition) {

                        indoorLocationView.updatePosition(locationPosition);

                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                Toast.makeText(MainActivity.this, "Movement", Toast.LENGTH_SHORT).show();

                            }
                        });


                        err.setText("setOnPositionUpdate");
                    }

                    @Override // I can't See You , Hide
                    public void onPositionOutsideLocation() {
                        indoorLocationView.hidePosition();

                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                Toast.makeText(MainActivity.this, "--Movement", Toast.LENGTH_SHORT).show();

                            }
                        });
                        indoorLocationManager.startPositioning();
                        err.setText("Error onPositionOutsideLocation");
                    }
                });
            }
            @Override
            public void failure(EstimoteCloudException e) {
                err.setText(e.getBody());
                //Log.e("MYAPP", e.getBody());
            }
        });

        // Notification ( Scanning beacons is still working in the background)
        Notification notification = new Notification.Builder(this)
                .setSmallIcon(R.drawable.notification_icon_background)
                .setContentTitle("Indoor location")
                .setContentText("Scan is running...")
                .setPriority(Notification.PRIORITY_HIGH)
                .build();

    }

    // Stop and Start


    @Override
    protected void onStart() {
        super.onStart();
        indoorLocationManager.startPositioning();

    }
    @Override
    protected void onStop() {
        super.onStop();
        if (indoorLocationManager != null)
            indoorLocationManager.stopPositioning();
    }

}

`

FATAL EXCEPTION: main
Process: com.example.albayan.location_try, PID: 4732
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.albayan.location_try/com.example.albayan.location_try.MainActivity}: java.lang.NullPointerException: Attempt to invoke interface method 'void com.estimote.indoorsdk_module.algorithm.ScanningIndoorLocationManager.startPositioning()' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2817)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892)
at android.app.ActivityThread.-wrap11(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6541)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
Caused by: java.lang.NullPointerException: Attempt to invoke interface method 'void com.estimote.indoorsdk_module.algorithm.ScanningIndoorLocationManager.startPositioning()' on a null object reference
at com.example.albayan.location_try.MainActivity.onStart(MainActivity.java:138)
at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1333)
at android.app.Activity.performStart(Activity.java:6992)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2780)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892) 
at android.app.ActivityThread.-wrap11(Unknown Source:0) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593) 
at android.os.Handler.dispatchMessage(Handler.java:105) 
at android.os.Looper.loop(Looper.java:164) 
at android.app.ActivityThread.main(ActivityThread.java:6541) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) 

Add same functionality as iOS counterpart

I haven't found anything related to this properties inside of the SDK, iOS has them and I'm looking into matching my both apps to do the same, are they available?
Thanks, and sorry for posting a question here

self.locationView.showTrace = false
self.locationView.rotateOnPositionUpdate = true
self.locationView.showBeacons = false

Not receiving location updates using UWB location beacon

Prerequisites

  • [X ] Put an X between the brackets on this line if you have done all of the following:
    • My beacons have Estimote Location packet enabled (Check it in the Estimote Cloud, or via app)
    • My Android device/devices support 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: [2.1.0]

Android devices affected: [LG Nexus 5X]

Android OS version affected: [Android OS version Oreo 8.1.0]

Beacon hardware version: [I1.2]

Description

I am not getting position updates in IndoorLocationManagerBuilder.setOnPositionUpdateListener
Beanons are placed and location and map is created, location manager is configured with same location and credentials still unable to get any location updates on device movements.

Steps to reproduce:

  1. Created empty Android project and added estimote library dependency.
  2. Configured activity by following all steps given at https://github.com/Estimote/Android-Indoor-SDK
  3. Added onStart and onStop callbacks as given in SDK.
  4. Tested application on multiple devices with different Android versions but not getting location updates.

Expected behavior: onPositionUpdate(LocationPosition) function should call on location updates of device in given map using location UWB beacons.

Actual behavior: Not getting any updates.

(Optional) Additional information

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

// JAVA
cloudCredentials = new EstimoteCloudCredentials("My app id here", "I have added my api key here");
IndoorCloudManager cloudManager = new IndoorCloudManagerFactory().create(this, cloudCredentials);
cloudManager.getLocation("android-bay", new CloudCallback() {
@OverRide
public void success(Location location) {
// do something with your Location object here.
// You will need it to initialise IndoorLocationManager!
indoorLocationView = (IndoorLocationView) findViewById(R.id.indoor_view);
indoorLocationView.setLocation(location);

            indoorLocationManager =
                    new IndoorLocationManagerBuilder(MainActivity.this, location, cloudCredentials)
                            .withDefaultScanner()
                            .build();

            // JAVA
            indoorLocationManager.setOnPositionUpdateListener(new OnPositionUpdateListener() {
                @Override
                public void onPositionUpdate(LocationPosition locationPosition) {
                    indoorLocationView.updatePosition(locationPosition);
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            Toast.makeText(MainActivity.this, "Movement", Toast.LENGTH_SHORT).show();

                        }
                    });

                }

                @Override
                public void onPositionOutsideLocation() {
                    indoorLocationView.hidePosition();
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            Toast.makeText(MainActivity.this, "--Movement", Toast.LENGTH_SHORT).show();

                        }
                    });
                }
            });

        }

        @Override
        public void failure(EstimoteCloudException e) {
            // oops!
        }
    });

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.