<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: Basic Button query - Click button, Zoom to GPS location in ArcGIS Runtime SDK for Android Questions</title>
    <link>https://community.esri.com/t5/arcgis-runtime-sdk-for-android-questions/basic-button-query-click-button-zoom-to-gps/m-p/34684#M283</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Andrew &amp;amp; Andy,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks for the suggestions. &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I think I understand what your talking about, and it makes sense.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;My problem is applying it to the code I already have.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Can ya'll post some short code for how you've used any of the following?&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; 1. setOnStatusChangedListener(new OnStatusChangedListener() &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; 2. INITIALIZATION_FAILED&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; 3. LAYER_LOADING_FAILED&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; 4. STATUS.INITIALIZED &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I've used some of the 'Nearby' sample code already, but would like to see some additional code relating to the above.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks for your help.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;John&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Thu, 09 Aug 2012 19:00:54 GMT</pubDate>
    <dc:creator>JohnAllen</dc:creator>
    <dc:date>2012-08-09T19:00:54Z</dc:date>
    <item>
      <title>Basic Button query - Click button, Zoom to GPS location</title>
      <link>https://community.esri.com/t5/arcgis-runtime-sdk-for-android-questions/basic-button-query-click-button-zoom-to-gps/m-p/34678#M277</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;I have my app setup currently so when I hit "map it" button on my home page a new activity starts displaying ESRI basemap and my GPS location.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I want to do a simple modification, so that when I click the "map it" button on my home page ESRI basemap appears only. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Then have a button that I can select inside the map view that will zoom to my GPS location.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Basically instead of a one part process have a two part process.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;This is simple but I'm not sure how to code it.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks,&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 13 Jul 2012 05:33:25 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-runtime-sdk-for-android-questions/basic-button-query-click-button-zoom-to-gps/m-p/34678#M277</guid>
      <dc:creator>JohnAllen</dc:creator>
      <dc:date>2012-07-13T05:33:25Z</dc:date>
    </item>
    <item>
      <title>Re: Basic Button query - Click button, Zoom to GPS location</title>
      <link>https://community.esri.com/t5/arcgis-runtime-sdk-for-android-questions/basic-button-query-click-button-zoom-to-gps/m-p/34679#M278</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Ok here is what I got so far....&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;The code below is for the .java in source folder.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;See the red text portion of the code below. &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Can someone give me advice as to what to put to make the button work?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;STRONG&gt;Note&lt;/STRONG&gt;&lt;SPAN&gt;: I put TEST for my map service server, so if you copy and paste it want show.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;package com.dhec.MPOS;

import com.esri.android.map.LocationService;
import com.esri.android.map.MapView;
import com.esri.android.map.ags.ArcGISDynamicMapServiceLayer;
import com.esri.android.map.ags.ArcGISTiledMapServiceLayer;
import com.esri.android.map.event.OnStatusChangedListener;
import com.esri.core.geometry.Envelope;
import com.esri.core.geometry.GeometryEngine;
import com.esri.core.geometry.LinearUnit;
import com.esri.core.geometry.Point;
import com.esri.core.geometry.SpatialReference;
import com.esri.core.geometry.Unit;

