Hello,
I did an Android app that uses Estimote beacons indoor location
however when I tried to run the application , but it’s 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);
Handler h = new Handler();
int delay = 1000; //1 second=1000 milisecond, 15*1000=15seconds
Runnable runnable;
int Xcount=0;
@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();
}
});
/*LocationPosition position2 = new LocationPosition(locationPosition.getX(), locationPosition.getY(), locationPosition.getOrientation());
List<LocationPosition> myList = Arrays.asList(position2);
indoorLocationView.setCustomPoints(myList);*/
locationPosition.getX();
locationPosition.getY();
locationPosition.getOrientation();
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();
}
/*@Override
protected void onResume() {
//start handler as activity become visible
h.postDelayed(new Runnable() {
public void run() {
Xcount++;
//do something
//LocationPosition position2 = new LocationPosition(locationPosition.getX(), locationPosition.getY(), locationPosition.getOrientation());
LocationPosition position1 = new LocationPosition(Xcount, 3.8, 10);
List<LocationPosition> myList = Arrays.asList(position1);
indoorLocationView.setCustomPoints(myList);
runnable=this;
h.postDelayed(runnable, delay);
}
}, delay);
super.onResume();
}
@Override
protected void onPause() {
h.removeCallbacks(runnable); //stop handler when activity not visible
super.onPause();
}*/
}
Thanks