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);
}
};
ありがとうございました。
'Log.e( "位置"、 "緯度:" +緯度+ "経度:" +経度)。 ' はあなたに場所を与えます –
私はそこに何かが欠けていると思いますか? "gps"とは何ですか? – FilipeOS
GPSTrackerクラスのオブジェクトは、[GPSTracker](https://www.androidhive.info/2012/07/android-gps-location-manager-tutorial/)からこのクラスを見つけることができます。 –