import android.app.Activity;
import android.content.Intent;
import android.location.Location;
import android.location.LocationListener;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class Mapscreen extends Activity {
 
 MapView map = null;
&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // The circle area specified by search_radius and input lat/lon serves
&amp;nbsp; // searching purpose. It is also used to construct the extent which
&amp;nbsp; // map zooms to after the first GPS fix is retrieved.
&amp;nbsp; final static double SEARCH_RADIUS = 5;

&amp;nbsp; protected static final Intent OnStatusChangedListener = null;

 /** Called when the activity is first created. */
 public void onCreate(Bundle savedInstanceState) {
&amp;nbsp; super.onCreate(savedInstanceState);
&amp;nbsp; setContentView(R.layout.mapscreen);

&amp;nbsp; // Retrieve the map and initial extent from XML layout
&amp;nbsp; map = (MapView)findViewById(R.id.map);
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp; // Add dynamic layer to MapView
&amp;nbsp; map.addLayer(new ArcGISTiledMapServiceLayer("" +
&amp;nbsp; "http://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer"));
&amp;nbsp; map.addLayer(new ArcGISDynamicMapServiceLayer("" +
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "http://TEST/ArcGIS/rest/services/Mobile/MPOS/MapServer"));
&amp;nbsp; 
&amp;nbsp; //Button Sound
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; final MediaPlayer buttonSound = MediaPlayer.create(Mapscreen.this, R.raw.watersplash);
&amp;nbsp; 
&amp;nbsp; //Setting up the button references
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Button ZoomToMyLocation = (Button) findViewById (R.id.button3);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //When clicked, Activates the Zoom To GPS process
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ZoomToMyLocation.setOnClickListener(new View.OnClickListener() {
&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void onClick(View v) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // TODO Auto-generated method stub
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; buttonSound.start();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //I need the ZoomToMyLocation button to excute here I think?

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; map.setOnStatusChangedListener(new OnStatusChangedListener(){

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Starts searching for the GPS location of the phone. Below here I've gotten this code to work before, but not
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //with my custom button above. 
&amp;nbsp;&amp;nbsp; private static final long serialVersionUID = 1L;

&amp;nbsp;&amp;nbsp; public void onStatusChanged(Object source, STATUS status) {
&amp;nbsp;&amp;nbsp;&amp;nbsp; if (source == map &amp;amp;&amp;amp; status == STATUS.INITIALIZED) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LocationService ls = map.getLocationService();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ls.setAutoPan(false);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ls.setLocationListener(new LocationListener() {

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; boolean locationChanged = false;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Zooms to the current location when first GPS fix
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // arrives.
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void onLocationChanged(Location loc) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (!locationChanged) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; locationChanged = true;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; double locy = loc.getLatitude();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; double locx = loc.getLongitude();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Point wgspoint = new Point(locx, locy);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Point mapPoint = (Point) GeometryEngine
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .project(wgspoint,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SpatialReference.create(4326),
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; map.getSpatialReference());

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Unit mapUnit = map.getSpatialReference()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .getUnit();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; double zoomWidth = Unit.convertUnits(
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SEARCH_RADIUS,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Unit.create(LinearUnit.Code.MILE_US),
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mapUnit);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Envelope zoomExtent = new Envelope(mapPoint,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; zoomWidth, zoomWidth);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; map.setExtent(zoomExtent);

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void onProviderDisabled(String arg0) {

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void onProviderEnabled(String arg0) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void onStatusChanged(String arg0, int arg1,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Bundle arg2) {

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; });
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ls.start();

&amp;nbsp;&amp;nbsp;&amp;nbsp; }

&amp;nbsp;&amp;nbsp; }
&amp;nbsp; });
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; }});

 }

 protected void onPause() {
&amp;nbsp; super.onPause();
&amp;nbsp; map.pause();
 }

 protected void onResume() {
&amp;nbsp; super.onResume();
&amp;nbsp; map.unpause();
 }
}
&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 12 Dec 2021 15:56:41 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-runtime-sdk-for-android-questions/basic-button-query-click-button-zoom-to-gps/m-p/34679#M278</guid>
      <dc:creator>JohnAllen</dc:creator>
      <dc:date>2021-12-12T15:56:41Z</dc:date>
    </item>
    <item>
      <title>Re: Basic Button query - Click button, Zoom to GPS location</title>
      <link>https://community.esri.com/t5/arcgis-runtime-sdk-for-android-questions/basic-button-query-click-button-zoom-to-gps/m-p/34680#M279</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Don't Instantiate the onStatusChangedListener() inside the click event of your button.&amp;nbsp; Move it outside of the buttonclick event.&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Also, you could set a class-level variable for the status, capture it when you call the onStatusChangedListener, then use it's return in your "if" statement on the buttonclick.&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I think the way you have it set up now your pattern is as follows:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Click button--&amp;gt;check for status changed--&amp;gt;if initialized then locate.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;since the status of the map has not changed, your not calling your LocationService.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 24 Jul 2012 17:14:16 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-runtime-sdk-for-android-questions/basic-button-query-click-button-zoom-to-gps/m-p/34680#M279</guid>
      <dc:creator>deleted-user-ATjHIWsdQYmT</dc:creator>
      <dc:date>2012-07-24T17:14:16Z</dc:date>
    </item>
    <item>
      <title>Re: Basic Button query - Click button, Zoom to GPS location</title>
      <link>https://community.esri.com/t5/arcgis-runtime-sdk-for-android-questions/basic-button-query-click-button-zoom-to-gps/m-p/34681#M280</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Ok, I figured out what I needed.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The code below allows me to open ESRI basemap streets.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Once inside the street view I have one button called "Zoom to My Location"&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;If I click the button it will track/zoom to my location.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;If I click the button again it will stop tracking my location.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Pretty basic, but what I needed.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&lt;a href="https://community.esri.com/t5/user/viewprofilepage/user-id/86249"&gt;@AndrewB&lt;/a&gt; - Thanks for the "if" statement advice. It got me thinking about work flow for this.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;After doing some reading I found that I didn't need this:&lt;/SPAN&gt;&lt;STRONG&gt; map.setOnStatusChangedListener(new OnStatusChangedListener()&lt;/STRONG&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;This is what I my new code looks like:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;package com.dhec.MPOS;

