2017-09-06 14 views
1

私はこれらのことをたくさん知っていますが、すべてを読んだ後でも(それでも)問題を理解することはできません。Androidは一度ユーザーの所在地を取得する

基本的には、アプリを開いたり、ボタンを押して共有環境設定で保存したときに、ユーザーのFINE LOCATIONを取得したいと考えています。 私の古いコードは機能しましたが、座標を取得するのが遅かったので、sharedpreferences(GPSアイコンがバーに表示されません)で保存できませんでした。

OLD:StackOverflowの上のポストから使用

public void askLocation() { 
    if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) { 
     LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE); 
     Criteria criteria = new Criteria(); 
     String provider = locationManager.getBestProvider(criteria, true); 
     try { 
      mLocation = locationManager.getLastKnownLocation(provider); 
     } catch (SecurityException e) { 
      // 
     } 

     String currentCoordinates = somename.getString("LastLocation", "0,0"); 

     if (mLocation != null) { 
      double currentLatitude = mLocation.getLatitude(); 
      double currentLongitude = mLocation.getLongitude(); 

      currentCoordinates = currentLatitude + "," + currentLongitude; 
     } 

     SharedPreferences.Editor editor = somename.edit(); 
     editor.putString("LastLocation", currentCoordinates).commit(); 

     Log.d("SomeName", "lastLocation start: " + currentCoordinates); 
    } 
} 

私の新しいコードは、適切に(バーにGPSアイコン表示)になっていません。

public void askLocation() { 
    if (ContextCompat.checkSelfPermission(MainActivity.this,             Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED)   { 
     Criteria criteria = new Criteria(); 
     criteria.setAccuracy(Criteria.ACCURACY_COARSE); 
     criteria.setPowerRequirement(Criteria.POWER_LOW); 
     criteria.setAltitudeRequired(false); 
     criteria.setBearingRequired(false); 
     criteria.setSpeedRequired(false); 
     criteria.setCostAllowed(true); 
     criteria.setHorizontalAccuracy(Criteria.ACCURACY_HIGH); 
     criteria.setVerticalAccuracy(Criteria.ACCURACY_HIGH); 

     // Now create a location manager 
     LocationManager locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 
     Looper looper = null; 
     locationManager.requestSingleUpdate(criteria, locationListener, looper); 

     String currentCoordinates = somename.getString("LastLocation", "0,0"); 
     Log.d("SomeName", "lastLocation askLocation: " + currentCoordinates); 
    } 
} 

final LocationListener locationListener = new LocationListener() { 
    @Override 
    public void onLocationChanged(Location location) { 
     mLocation = location; 
     String currentCoordinates = somename.getString("LastLocation", "0,0"); 

     if (location != null) { 
      double currentLatitude = location.getLatitude(); 
      double currentLongitude = location.getLongitude(); 

      currentCoordinates = currentLatitude + "," + currentLongitude; 
     } 

     SharedPreferences.Editor editor = somename.edit(); 
     editor.putString("LastLocation", currentCoordinates).commit(); 
    } 

    @Override 
    public void onStatusChanged(String provider, int status, Bundle extras) { 
     Log.d("Status Changed", String.valueOf(status)); 
    } 

    @Override 
    public void onProviderEnabled(String provider) { 
     Log.d("Provider Enabled", provider); 
    } 

    @Override 
    public void onProviderDisabled(String provider) { 
     Log.d("Provider Disabled", provider); 
    } 
}; 

ありがとうございました。

答えて

0

この方法を試してみると、アプリを開いたりボタンを押したりして共有環境設定で保存することができます。

   if (Constants.isOnline(getApplicationContext())) { 
         gps = new GPSTracker(v.getContext(),this); 
         if (gps.canGetLocation()) { 

          latitude = gps.getLatitude(); 
          longitude = gps.getLongitude(); 
          Log.e("Location ", "latitude : " + latitude + "longitude :" + longitude); 

         } else { 
          gps.showSettingsAlert(); 
         } 
       } 

isOnline()は、ユーザーがインネット接続を有効にしているかどうかを確認するためのものです。

public static boolean isOnline(Context c) { 
    ConnectivityManager cm = (ConnectivityManager) c.getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo netInfo = cm.getActiveNetworkInfo(); 
    if (netInfo != null && netInfo.isConnectedOrConnecting()) { 
     return true; 
    } else { 
     Toast.makeText(c, "No Internet Connection.", Toast.LENGTH_SHORT).show(); 
    } 
return false; 

}

+0

'Log.e( "位置"、 "緯度:" +緯度+ "経度:" +経度)。 ' はあなたに場所を与えます –

+0

私はそこに何かが欠けていると思いますか? "gps"とは何ですか? – FilipeOS

+0

GPSTrackerクラスのオブジェクトは、[GPSTracker](https://www.androidhive.info/2012/07/android-gps-location-manager-tutorial/)からこのクラスを見つけることができます。 –

関連する問題