android LocationManager的使用
android提供LoacationManager类来获取自己的经纬度。也可以通过反向地理编码发送http给google返回一个确定值给自己再在解析显示到textview上(Geocoding API)。
首先需要申明权限
<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" />
FINE权限对应的是GPS功能权限,
COARSE对应的是NETWORK权限,
Internet对应的是联网权限。
public class MainActivity extends AppCompatActivity {
@Bind(R.id.one_text)
TextView oneText;
private LocationManager locationManager;
private String provider;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
//这里传入true表示启用的位置提供器都得到返回
List<String> providerList = locationManager.getProviders(true);
if (providerList.contains(LocationManager.GPS_PROVIDER)) {
provider = LocationManager.GPS_PROVIDER;
} else if (providerList.contains(LocationManager.NETWORK_PROVIDER)) {
provider = LocationManager.NETWORK_PROVIDER;
} else {
Toast.makeText(this, "没有打开任何位置提供器", Toast.LENGTH_SHORT).show();
return;
}
/**
//如果直接拿GPS定位,这个Location很有肯能为Null.而出现空指针
//可能是BUG,GPS在室内,会为location或者很难找到
//而是用network则不会出现这个情况
*/
Location location = locationManager.getLastKnownLocation(provider);
if (location != null) {
/**
* 这个lacation是空的
* Toast也不会弹出来,说明程序不运行进来,location是空的
*/
Toast.makeText(this, "dadadaadadaadaddadadadada", Toast.LENGTH_SHORT).show();
showLocation(location);
}
//这个if也是要你检查权限,不加也能运行,但会红线提示而已
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
return;
}
/**
* 四个参数,第一个是GPS/NETWORK,第二个是刷新时间(毫秒),第三个是刷新距离(米),第四个是接口实例
*/
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 3000, 0, locationListener); //调用GPS
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 3000, 0, locationListener);//调用NETWORK
}
private void showLocation(Location location) {
String myLocation = "经度:" + location.getLatitude() + "\n"
+ "纬度:" + location.getLongitude();
Toast.makeText(this, "" + myLocation, Toast.LENGTH_SHORT).show();
oneText.setText(myLocation);
}
LocationListener locationListener = new LocationListener() {
/**
* 移动距离超过,调用此方法
* @param location
*/
@Override
public void onLocationChanged(Location location) {
showLocation(location);
}
@Override
public void onStatusChanged(String s, int i, Bundle bundle) {
}
@Override
public void onProviderEnabled(String s) {
}
@Override
public void onProviderDisabled(String s) {
}
};
@Override
protected void onDestroy() {
super.onDestroy();
if (locationManager != null) {
//这个if也是要你检查权限,不加也能运行,但会红线提示而已
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
return;
}
locationManager.removeUpdates(locationListener);
}
}
}
本文详细介绍了如何在Android应用中使用LocationManager类进行位置服务管理,包括请求位置更新、处理位置变化等操作,并展示了必要的权限声明及代码实现。

4871

被折叠的 条评论
为什么被折叠?



