我正在尝试实现以下代码,以定期获取用户的位置并在屏幕上显示有关其位置的一些信息。当我使用getLastKnownLocation()
时,它可以按预期工作,但仅在启动应用程序时更新了值。我现在用getLastKnownLocation
及其函数替换了调用LocationListener
的单行代码。构建时没有错误,但该应用程序停止运行并在启动时崩溃。
package com.example.locate;
import androidx.appcompat.app.AppCompatActivity;
import android.Manifest;
import android.content.Context;
import android.content.pm.PackageManager;
import android.location.Address;
import android.location.Criteria;
import android.location.Geocoder;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.widget.TextView;
import java.io.IOException;
import java.util.List;
import java.util.Locale;
public abstract class MainActivity extends AppCompatActivity implements LocationListener {
TextView latitudeTV;
TextView longitudeTV;
double latitude = 0.0;
double longitude = 0.0;
LocationManager locationManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
latitudeTV = (TextView)findViewById(R.id.latitude);
longitudeTV = (TextView)findViewById(R.id.longitude);
locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
if (checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
return;
}
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 2000, 0, locationListener);
//Location location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
if (location != null) {
onLocationChanged(location);
}
else {
longitudeTV.setText("Longitude:\nPermission Denied");
latitudeTV.setText("Latitude:\nPermission Denied");
}
}
LocationListener locationListener = new LocationListener() {
@Override
public void onLocationChanged(Location location) {
longitude = location.getLongitude();
latitude = location.getLatitude();
longitudeTV.setText("Longitude: \n" + longitude);
latitudeTV.setText("Latitude: \n" + latitude);
}
@Override
public void onStatusChanged(String s, int i, Bundle bundle) {
}
@Override
public void onProviderEnabled(String s) {
}
@Override
public void onProviderDisabled(String s) {
}
};
}
您应该添加日志猫。根据您的代码,您还必须删除或注释以下代码。
`if (location != null) {
onLocationChanged(location);
}
else {
longitudeTV.setText("Longitude:\nPermission Denied");
latitudeTV.setText("Latitude:\nPermission Denied");
}`