2012-12-07 14 views
39

किसी भी बटन पर क्लिक किए बिना, सीधे वर्तमान स्थान कैसे प्राप्त करें और कैमरे को उस पर ले जाएं।
इसके अलावा, मैंने पाया कि मानचित्र के दाएं शीर्ष पर एक बटन है। जब उस पर क्लिक करें, तो यह वर्तमान स्थान पर जाएगा। उस बटन पर क्लिक करते समय स्थान कैसे प्राप्त करें?Google मानचित्र एंड्रॉइड एपीआई v2 में सीधे कैमरे को वर्तमान स्थान पर कैसे स्थानांतरित करें?

उत्तर

69

वाकई इन अनुमतियां हैं:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> 

फिर कुछ गतिविधि बनाने के लिए और एक LocationListener रजिस्टर

package com.example.location; 

import android.content.Context; 
import android.location.Location; 
import android.location.LocationListener; 
import android.location.LocationManager; 
import android.os.Bundle; 
import android.view.View; 
import com.actionbarsherlock.app.SherlockFragmentActivity; 
import com.google.android.gms.maps.CameraUpdate; 
import com.google.android.gms.maps.CameraUpdateFactory; 
import com.google.android.gms.maps.GoogleMap; 
import com.google.android.gms.maps.SupportMapFragment; 
import com.google.android.gms.maps.model.LatLng; 

public class LocationActivity extends SherlockFragmentActivity implements LocationListener  { 
private GoogleMap map; 
private LocationManager locationManager; 
private static final long MIN_TIME = 400; 
private static final float MIN_DISTANCE = 1000; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.map); 
    map = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMap(); 

    locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
    locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, MIN_TIME, MIN_DISTANCE, this); //You can also use LocationManager.GPS_PROVIDER and LocationManager.PASSIVE_PROVIDER   
} 

@Override 
public void onLocationChanged(Location location) { 
    LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude()); 
    CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLngZoom(latLng, 10); 
    map.animateCamera(cameraUpdate); 
    locationManager.removeUpdates(this); 
} 

@Override 
public void onStatusChanged(String provider, int status, Bundle extras) { } 

@Override 
public void onProviderEnabled(String provider) { } 

@Override 
public void onProviderDisabled(String provider) { } 
} 

map.xml

<?xml version="1.0" encoding="utf-8"?> 
<fragment xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/map" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
class="com.google.android.gms.maps.SupportMapFragment"/> 
+5

थम्स अप ऊपर दी गई जब स्थान की अनुमति कॉल()। – Naskov

+0

यह शेरलॉक फ्रैगमेंट एक्टिविटी क्या है? आपके उत्तर में इसका उल्लेख नहीं है। –

+1

यह बंदरगाह ActionBar वापस करने के लिए एक पुरानी समर्थन पुस्तकालय है ... आप FragmentActivity साथ कि जगह ले सकता है http://actionbarsherlock.com/ – tmho

29
ऊपर जवाब के अनुसार नहीं है

Google api v2 में स्थान ट्रैकिंग के लिए Google डॉक का संदर्भ क्या है।

मैंने अभी आधिकारिक ट्यूटोरियल का पालन किया और इस कक्षा के साथ समाप्त हो गया जो वर्तमान स्थान ला रहा है और जैसे ही मुझे मिलता है उस पर मानचित्र को केंद्रित कर रहा है।

आप इस कक्षा को स्थान-स्थान प्राप्त करने के लिए समय-समय पर स्थान अपडेट करने के लिए बढ़ा सकते हैं। मैं सिर्फ एपीआई स्तर पर इस कोड को निष्पादित 7

http://developer.android.com/training/location/retrieve-current.html

यहाँ यह हो जाता है।

import android.app.Activity; 
import android.app.Dialog; 
import android.content.Intent; 
import android.content.IntentSender; 
import android.location.Location; 
import android.os.Bundle; 
import android.support.v4.app.DialogFragment; 
import android.support.v4.app.FragmentActivity; 
import android.util.Log; 
import android.widget.Toast; 