import com.esri.android.map.LocationService;
import com.esri.android.map.MapView;
import com.esri.android.map.ags.ArcGISDynamicMapServiceLayer;
import com.esri.android.map.ags.ArcGISTiledMapServiceLayer;
import com.esri.core.geometry.Envelope;
import com.esri.core.geometry.GeometryEngine;
import com.esri.core.geometry.LinearUnit;
import com.esri.core.geometry.Point;
import com.esri.core.geometry.SpatialReference;
import com.esri.core.geometry.Unit;

import android.app.Activity;
import android.location.Location;
import android.location.LocationListener;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class Mapscreen extends Activity {
 
&amp;nbsp; // The circle area specified by search_radius and input lat/lon serves
&amp;nbsp; // searching purpose. It is also used to construct the extent which
&amp;nbsp; // map zooms to after the first GPS fix is retrieved.
&amp;nbsp; final static double SEARCH_RADIUS = 5;
 
&amp;nbsp; MapView map = null;
&amp;nbsp; Button ZoomToMyLocation;

&amp;nbsp;&amp;nbsp;&amp;nbsp; /** Called when the activity is first created. */
 public void onCreate(Bundle savedInstanceState) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; super.onCreate(savedInstanceState);
&amp;nbsp;&amp;nbsp; setContentView(R.layout.mapscreen);

&amp;nbsp;&amp;nbsp;&amp;nbsp; // Retrieve the map and initial extent from XML layout
&amp;nbsp;&amp;nbsp;&amp;nbsp; map = (MapView) findViewById (R.id.map);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; // This adds ESRI's titled map service layer "World Street Map" to the MapView, as well as my 
&amp;nbsp;&amp;nbsp;&amp;nbsp; // dynamics map service "MPOS"
&amp;nbsp;&amp;nbsp;&amp;nbsp; map.addLayer(new ArcGISTiledMapServiceLayer("" +
&amp;nbsp;&amp;nbsp;&amp;nbsp; "http://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer"));
&amp;nbsp;&amp;nbsp;&amp;nbsp; map.addLayer(new ArcGISDynamicMapServiceLayer("" +
&amp;nbsp;&amp;nbsp;&amp;nbsp; "http://TEST/ArcGIS/rest/services/Mobile/MPOS/MapServer"));
&amp;nbsp; 
//Setting up the button reference
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ZoomToMyLocation = (Button) findViewById (R.id.button1);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //When "Button ZoomToMyLocation" is clicked, method "public void onClick(View v)" sets up for location listening. 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ZoomToMyLocation.setOnClickListener(new View.OnClickListener() {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void onClick(View v) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LocationService ls = map.getLocationService();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ls = map.getLocationService();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ls.setAccuracyCircleOn(true);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ls.setAutoPan(true);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ls.setLocationListener(new LocationListener() {

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; boolean locationChanged = false;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Zooms to the current location when first GPS fix arrives.
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void onLocationChanged(Location loc) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (!locationChanged) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; locationChanged = true;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; double locy = loc.getLatitude();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; double locx = loc.getLongitude();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Point wgspoint = new Point(locx, locy);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Point mapPoint = (Point) GeometryEngine
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .project(wgspoint,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SpatialReference.create(4326),
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; map.getSpatialReference());

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Unit mapUnit = map.getSpatialReference()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .getUnit();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; double zoomWidth = Unit.convertUnits(
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SEARCH_RADIUS,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Unit.create(LinearUnit.Code.MILE_US),
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mapUnit);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Envelope zoomExtent = new Envelope(mapPoint,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; zoomWidth, zoomWidth);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; map.setExtent(zoomExtent);

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void onProviderDisabled(String arg0) {

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void onProviderEnabled(String arg0) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void onStatusChanged(String arg0, int arg1,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Bundle arg2) {

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp; });&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (ls.isStarted() == false){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ls.start();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ls.stop();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; };&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; });
&amp;nbsp;&amp;nbsp;&amp;nbsp; } 
}&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 12 Dec 2021 15:56:43 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-runtime-sdk-for-android-questions/basic-button-query-click-button-zoom-to-gps/m-p/34681#M280</guid>
      <dc:creator>JohnAllen</dc:creator>
      <dc:date>2021-12-12T15:56:43Z</dc:date>
    </item>
    <item>
      <title>Re: Basic Button query - Click button, Zoom to GPS location</title>
      <link>https://community.esri.com/t5/arcgis-runtime-sdk-for-android-questions/basic-button-query-click-button-zoom-to-gps/m-p/34682#M281</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;It's true that the onStatusChanged(); listener isn't required, but it is a good idea to implement it when using GPS.&amp;nbsp; If your map is not initialized and you try to enable the GPS, you will most likely encounter some sort of error. You could listen to onStatusChanged and if the state is &lt;/SPAN&gt;&lt;STRONG&gt;&lt;A href="http://resources.arcgis.com/en/help/android-sdk/api/com/esri/android/map/event/OnStatusChangedListener.STATUS.html#INITIALIZATION_FAILED"&gt;INITIALIZATION_FAILED&lt;/A&gt;&lt;/STRONG&gt;&lt;SPAN style="color: #000000; font-family: Times New Roman;"&gt;&amp;nbsp; or &lt;/SPAN&gt;&lt;STRONG&gt;&lt;A href="http://resources.arcgis.com/en/help/android-sdk/api/com/esri/android/map/event/OnStatusChangedListener.STATUS.html#LAYER_LOADING_FAILED"&gt;LAYER_LOADING_FAILED&lt;/A&gt;&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp; then disable the button.&amp;nbsp; Again, not required, but good programming practice.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Good luck.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 02 Aug 2012 13:09:39 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-runtime-sdk-for-android-questions/basic-button-query-click-button-zoom-to-gps/m-p/34682#M281</guid>
      <dc:creator>deleted-user-ATjHIWsdQYmT</dc:creator>
      <dc:date>2012-08-02T13:09:39Z</dc:date>
    </item>
    <item>
      <title>Re: Basic Button query - Click button, Zoom to GPS location</title>
      <link>https://community.esri.com/t5/arcgis-runtime-sdk-for-android-questions/basic-button-query-click-button-zoom-to-gps/m-p/34683#M282</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;I agree with Andrew. Other examples are when you are running an application with multiple views (Activities), or when you minimize the application and then start it back up. During those conditions and depending on how you coded your app the GPS may resume before the map is loaded and then your mapping code may throw an error since the map won't be ready. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;When you minimize the app or return to your MapView Activity, the best practice is to test to make sure the map is loaded after onResume() is called. You can accomplish this by using a Handler. Each Handler runs a single thread off of the main User Interface and you can check to see if the STATUS.INITIALIZED has occured. And once the map is loaded (and visible) then use the GPS. Using this pattern you can ensure that everything happens in the correct order and you can fail gracefully if, for example, that map didn't load because of a poor internet connection. If anyone needs the code for this scenario ping me agup at esri dot com.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I also blogged about using onResume() here: &lt;/SPAN&gt;&lt;A href="http://www.andygup.net/?p=779"&gt;http://www.andygup.net/?p=779&lt;/A&gt;&lt;SPAN&gt;.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;-Andy&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 08 Aug 2012 18:57:38 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-runtime-sdk-for-android-questions/basic-button-query-click-button-zoom-to-gps/m-p/34683#M282</guid>
      <dc:creator>AndyGup</dc:creator>
      <dc:date>2012-08-08T18:57:38Z</dc:date>
    </item>
    <item>
      <title>Re: Basic Button query - Click button, Zoom to GPS location</title>
      <link>https://community.esri.com/t5/arcgis-runtime-sdk-for-android-questions/basic-button-query-click-button-zoom-to-gps/m-p/34684#M283</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Andrew &amp;amp; Andy,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks for the suggestions. &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I think I understand what your talking about, and it makes sense.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;My problem is applying it to the code I already have.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Can ya'll post some short code for how you've used any of the following?&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; 1. setOnStatusChangedListener(new OnStatusChangedListener() &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; 2. INITIALIZATION_FAILED&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; 3. LAYER_LOADING_FAILED&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; 4. STATUS.INITIALIZED &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I've used some of the 'Nearby' sample code already, but would like to see some additional code relating to the above.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks for your help.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;John&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 09 Aug 2012 19:00:54 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-runtime-sdk-for-android-questions/basic-button-query-click-button-zoom-to-gps/m-p/34684#M283</guid>
      <dc:creator>JohnAllen</dc:creator>
      <dc:date>2012-08-09T19:00:54Z</dc:date>
    </item>
    <item>
      <title>Re: Basic Button query - Click button, Zoom to GPS location</title>
      <link>https://community.esri.com/t5/arcgis-runtime-sdk-for-android-questions/basic-button-query-click-button-zoom-to-gps/m-p/34685#M284</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;John, here's a code snippet that should help. It doesn't cover everything you asked for but should give you a good idea of how to implement the listeners. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;@Override
