2016-04-18 3 views
0

Я пытаюсь получить информацию о местоположении. Мне нужна долгота и широта.Не удается получить широту и долготу

Я использую свой телефон для запуска и отладки. 4.4.2.

Мои AndroidManifest Файл:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.peylx.brstpcu.voteapp"> 
    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:supportsRtl="true" 
     android:theme="@style/AppTheme"> 

     <activity android:name=".MainActivity"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <activity 
      android:name=".HomeActivity" 
      android:label="@string/title_activity_home" 
      android:theme="@style/AppTheme.NoActionBar"></activity> 
    </application> 

</manifest> 

Моя активность

package com.peylx.brstpcu.voteapp; 

import android.Manifest; 
import android.content.Context; 
import android.content.Intent; 
import android.content.pm.PackageManager; 
import android.location.Criteria; 
import android.location.Location; 
import android.location.LocationListener; 
import android.location.LocationManager; 
import android.media.audiofx.BassBoost; 
import android.os.Build; 
import android.os.Bundle; 
import android.provider.Settings; 
import android.support.annotation.NonNull; 
import android.support.v4.app.ActivityCompat; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.util.Log; 
import android.view.View; 
import android.widget.Button; 
import android.widget.ListView; 
import android.widget.Toast; 

import java.util.ArrayList; 


public class HomeActivity extends AppCompatActivity { 


    private LocationManager locationManager; 
    private LocationListener locationListener; 
    private double latitude; 
    private double longitude; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_home); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 



     locationManager = (LocationManager) getSystemService(LOCATION_SERVICE); 
     locationListener = new LocationListener() { 
      @Override 
      public void onLocationChanged(Location location) { 
       latitude = location.getLatitude(); 
       longitude = location.getLongitude(); 
       Toast.makeText(getApplicationContext(),"Latitude = " + Double.toString(latitude) + "Longitude = " + Double.toString(longitude),Toast.LENGTH_LONG).show(); 
      } 

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

      } 

      @Override 
      public void onProviderEnabled(String provider) { 

      } 

      @Override 
      public void onProviderDisabled(String provider) { 
       Intent settingsIntent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); 
       startActivity(settingsIntent); 
      } 
     }; 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
      if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 

       requestPermissions(new String[]{ 
         Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.INTERNET 
       }, 10); 

       return; 
      } 
     } else { 
      configureButton(); 
     } 

    } 

    @Override 
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { 
     super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
     switch (requestCode){ 
      case 10: 
       if (grantResults.length>0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) 
        configureButton(); 
       return; 
     } 

    } 

    private void configureButton(){ 
       locationManager.requestLocationUpdates("gps", 5000, 0, locationListener); 

    } 
} 

Когда я пытаюсь отлаживать программу, она не идет onLocationChanged() метод. Поэтому я не могу получить сообщение Toast.

Что можно сделать для решения этой проблемы?

+1

Где вы установите слушателя? –

+0

Я хочу получить все это при начале работы. Итак, почему я добавил метод configureButton() в раздел onCreate –

+0

Вы спрашиваете кнопку для прослушивания кнопок? если вы запрашиваете locationListener, я уже использовал его по методу configureButton –

ответ

0

попробуйте код ниже:

Вызвать метод checkLocation() из метода OnCreate():

// ******************************************************************************** 
    public void checkLocation(Activity activity) { 
     locationManager = (LocationManager) activity.getSystemService(Context.LOCATION_SERVICE); 
     Criteria c = new Criteria(); 
     provider = locationManager.getBestProvider(c, false); 

     location = getLocation(activity); 
     List<String> providers = locationManager.getProviders(true); 

    for (String provider : providers) { 
     Location l = locationManager.getLastKnownLocation(provider); 
     Log.d("Location provider", "Location provider : " + l + "locationManager" + locationManager); 
     if (l == null) { 

      continue; 
     } else { 
      location = l; 
      break; 

     } 

    } 
     locationManager.requestLocationUpdates(provider, 400, 1, this); 
     locationManager.removeUpdates(this); 

     if (location != null) { 
      // get latitude and longitude of the location 
      onLocationChanged(location); 
      // display on text view 

     } else { 
      // Toaster.showToast(this, 
      // getResources().getString(R.string.NoConnection)); 
      Log.d("cahngeLag", "Lat: " + lat + "lng" + lng + "location" + location); 
     } 
    } 

    // ===============================GetLatLang============================ 
    public Location getLocation(Activity activity) { 
     try { 
      locationManager = (LocationManager) activity.getSystemService(Context.LOCATION_SERVICE); 

      // getting GPS status 
      isGPSEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); 

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

      if (!isGPSEnabled && !isNetworkEnabled) { 
       // no network provider is enabled 
      } else { 
       if (isNetworkEnabled) { 
        locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 400, 0, this); 
        Log.d("Network", "Network Enabled"); 
        if (locationManager != null) { 
         location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER); 
         if (location != null) { 
          lat = location.getLatitude(); 
          lng = location.getLongitude(); 
         } 
        } 
       } 
       // if GPS Enabled get lat/long using GPS Services 
       if (isGPSEnabled) { 
        if (location == null) { 
         locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 400, 0, this); 
         Log.d("GPS", "GPS Enabled"); 
         if (locationManager != null) { 
          location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); 
          if (location != null) { 
           lat = location.getLatitude(); 
           lng = location.getLongitude(); 
          } 
         } 
        } 
       } 
      } 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

     return location; 
    } 

    @Override 
    public void onLocationChanged(Location location) { 
     lat = location.getLatitude(); 
     lng = location.getLongitude(); 
    } 

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

    } 

    @Override 
    public void onProviderEnabled(String provider) { 

    } 

    @Override 
    public void onProviderDisabled(String provider) { 

    } 
