2015-01-02 9 views
0

Я попытался получить текущее местоположение в Android. По крайней мере, я взял этот пример из этой публикации.получить текущее местоположение в Android

How do I get the current GPS location programmatically in Android?

Хотя этот пост пять лет, CommonsWare сказал мне, чтобы задать новый вопрос. Вот мой фрагмент кода.

@Override 
public void onCreate(Bundle arg0) { 
    super.onCreate(arg0); 
    Log.i(TAG, "onCreate"); 
    setHasOptionsMenu(true); 
    mActivity = (CustomerTabs) this.getActivity(); 
    mActivity.getActionBar().hide(); 

    if (checkGooglePlayServicesAvailable()){ 
     enableTabs(false); 
     showDialog(true, null); 
     requestPosition(); 
    } 


boolean checkGooglePlayServicesAvailable() { 
    final int connectionStatusCode = GooglePlayServicesUtil 
      .isGooglePlayServicesAvailable(getActivity()); 
    Log.i(TAG, 
      "checkGooglePlayServicesAvailable, connectionStatusCode=" 
        + connectionStatusCode); 
    if (GooglePlayServicesUtil.isUserRecoverableError(connectionStatusCode)) { 
     //showDialog(false,null); 
     showGooglePlayServicesAvailabilityErrorDialog(connectionStatusCode); 
     return false; 
    } 
    return true; 
} 

void showGooglePlayServicesAvailabilityErrorDialog(
     final int connectionStatusCode) { 
    getActivity().runOnUiThread(new Runnable() { 
     public void run() { 
      try { 
       final Dialog dialog = GooglePlayServicesUtil.getErrorDialog(
         connectionStatusCode, getActivity(), 
         101); 
       if (dialog == null) { 
        Log.e(TAG, 
          "couldn't get GooglePlayServicesUtil.getErrorDialog"); 
       } 
      }catch (Exception e){ 
       e.printStackTrace(); 
      } 
     } 
    }); 
} 

    void requestPosition(){ 
    Log.i(TAG,"requestPosition"); 

    locationManager = (LocationManager) getActivity().getSystemService(Context.LOCATION_SERVICE); 
    try { 
     locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 
       60000, 1000, 
       onLocationChange); 
    }catch (Exception e){ 
     e.printStackTrace(); 
     showDialog(false, null); 
     enableTabs(true); 
     displayMessage(getString(R.string.position_fail)); 
    } 
} 

LocationListener onLocationChange=new LocationListener() { 
    @Override 
    public void onLocationChanged(android.location.Location location) { 
     Log.i(TAG, "onLocationChange " + location.getLatitude() + "/" + location.getLongitude()); 
     TemporaryPersister.getInstance().setCurrentPosition(new LatLng(location.getLatitude(),location.getLongitude())); 
     requestLocations(); 
    } 

разрешения на манифеста:

<permission 
    android:name="versatec.organightandroid.permission.MAPS_RECEIVE" 
    android:protectionLevel="signature"/> 
<uses-permission android:name="versatec.organightandroid.permission.MAPS_RECEIVE"/> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 
<uses-permission android:name="android.permission.INTERNET"/> 
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES "/> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> 

EDIT:

Это решение работает на 4.1 (S3 мини) с и без Wi-Fi, но не работает на другом устройстве (S3: без SIM - проблема?) В WiFi. Появляется диалоговое окно, запрашивается запросPosition(), и замечание происходит ...

У меня получена обратная связь от тестера, что он не работает (ничего не происходит) на 4.2 - S4, доступной сети.

Log:

I/Google Maps Android API﹕ Google Play services package version: 6599036 
I/Map﹕ onCreate 
I/Map﹕ checkGooglePlayServicesAvailable, connectionStatusCode=0 
I/Map﹕ showDialog true 
I/Map﹕ requestPosition 
I/Map﹕ onCreateView 
I/Map﹕ onActivityCreated 
+0

Пожалуйста, объясните ** полностью и точно **, что означает «не на 4.2.2». Например, сбой вашего приложения? Если да, то какова трассировка стека Java, связанная с сбоем? Является ли устройство 4.2.2 планшетом WiFi? – CommonsWare

+0

ОК. См. Мое редактирование. – Bobbelinio

+0

Могут ли пользователи отключить настройку местоположения? Это происходит последовательно или только несколько раз? –

ответ

0

Это происходит потому, что: locationManager.requestLocationUpdates (LocationManager.NETWORK_PROVIDER, ....) Вы использовали только провайдер сети ...

Если вы хотите быть уверены, получить местонахождение, зарегистрироваться и для других поставщиков.

+0

Я не хочу, чтобы мои пользователи включали GPS. Я хочу получить текущую позицию только по сети. Это возможно, не так ли? – Bobbelinio

+0

Да, возможно ... и это объясняет, почему это не работает: S3: без SIM ... –

+0

это только тестовое устройство. В общем, его необходимо иметь SIM-карту, это нормально. Но он не работает на S4 mini (4.2.2) с SIM-картой. Зачем? – Bobbelinio

Смежные вопросы