2016-03-21 19 views
0

私の問題オフになっている場合は、ネットワークプロバイダを使用して緯度と経度を取得する方法は次の2行を自分のコードは、GPSからの位置を取っていませんが、常にネットワークプロバイダからアンドロイド - 場所の設定が

は、私が追加したことがあるです私の次のコードで

Log.i("GPSTracker GPS","lat : " + latitude + ", long : " + longitude); 
Log.i("GPSTracker Net","lat : " + latitude + ", long : " + longitude); 

Log.i("GPSTracker GPS","lat : " + latitude + ", long : " + longitude); 
ながら、私のアプリは、場所

を取得するために使用しているかどうか確認します

私の全体のコードを呼び出されることはありません

public Location getLocation() { 
    try { 
     locationManager = (LocationManager) context.getSystemService(LOCATION_SERVICE); 
     isGPSEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); 
     isNetworkEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER); 
     if (isGPSEnabled || isNetworkEnabled) { 
      this.canGetLocation = true; 
      if (isGPSEnabled) { 
       if (location == null) { 
        if (ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) 
          != PackageManager.PERMISSION_GRANTED) { 
         // TODO: Consider calling 
         // ActivityCompat#requestPermissions 
         // here to request the missing permissions, and then overriding 
         // public void onRequestPermissionsResult(int requestCode, String[] permissions, 
         //           int[] grantResults) 
         // to handle the case where the user_tab grants the permission. See the documentation 
         // for ActivityCompat#requestPermissions for more details. 
         if (!ActivityCompat.shouldShowRequestPermissionRationale((Activity) context, 
           Manifest.permission.ACCESS_FINE_LOCATION)) { 

          ActivityCompat.requestPermissions((Activity) context, 
            new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 
            PackageManager.PERMISSION_GRANTED); 
          if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) { 
           ActivityCompat.requestPermissions((Activity) context, 
             new String[]{Manifest.permission.LOCATION_HARDWARE}, 
             PackageManager.PERMISSION_GRANTED); 
          } 
         } 
        } 
        locationManager.requestLocationUpdates(
          LocationManager.GPS_PROVIDER, 
          MIN_TIME_BW_UPDATES, 
          MIN_DISTANCE_CHANGE_FOR_UPDATES, 
          this); 
        if (locationManager != null) { 
         location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); 
         if (location != null) { 
          latitude = location.getLatitude(); 
          longitude = location.getLongitude(); 
          Log.i("GPSTracker GPS","lat : " + latitude + ", long : " + longitude); 
         } 
        } 
       } 
      } 
      if (isNetworkEnabled) { 

       if (ActivityCompat.checkSelfPermission(context, Manifest.permission.INTERNET) 
         != PackageManager.PERMISSION_GRANTED) { 
        // TODO: Consider calling 
        // ActivityCompat#requestPermissions 
        // here to request the missing permissions, and then overriding 
        // public void onRequestPermissionsResult(int requestCode, String[] permissions, 
        //           int[] grantResults) 
        // to handle the case where the user_tab grants the permission. See the documentation 
        // for ActivityCompat#requestPermissions for more details. 
        if (!ActivityCompat.shouldShowRequestPermissionRationale((Activity) context, 
          Manifest.permission.INTERNET)) { 

         ActivityCompat.requestPermissions((Activity) context, 
           new String[]{Manifest.permission.INTERNET}, 
           PackageManager.PERMISSION_GRANTED); 
        } 
        if (!ActivityCompat.shouldShowRequestPermissionRationale((Activity) context, 
          Manifest.permission.ACCESS_COARSE_LOCATION)) { 

         ActivityCompat.requestPermissions((Activity) context, 
           new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, 
           PackageManager.PERMISSION_GRANTED); 
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) { 
          ActivityCompat.requestPermissions((Activity) context, 
            new String[]{Manifest.permission.LOCATION_HARDWARE}, 
            PackageManager.PERMISSION_GRANTED); 
         } 
        } 
       } 
       locationManager.requestLocationUpdates(
         LocationManager.NETWORK_PROVIDER, 
         MIN_TIME_BW_UPDATES, 
         MIN_DISTANCE_CHANGE_FOR_UPDATES, 
         this); 
       if (locationManager != null) { 
        location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER); 
        if (location != null) { 
         latitude = location.getLatitude(); 
         longitude = location.getLongitude(); 
         Log.i("GPSTracker Net","lat : " + latitude + ", long : " + longitude); 
        } 
       } 
      } 

     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    locationManager.removeUpdates(this); 
    return location; 
} 

マイマニフェストファイルが

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

で、次のされて、私は場所が オンにすると私のアプリは、GPSからの位置を取るようにしたいと設定の場所がオフの場合、ネットワークプロバイダから緯度と経度を取得する - 方法がある場合

答えて

1

2つの理由があります。

1)あなたのコードは間違った順序で処理を行います。 gpsを確認してからネットワークに入ります。したがって、どちらも有効になっている場合(99%の時間)、GPSが上書きされます。

2)GPSに時間がかかります。あなたはほとんど動作しないgetLastKnownLocationを呼び出そうとしています。 GPSの場所が必要な場合は、コールバックを待ちます。

サイドノート:このコードは、複数の方法でひどく欠陥があります。 GPSTrackerがひどく壊れています。それを使用しないでください。理由を見るhttp://gabesechansoftware.com/location-tracking/

+0

リンクのコードがAPIレベル23に適していません...更新して共有してください –

+0

あなたは使用しているコードを使用しない理由を説明したコードを使用しないでください。または、自分で更新してください。私は約2023年にこのようなものに戻る時間があります。 –

関連する問題