import com.google.android.gms.common.ConnectionResult; 
import com.google.android.gms.common.GooglePlayServicesClient; 
import com.google.android.gms.common.GooglePlayServicesUtil; 
import com.google.android.gms.location.LocationClient; 
import com.google.android.gms.maps.CameraUpdate; 
import com.google.android.gms.maps.CameraUpdateFactory; 
import com.google.android.gms.maps.GoogleMap; 
import com.google.android.gms.maps.GoogleMap.OnMapLongClickListener; 
import com.google.android.gms.maps.SupportMapFragment; 
import com.google.android.gms.maps.model.LatLng; 


public class MainActivity extends FragmentActivity implements 
    GooglePlayServicesClient.ConnectionCallbacks, 
    GooglePlayServicesClient.OnConnectionFailedListener{ 

private SupportMapFragment mapFragment; 
private GoogleMap map; 
private LocationClient mLocationClient; 
/* 
* Define a request code to send to Google Play services 
* This code is returned in Activity.onActivityResult 
*/ 
private final static int CONNECTION_FAILURE_RESOLUTION_REQUEST = 9000; 

// Define a DialogFragment that displays the error dialog 
public static class ErrorDialogFragment extends DialogFragment { 

    // Global field to contain the error dialog 
    private Dialog mDialog; 

    // Default constructor. Sets the dialog field to null 
    public ErrorDialogFragment() { 
     super(); 
     mDialog = null; 
    } 

    // Set the dialog to display 
    public void setDialog(Dialog dialog) { 
     mDialog = dialog; 
    } 

    // Return a Dialog to the DialogFragment. 
    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     return mDialog; 
    } 
} 

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

    mLocationClient = new LocationClient(this, this, this); 

    mapFragment = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)); 
    map = mapFragment.getMap(); 

    map.setMyLocationEnabled(true); 

} 

/* 
* Called when the Activity becomes visible. 
*/ 
@Override 
protected void onStart() { 
    super.onStart(); 
    // Connect the client. 
    if(isGooglePlayServicesAvailable()){ 
     mLocationClient.connect(); 
    } 

} 

/* 
* Called when the Activity is no longer visible. 
*/ 
@Override 
protected void onStop() { 
    // Disconnecting the client invalidates it. 
    mLocationClient.disconnect(); 
    super.onStop(); 
} 

/* 
* Handle results returned to the FragmentActivity 
* by Google Play services 
*/ 
@Override 
protected void onActivityResult(
       int requestCode, int resultCode, Intent data) { 
    // Decide what to do based on the original request code 
    switch (requestCode) { 

     case CONNECTION_FAILURE_RESOLUTION_REQUEST: 
      /* 
      * If the result code is Activity.RESULT_OK, try 
      * to connect again 
      */ 
      switch (resultCode) { 
       case Activity.RESULT_OK: 
        mLocationClient.connect(); 
        break; 
      } 

    } 
} 

private boolean isGooglePlayServicesAvailable() { 
    // Check that Google Play services is available 
    int resultCode = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this); 
    // If Google Play services is available 
    if (ConnectionResult.SUCCESS == resultCode) { 
     // In debug mode, log the status 
     Log.d("Location Updates", "Google Play services is available."); 
     return true; 
    } else { 
     // Get the error dialog from Google Play services 
     Dialog errorDialog = GooglePlayServicesUtil.getErrorDialog(resultCode, 
                               this, 
                               CONNECTION_FAILURE_RESOLUTION_REQUEST); 

     // If Google Play services can provide an error dialog 
     if (errorDialog != null) { 
      // Create a new DialogFragment for the error dialog 
      ErrorDialogFragment errorFragment = new ErrorDialogFragment(); 
      errorFragment.setDialog(errorDialog); 
      errorFragment.show(getSupportFragmentManager(), "Location Updates"); 
     } 

     return false; 
    } 
} 

/* 
* Called by Location Services when the request to connect the 
* client finishes successfully. At this point, you can 
* request the current location or start periodic updates 
*/ 
@Override 
public void onConnected(Bundle dataBundle) { 
    // Display the connection status 
    Toast.makeText(this, "Connected", Toast.LENGTH_SHORT).show(); 
    Location location = mLocationClient.getLastLocation(); 
    LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude()); 
    CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLngZoom(latLng, 17); 
    map.animateCamera(cameraUpdate); 
} 

/* 
* Called by Location Services if the connection to the 
* location client drops because of an error. 
*/ 
@Override 
public void onDisconnected() { 
    // Display the connection status 
    Toast.makeText(this, "Disconnected. Please re-connect.", 
      Toast.LENGTH_SHORT).show(); 
} 

