2016-04-09 10 views
0

Ich habe auf Google in Bezug auf dieses Problem, aber nicht die Lösung bekommen.Ich versuche Longitude und Breitengrad der Gerätestandort zu bekommen. Benutzer wird das Bild von der Kamera klicken und zu diesem Zeitpunkt habe ich die Breite, Länge des Gerätes GPS erhalten verwenden und dass anzuzeigen. Aber ist nicht funktioniert.Nicht erhalten Breite und Länge in Android

Hier ist mein Code: -

public class MainActivity extends Activity { 

    EditText editAddress,editName; 
    ImageView ivPhoto; 
    Button btnTakePic,btnNext1; 
    Bitmap bitMap; 
    static int TAKE_PICTURE = 1; 

    protected LocationManager locationManager; 
    protected LocationListener locationListener; 
    protected Context context; 
    TextView txtLat; 
    String lat; 
    String provider; 
    protected double latitude,longitude; 
    protected boolean gps_enabled,network_enabled; 

    private static final long MINIMUM_DISTANCE_CHANGE_FOR_UPDATES = 1; // in Meters 

    private static final long MINIMUM_TIME_BETWEEN_UPDATES = 1000; // in Milliseconds 


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


     editAddress = (EditText)findViewById(R.id.edtAddress); 
     editName = (EditText)findViewById(R.id.edtName); 
     ivPhoto = (ImageView)findViewById(R.id.ivPhoto); 
     btnTakePic = (Button)findViewById(R.id.btnTakePic); 
     btnNext1 = (Button)findViewById(R.id.btnNext1); 


     btnTakePic.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
       startActivityForResult(intent,TAKE_PICTURE); 

      } 
     }); 

     btnNext1.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       Intent nextIntent = new Intent(MainActivity.this,ContactPersonDetail.class); 
       startActivity(nextIntent); 
      } 
     }); 
    } 

    private void GetLocationLatLong() { 


     locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 

     // locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this); 
     locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,MINIMUM_TIME_BETWEEN_UPDATES, MINIMUM_DISTANCE_CHANGE_FOR_UPDATES, new MyLocationListener()); 

     Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); 

     if(location!=null){ 


      String message = String.format("Current Location \\n Longitude: %1$s \\n Latitude: %2$s",location.getLongitude(), location.getLatitude()); 
      Toast.makeText(MainActivity.this,message,Toast.LENGTH_SHORT).show(); 
     } 

    } 


    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent intent) { 

     if (requestCode == TAKE_PICTURE && resultCode== RESULT_OK && intent != null){ 
      // get bundle 
      Bundle extras = intent.getExtras(); 

      // get bitmap 
      bitMap = (Bitmap) extras.get("data"); 
      ivPhoto.setImageBitmap(bitMap); 

      GetLocationLatLong(); 

     } 
    } 

    private class MyLocationListener implements LocationListener{ 



     @Override 
     public void onLocationChanged(Location location) { 
      String message = String.format("New Location \n Longitude: %1$s \n Latitude: %2$s", location.getLongitude(), location.getLatitude()); 

      longitude = location.getLongitude(); 
      latitude = location.getLatitude(); 

      Toast.makeText(MainActivity.this, message, Toast.LENGTH_LONG).show(); 

      Log.d("Longittuteeeeeeeeeeee",message); 
     } 

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




      Toast.makeText(MainActivity.this, "Provider status changed",Toast.LENGTH_LONG).show(); 


     } 

     @Override 
     public void onProviderEnabled(String provider) { 
      Toast.makeText(MainActivity.this,"Provider enabled by the user. GPS turned on", Toast.LENGTH_LONG).show(); 

     } 

     @Override 
     public void onProviderDisabled(String provider) { 

      Toast.makeText(MainActivity.this, "Provider disabled by the user. GPS turned off", Toast.LENGTH_LONG).show(); 

     } 
    } 


} 

Dies sind die in manifest verwendet Berechtigungen: -

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" /> 
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" /> 
<uses-permission android:name="android.permission.CONTROL_LOCATION_UPDATES" /> 
<uses-permission android:name="android.permission.INTERNET"/> 

In dieser Erlaubnis, zwei Berechtigungen (ACCESS_MOCK_LOCATION, CONTROL_LOCATION_UPDATES) geben Fehler.

Fehler in Erlaubnis: -

