要开发一个离线定位程序,你可以使用Android的LocationManager类和Geocoder类。
1、首先,在AndroidManifest.xml中添加以下权限:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />
2、在你的Activity或Fragment中,创建一个LocationManager实例和一个Geocoder实例:
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.widget.TextView;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import java.io.IOException;
import java.util.List;
import java.util.Locale;
public class MainActivity extends AppCompatActivity implements LocationListener {
private LocationManager locationManager;
private TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = findViewById(R.id.textView);
locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
try {
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
} catch (SecurityException e) {
e.printStackTrace();
}
}
@Override
public void onLocationChanged(Location location) {
double latitude = location.getLatitude();
double longitude = location.getLongitude();
String address = getAddress(latitude, longitude);
textView.setText("经度:" + longitude + "
纬度:" + latitude + "
地址:" + address);
}
private String getAddress(double latitude, double longitude) {
Geocoder geocoder = new Geocoder(this, Locale.getDefault());
List<Address> addresses = null;
try {
addresses = geocoder.getFromLocation(latitude, longitude, 1);
} catch (IOException e) {
e.printStackTrace();
}
if (addresses != null && !addresses.isEmpty()) {
Address address = addresses.get(0);
return address.getAddressLine(0);
} else {
return "无法获取地址";
}
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onProviderDisabled(String provider) {
Toast.makeText(this, "请打开GPS", Toast.LENGTH_SHORT).show();
}
}
3、在布局文件(如activity_main.xml)中添加一个TextView用于显示位置信息:
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="16sp" />
这个程序会在屏幕上显示当前位置的经纬度和地址。请注意,这个程序需要设备具有GPS功能,并且需要在运行时请求位置权限。