2016-04-10 12 views
1

Ich habe Probleme damit, meine Reverse-Geocoding-Ergebnisse automatisch anzuzeigen. Es funktioniert gut, wenn ich auf die Schaltfläche klicke, um den Standort zu erhalten, aber ich möchte, dass der Standort automatisch angezeigt wird, wenn die App geladen wird.Standort automatisch anzeigen google android

Mein Code ist in einer Java-Klasse namens Geocoding, schließlich möchte ich diesen Code auf einem Marker auf meiner Karte anzeigen, die ich bereits erstellt habe.

, aber dieser Thread soll die Schaltfläche und Anzeige Ort als Sohn wie Kartenlasten zu beseitigen.

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); // uses layout from mainactivity 

    mResultReceiver = new AddressResultReceiver(new Handler()); 

    mLocationAddressTextView = (TextView) findViewById(R.id.location_address_view); 
    mProgressBar = (ProgressBar) findViewById(R.id.progress_bar); 
    mFetchAddressButton = (Button) findViewById(R.id.fetch_address_button); 

    // Set defaults, then update using values stored in the Bundle. 
    mAddressRequested = false; 
    mAddressOutput = ""; 
    updateValuesFromBundle(savedInstanceState); 

    updateUIWidgets(); 
    buildGoogleApiClient(); 
} 
public void buttonOnClick(View view) { // this links the maps activity via the XML layout file 
    startActivity(new Intent(Geocode.this, MapsActivity.class)); 
} 

/** 
* Updates fields based on data stored in the bundle. 
*/ 
private void updateValuesFromBundle(Bundle savedInstanceState) { 
    if (savedInstanceState != null) { 
     // Check savedInstanceState to see if the address was previously requested. 
     if (savedInstanceState.keySet().contains(ADDRESS_REQUESTED_KEY)) { 
      mAddressRequested = savedInstanceState.getBoolean(ADDRESS_REQUESTED_KEY); 
     } 
     // Check savedInstanceState to see if the location address string was previously found 
     // and stored in the Bundle. If it was found, display the address string in the UI. 
     if (savedInstanceState.keySet().contains(LOCATION_ADDRESS_KEY)) { 
      mAddressOutput = savedInstanceState.getString(LOCATION_ADDRESS_KEY); 
      displayAddressOutput(); 
     } 
    } 
} 

/** 
* Builds a GoogleApiClient. Uses {@code #addApi} to request the LocationServices API. 
*/ 
protected synchronized void buildGoogleApiClient() { 
    mGoogleApiClient = new GoogleApiClient.Builder(this) 
      .addConnectionCallbacks(this) 
      .addOnConnectionFailedListener(this) 
      .addApi(LocationServices.API) 
      .build(); 
} 


public void fetchAddressButtonHandler(View view) { 
    // We only start the service to fetch the address if GoogleApiClient is connected. 
    if (mGoogleApiClient.isConnected() && mLastLocation != null) { 
     startIntentService(); 
    } 

    mAddressRequested = true; 
    updateUIWidgets(); 
} 

@Override 
protected void onStart() { 
    super.onStart(); 
    mGoogleApiClient.connect(); 
} 

@Override 
protected void onStop() { 
    super.onStop(); 
    if (mGoogleApiClient.isConnected()) { 
     mGoogleApiClient.disconnect(); 
    } 
} 

/** 
* Runs when a GoogleApiClient object successfully connects. 
*/ 
@Override 
public void onConnected(Bundle connectionHint) { 
    // Gets the best and most recent location currently available, which may be null 
    // in rare cases when a location is not available. 
    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 
     // TODO: Consider calling 

     return; 
    } 
    mLastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient); 
    if (mLastLocation != null) { 
     // Determine whether a Geocoder is available. 
     if (!Geocoder.isPresent()) { 
      Toast.makeText(this, R.string.no_geocoder_available, Toast.LENGTH_LONG).show(); 
      return; 
     } 
     if (mAddressRequested) { 
      startIntentService(); 
     } 
    } 
} 