public void onStatusChanged(Object source, STATUS status) {
&amp;nbsp; if (OnStatusChangedListener.STATUS.INITIALIZED == status &amp;amp;&amp;amp; source == _mapView) {
&amp;nbsp;&amp;nbsp; _isMapLoaded = true;
&amp;nbsp; setMapType(_maptype);
&amp;nbsp; 
&amp;nbsp; 
&amp;nbsp; if(_center_lat == null || _center_lon == null){
&amp;nbsp;&amp;nbsp; latlon = new Point(_DEFAULT_LON,_DEFAULT_LAT);
&amp;nbsp; }
&amp;nbsp; else{
&amp;nbsp;&amp;nbsp; latlon = new Point(_center_lon,_center_lat);
&amp;nbsp; }
&amp;nbsp; Point point = (Point)GeometryEngine.project(latlon,SpatialReference.create(4326), _mapView.getSpatialReference());&amp;nbsp; 
&amp;nbsp; _mapView.centerAt(point,false);
&amp;nbsp; 
&amp;nbsp; if(_center_scale == null){
&amp;nbsp;&amp;nbsp; _mapView.setScale(_DEFAULT_SCALE);
&amp;nbsp; }
&amp;nbsp; else{
&amp;nbsp;&amp;nbsp; _mapView.setScale(_center_scale);
&amp;nbsp; }&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp; 
&amp;nbsp; Log.d("MapViewController", "setOnStatusChangedListener() STATUS: " + status);&amp;nbsp; 
&amp;nbsp; dispatchStatusEvent(new MapViewControllerEvent(MapViewEvent.STATUS_INITIALIZED), status.toString()); //custom event&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp; 
&amp;nbsp; }
&amp;nbsp; if (OnStatusChangedListener.STATUS.LAYER_LOADING_FAILED == status &amp;amp;&amp;amp; source == _mapView){
&amp;nbsp;&amp;nbsp; Log.d("MapViewController", "setMapListeners() STATUS: " + status + ", " + status.toString());
&amp;nbsp;&amp;nbsp; displayToast("There was a map problem with loading a layer: " + status.toString());
&amp;nbsp;&amp;nbsp; dispatchStatusErrorEvent(new MapViewControllerEvent(MapViewEvent.STATUS_LAYER_LOADING_FAILED), status.toString()); //custom event
&amp;nbsp; }
}
&lt;/PRE&gt;&lt;BR /&gt;&lt;SPAN&gt;-Andy&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 10 Dec 2021 21:20:59 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-runtime-sdk-for-android-questions/basic-button-query-click-button-zoom-to-gps/m-p/34685#M284</guid>
      <dc:creator>AndyGup</dc:creator>
      <dc:date>2021-12-10T21:20:59Z</dc:date>
    </item>
  </channel>
</rss>

