estimote / android-indoor-sdk Goto Github PK
View Code? Open in Web Editor NEWEstimote Indoor SDK for Android
License: MIT License
Estimote Indoor SDK for Android
License: MIT License
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 !
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).]
[
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]
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
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]
[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:
Expected behavior: [ My current indoor location]
Actual behavior: [ App is crashing without loading anything]
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();
}
}
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
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?
Sir can you upload java code of this project?
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
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:
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.
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
Estimote SDK version: 2.5.3
Android devices affected: Samsung Galaxy S7
Android OS version affected: Android 8
Beacon hardware version: N/A
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:
` val points = mutableListOf()
markersView?.data?.forEach {
points.add(LocationPosition(it.x.toDouble(), it.y.toDouble(), it.z.toDouble()))
}
indoor_view.setCustomPoints(points)`
Expected behavior:
Actual behavior:
Screenshot:
The small yellow "dot" in the lower left is other custom point being displayed.
**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
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
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
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?
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 :)
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
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:
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.
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
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.
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
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.
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();
}
}
}
improvements needed
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)
Estimote SDK version:** [2.1.0]
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:
Expected behavior: It should just compile and run on my android emulator (Pixel 2 with Oreo)
Actual behavior: It shows the compile error
Here's the log file -
idea.log
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
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 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.
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.
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)
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
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:
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.
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
Estimote SDK version: 2.5.3
Android devices affected: Xiaomi Redmi Note 4
Beacon hardware version: D3.4
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;
}
}
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]
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:
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
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
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]
[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]
`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)
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
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]
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:
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.
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!
}
});
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.