/** 
* Creates an intent, adds location data to it as an extra, and starts the intent service for 
* fetching an address. 
*/ 
protected void startIntentService() { 
    // Create an intent for passing to the intent service responsible for fetching the address. 
    Intent intent = new Intent(this, FetchAddressIntentService.class); 

    // Pass the result receiver as an extra to the service. 
    intent.putExtra(Constants.RECEIVER, mResultReceiver); 

    // Pass the location data as an extra to the service. 
    intent.putExtra(Constants.LOCATION_DATA_EXTRA, mLastLocation); 


    startService(intent); 
} 

@Override 
public void onConnectionFailed(ConnectionResult result) { 
    // Refer to the javadoc for ConnectionResult to see what error codes might be returned in 
    // onConnectionFailed. 
    Log.i(TAG, "Connection failed: ConnectionResult.getErrorCode() = " + result.getErrorCode()); 
} 


@Override 
public void onConnectionSuspended(int cause) { 
    // The connection to Google Play services was lost for some reason. We call connect() to 
    // attempt to re-establish the connection. 
    Log.i(TAG, "Connection suspended"); 
    mGoogleApiClient.connect(); 
} 

/** 
* Updates the address in the UI. 
*/ 
protected void displayAddressOutput() { 
    mLocationAddressTextView.setText(mAddressOutput); 
} 

/** 
* Toggles the visibility of the progress bar. Enables or disables the Fetch Address button. 
*/ 
private void updateUIWidgets() { 
    if (mAddressRequested) { 
     mProgressBar.setVisibility(ProgressBar.VISIBLE); 
     mFetchAddressButton.setEnabled(false); 
    } else { 
     mProgressBar.setVisibility(ProgressBar.GONE); 
     mFetchAddressButton.setEnabled(true); 
    } 
} 

/** 
* Shows a toast with the given text. 
*/ 
protected void showToast(String text) { 
    Toast.makeText(this, text, Toast.LENGTH_SHORT).show(); 
} 

@Override 
public void onSaveInstanceState(Bundle savedInstanceState) { 
    // Save whether the address has been requested. 
    savedInstanceState.putBoolean(ADDRESS_REQUESTED_KEY, mAddressRequested); 

    // Save the address string. 
    savedInstanceState.putString(LOCATION_ADDRESS_KEY, mAddressOutput); 
    super.onSaveInstanceState(savedInstanceState); 
} 

/** 
* Receiver for data sent from FetchAddressIntentService. 
*/ 
class AddressResultReceiver extends ResultReceiver { 
    public AddressResultReceiver(Handler handler) { 
     super(handler); 
    } 

    /** 
    * Receives data sent from FetchAddressIntentService and updates the UI in MainActivity. 
    */ 
    @Override 
    protected void onReceiveResult(int resultCode, Bundle resultData) { 

     // Display the address string or an error message sent from the intent service. 
     mAddressOutput = resultData.getString(Constants.RESULT_DATA_KEY); 
     displayAddressOutput(); 

     // Show a toast message if an address was found. 
     if (resultCode == Constants.SUCCESS_RESULT) { 
      showToast(getString(R.string.address_found)); 
     } 

     // Reset. Enable the Fetch Address button and stop showing the progress bar. 
     mAddressRequested = false; 
     updateUIWidgets(); 
    } 
} 

}

+0

genannt werden, wie ich verstehe Sie Breiten- und Längengrad bekommen? Dann Sie dies zeigen wollen Lat Long auf einer Karte mit einer Adresse auf ihrem Marker in Ihrer Kartenaktivität, wenn Ihre Kartenaktivität geladen wird? – Nahid

Antwort

0

Satz von falschen mAdressRequested auf True, so in OnConnected kann startIntentService

// Set defaults, then update using values stored in the Bundle. 
    mAddressRequested = true; 
    mAddressOutput = ""; 
    updateValuesFromBundle(savedInstanceState); 
+0

das sollte ein Kommentar sein –

+0

Entschuldigung, ich kann keinen Kommentar abgeben, weil ich noch keine 50 Reputation habe, aber meine Antwort sollte stimmen. naja was auch immer, ich habe versucht es zu bearbeiten. –

Verwandte Themen