/* 
* Called by Location Services if the attempt to 
* Location Services fails. 
*/ 
@Override 
public void onConnectionFailed(ConnectionResult connectionResult) { 
    /* 
    * Google Play services can resolve some errors it detects. 
    * If the error has a resolution, try sending an Intent to 
    * start a Google Play services activity that can resolve 
    * error. 
    */ 
    if (connectionResult.hasResolution()) { 
     try { 
      // Start an Activity that tries to resolve the error 
      connectionResult.startResolutionForResult(
        this, 
        CONNECTION_FAILURE_RESOLUTION_REQUEST); 
      /* 
      * Thrown if Google Play services canceled the original 
      * PendingIntent 
      */ 
     } catch (IntentSender.SendIntentException e) { 
      // Log the error 
      e.printStackTrace(); 
     } 
    } else { 
     Toast.makeText(getApplicationContext(), "Sorry. Location services not available to you", Toast.LENGTH_LONG).show(); 
    } 
} 

} 
+1

com.google.android.gms.location.LocClient को Google play सेवा को अपडेट करने के बाद भी हल नहीं किया जा सकता .. –

+1

उत्तर अब 2 साल पुराना है। यदि आप नया उत्तर पोस्ट कर सकते हैं। यह सहायक होगा – Javanator

+0

मैंने इस प्रश्न का नवीनतम दस्तावेज़ के साथ उत्तर दिया है। कृपया यह जाँचें, –

1

मैं कैसे वर्तमान स्थान प्राप्त करने के लिए और सीधे यह सोचते हैं कि आप नक्शे-वी 2 को लागू किया है के साथ वर्तमान स्थान के कैमरे को स्थानांतरित समझा रहा हूँ। अधिक जानकारी के लिए, आप official doc देख सकते हैं।

मैनिफ़ेस्ट फ़ाइल में स्थान की अनुमति Gradle

implementation "com.google.android.gms:play-services-location:11.0.1" 

में स्थान सेवा जोड़ें

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 

सुनिश्चित करें कि आप RunTimePermission के लिए पूछना सुनिश्चित करें। मैं इसके लिए Ask-Permission का उपयोग कर रहा हूं। इसका उपयोग करना आसान है।

अब वर्तमान स्थान प्राप्त करने और इसे मानचित्र पर प्रदर्शित करने के लिए नीचे दिए गए कोड का संदर्भ लें।

private FusedLocationProviderClient mFusedLocationProviderClient; 

@Override 
public void onCreate(@Nullable Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     mFusedLocationProviderClient = LocationServices 
       .getFusedLocationProviderClient(getActivity()); 

} 

private void getDeviceLocation() { 
     try { 
      if (mLocationPermissionGranted) { 
       Task<Location> locationResult = mFusedLocationProviderClient.getLastLocation(); 
       locationResult.addOnCompleteListener(new OnCompleteListener<Location>() { 
        @Override 
        public void onComplete(@NonNull Task<Location> task) { 
         if (task.isSuccessful()) { 
          // Set the map's camera position to the current location of the device. 
          Location location = task.getResult(); 
          LatLng currentLatLng = new LatLng(location.getLatitude(), 
            location.getLongitude()); 
          CameraUpdate update = CameraUpdateFactory.newLatLngZoom(currentLatLng, 
            DEFAULT_ZOOM); 
          googleMap.moveCamera(update); 
         } 
        } 
       }); 
      } 
     } catch (SecurityException e) { 
      Log.e("Exception: %s", e.getMessage()); 
     } 
} 

उपयोगकर्ता getDeviceLocation() विधि removeUpdates के लिए

private void updateLocationUI() { 
     if (googleMap == null) { 
      return; 
     } 
     try { 
      if (mLocationPermissionGranted) { 
       googleMap.setMyLocationEnabled(true); 
       googleMap.getUiSettings().setMyLocationButtonEnabled(true); 
       getDeviceLocation(); 
      } else { 
       googleMap.setMyLocationEnabled(false); 
       googleMap.getUiSettings().setMyLocationButtonEnabled(false); 
      } 
     } catch (SecurityException e) { 
      Log.e("Exception: %s", e.getMessage()); 
     } 
    } 
संबंधित मुद्दे