verwendet Zulassungs android: name = "android.permission.ACCESS_MOCK_LOCATION"

Mock Standorte sollten nur in einem Test- oder Debug-spezifischen manifest angefordert werden Datei (in der Regel src/debug/AndroidManifest.xml) weniger ... (Strg + F1) Die Verwendung eines Schein-Location-Providers (durch die Erlaubnis android.permission.ACCESS_MOCK_LOCATION) sollte nur in Debug Builds (oder aus Tests) erfolgen) . In Gradle Projekten bedeutet, dass Sie diese Berechtigung nur Anforderung in einer Test- oder Debug-Quelle spezifische Manifest-Datei festgelegt. Um dies zu beheben, erstellen Sie eine neue Manifestdatei im Debug-Ordner und verschieben Sie das Element dorthin. Ein typischer Pfad zur Debug-Manifest-Überschreibungsdatei in einem Gradle-Projekt lautet src/debug/AndroidManifest.xml.

Bitte lassen Sie mich wissen, was ich hier falsch mache.

+0

Code, den Sie verwenden ist lat lang für immer, wenn es eine Änderung in der Lage ist, aber ich glaube nicht, dass Sie brauchen .Sie können Breite und Länge einfach erhalten, indem Sie diesem Link folgen http://www.androidhive.info/2012/07/android-gps-location-manager-tutorial/. Sie brauchen nur Code im Zusammenhang mit getLatitude und getLonglitude Methode –

Antwort

0

Dieser Teil Ihrer GetLocationLatLong Funktion muss in Ihrem onCreate Methode:

locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,MINIMUM_TIME_BETWEEN_UPDATES, MINIMUM_DISTANCE_CHANGE_FOR_UPDATES, new MyLocationListener()); 

Sie requestLocationUpdates vor diesem Verfahren setzen soll. Der Rest sollte gut funktionieren.

Auch brauchen Sie nicht diese Berechtigungen:

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

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

<uses-permission android:name="android.permission.CONTROL_LOCATION_UPDATES" /> 
+0

Hallo Bruder, ich habe versucht, was Sie vorgeschlagen haben, aber nichts geschieht. :( – Devraj

+0

Verwenden Sie Logs, um zu überprüfen, ob Ihre onActivityResult-Methode aufgerufen wird und wo. Überprüfen Sie auch, ob die Methode GetLocationLatLong überhaupt ist gerufen werden. Das Problem kann da sein. –

0

Versuchen Sie dies mit. Ich benutze diese derzeit, um den aktuellen Standort des Geräts zu erhalten.

public class GPSHelper { 

private Context mContext; 
// flag for GPS Status 
private boolean isGPSEnabled = false; 
// flag for network status 
private boolean isNetworkEnabled = false; 
private LocationManager locationManager; 
private double latitude; 
private double longitude; 

public GPSHelper(Context context) { 
    mContext = context; 

    locationManager = (LocationManager) context 
      .getSystemService(Context.LOCATION_SERVICE); 

} 

public LatLng getMyLocation() { 
    List<String> providers = locationManager.getProviders(true); 

    Location l = null; 
    for (int i = 0; i < providers.size(); i++) { 
     l = locationManager.getLastKnownLocation(providers.get(i)); 
     if (l != null) 
      break; 
    } 
    if (l != null) { 
     latitude = l.getLatitude(); 
     longitude = l.getLongitude(); 
    } 

    return new LatLng(latitude, longitude); 
} 

public boolean isGPSenabled() { 
    isGPSEnabled = locationManager 
      .isProviderEnabled(LocationManager.GPS_PROVIDER); 

    // getting network status 
    isNetworkEnabled = locationManager 
      .isProviderEnabled(LocationManager.NETWORK_PROVIDER); 

    return (isGPSEnabled || isNetworkEnabled); 
} 

/** 
* Function to get latitude 
*/ 
public double getLatitude() { 
    return latitude; 
} 

/** 
* Function to get longitude 
*/ 
public double getLongitude() { 
    return longitude; 
} 
} 

Verbrauch:

GPSHelper gpsHelper = new GPSHelper(getActivity());//I'm creating this object inside a fragment 
LatLng currentLatLng = gpsHelper.getMyLocation(); 
currentLat = currentLatLng.latitude; 
currentLng = currentLatLng.longitude; 

Berechtigungen:

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