+0

04-18 16: 38: 04.460 1610-1610/com.peylx.brstpcu.voteapp D/cahngeLag: Lat: 0.0lng0.0locationnull 04-18 16:38: 04.550 1610-1610/com.peylx.brstpcu.voteapp I/ActivityManager: Timeline: Activity_idle id: [email protected] время: 159437272 04-18 16:38:10.310 1610-1610/com.peylx.brstpcu.voteapp D/Network: Network Enabled 04-18 16: 38: 10.310 1610-1610/com.peylx.brstpcu.voteapp D/GPS: включен GPS –

+0

Я получил эти журналы –

+0

отредактированный код, пожалуйста, попробуйте. –

0

Попробуйте это -

1) Реализовать OnMyLocationChangeListener в вашем HomeActivity.

2) Копия foll. Метод -

private Location getMyLocation() { 
     LocationManager lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 
     Location myLocation = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER); 


     // if Location wasn't found 
     if (myLocation == null) { 
      Criteria criteria = new Criteria(); 
      criteria.setAccuracy(Criteria.ACCURACY_COARSE); 

      String provider = lm.getBestProvider(criteria, true); 
      // Use the provider to get the last known location 
      myLocation = lm.getLastKnownLocation(provider); 
      double lat1 = myLocation.getLatitude(); 
      double lng1 = myLocation.getLongitude(); 
      Toast.makeText(HomeActivity.this,"Latitude = " + lat1 + "Longitude = " + lng1,Toast.LENGTH_LONG).show(); 
     } 

     return myLocation; 
    } 

3) Вызов getMyLocation() метод OnCreate()

Это работает для меня :)

Примечание: OnMyLocationChangeListener осуждается (пожалуйста, проверьте Google документации)

+0

Могу ли я добавить некоторые зависимости для использования этого метода? –

+0

Нет .. Не требуется. Просто реализуйте этот интерфейс в своей деятельности. !!! –

+0

i can not реализует OnMyLocationListener. Как насчет LocationListener? извините im новичок немного –

0

Прежде всего вашей деятельности должна осуществлять LocationListener

public class HomeActivity extends AppCompatActivity implements LocationListener{ 


private LocationManager locationManager; 
private LocationListener locationListener; 
private double latitude; 
private double longitude; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_home); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 



    locationManager = (LocationManager) getSystemService(LOCATION_SERVICE); 
    locationListener = new LocationListener() { 
     @Override 
     public void onLocationChanged(Location location) { 
      latitude = location.getLatitude(); 
      longitude = location.getLongitude(); 
      Toast.makeText(getApplicationContext(),"Latitude = " + Double.toString(latitude) + "Longitude = " + Double.toString(longitude),Toast.LENGTH_LONG).show(); 
     } 

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

     } 

     @Override 
     public void onProviderEnabled(String provider) { 

     } 

     @Override 
     public void onProviderDisabled(String provider) { 
      Intent settingsIntent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); 
      startActivity(settingsIntent); 
     } 
    }; 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
     if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 

      requestPermissions(new String[]{ 
        Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.INTERNET 
      }, 10); 

      return; 
     } 
    } else { 
     configureButton(); 
    } 

} 

@Override 
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { 
    super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
    switch (requestCode){ 
     case 10: 
      if (grantResults.length>0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) 
       configureButton(); 
      return; 
    } 

} 

private void configureButton(){ 
      locationManager.requestLocationUpdates("gps", 5000, 0, locationListener); 

    } 
}