大家好!最近在做一个android的应用里面用到GPS的内容,过程中遇到问题!
贴个代码: LocationManager locationManager;
String serviceName = Context.LOCATION_SERVICE;
locationManager = (LocationManager) this.getSystemService(serviceName);
// 查找到服务信息
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE); // 高精度
criteria.setAltitudeRequired(false);
criteria.setBearingRequired(false);
criteria.setCostAllowed(true);
criteria.setPowerRequirement(Criteria.POWER_LOW); // 低功耗
String provider = locationManager.getBestProvider(criteria, true); // 获取GPS信息
Location location = locationManager.getLastKnownLocation(provider); // 通过GPS获取位置
if(location==null){
location = locationManager.getLastKnownLocation(locationManager.NETWORK_PROVIDER);
}
if (location != null) {
double latitude = location.getLatitude();
double longitude= location.getLongitude();
Address = ConvertUtil.getAddress(longitude, latitude);
}else{
Address =" ";
}
// 设置监听器,自动更新的最小时间为间隔N秒(1秒为1*1000,这样写主要为了方便)或最小位移变化超过N米
locationManager.requestLocationUpdates(provider, 100 * 1000, 500, new LocationListener(){
@Override
public void onLocationChanged(Location arg0) {
// TODO Auto-generated method stub
}
@Override
public void onProviderDisabled(String arg0) {
// TODO Auto-generated method stub
}
@Override
public void onProviderEnabled(String arg0) {
// TODO Auto-generated method stub
}
@Override
public void onStatusChanged(String arg0, int arg1, Bundle arg2) {
// TODO Auto-generated method stub
}
});
我们Criteria 去获取最佳的Provider,然后去用实现监听位置的改变。
但是在真机上面,我们直接这么去获取的话,获取到的Location会是一个Null,权限注册什么的都没有问题,现在我就非常不解,我们应该怎么去获取一个Location,或者说是获取一个不为NULL的Location,还是我上面这个方法本身就不对?有没有更好的方法,
贴个代码: LocationManager locationManager;
String serviceName = Context.LOCATION_SERVICE;
locationManager = (LocationManager) this.getSystemService(serviceName);
// 查找到服务信息
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE); // 高精度
criteria.setAltitudeRequired(false);
criteria.setBearingRequired(false);
criteria.setCostAllowed(true);
criteria.setPowerRequirement(Criteria.POWER_LOW); // 低功耗
String provider = locationManager.getBestProvider(criteria, true); // 获取GPS信息
Location location = locationManager.getLastKnownLocation(provider); // 通过GPS获取位置
if(location==null){
location = locationManager.getLastKnownLocation(locationManager.NETWORK_PROVIDER);
}
if (location != null) {
double latitude = location.getLatitude();
double longitude= location.getLongitude();
Address = ConvertUtil.getAddress(longitude, latitude);
}else{
Address =" ";
}
// 设置监听器,自动更新的最小时间为间隔N秒(1秒为1*1000,这样写主要为了方便)或最小位移变化超过N米
locationManager.requestLocationUpdates(provider, 100 * 1000, 500, new LocationListener(){
@Override
public void onLocationChanged(Location arg0) {
// TODO Auto-generated method stub
}
@Override
public void onProviderDisabled(String arg0) {
// TODO Auto-generated method stub
}
@Override
public void onProviderEnabled(String arg0) {
// TODO Auto-generated method stub
}
@Override
public void onStatusChanged(String arg0, int arg1, Bundle arg2) {
// TODO Auto-generated method stub
}
});
我们Criteria 去获取最佳的Provider,然后去用实现监听位置的改变。
但是在真机上面,我们直接这么去获取的话,获取到的Location会是一个Null,权限注册什么的都没有问题,现在我就非常不解,我们应该怎么去获取一个Location,或者说是获取一个不为NULL的Location,还是我上面这个方法本身就不对?有没有更好的方法,
解决方案 »
- 两个Activity怎么多次回传数据?
- 开发android项目的流程
- android背景图片显示的问题
- android播放.mkv格式文件时,怎么屏蔽某个audio音轨?
- android中有类似于java中FileChooser这种控件吗??
- 全盘搜索然后运行搜索的程序
- eclipse调试 步进经常跟进到Android.jar或者DexFile.class文件怎么办?
- 如何从一个activity跳转到另一个activity的某一个界面啊
- 求助,这是怎么回事啊,貌似自从我删了那个ADT文件就开始出问题了
- Androidstudio打开遇到问题有没有大神指点迷津
- 重写ArrayAdapter问题
- 关于textview里的网络地址,请教一下
相应速度快的话也可采用基站定位(缺点:偏差比gps能大点).
if (status.isProviderEnabled(LocationManager.GPS_PROVIDER)|| status.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) {
// 如果GPS或網路定位開啟
}2.當你的app啟動的時候,一開始用LocationManager,除了getLastKnownLocation,通常一開始式要佈道位置的,因為一開始的初始定位沒有那麼快,所以真正取得位置都會是在 onLocationChanged() 這個方法裡面。locationManager.requestLocationUpdates(provider, 100 * 1000, 500, new LocationListener(){
@Override
public void onLocationChanged(Location arg0) {
// 等到確認有定位資訊或是定位資訊改變會呼叫這個方法
}
@Override
public void onProviderDisabled(String arg0) {
// TODO Auto-generated method stub
}
@Override
public void onProviderEnabled(String arg0) {
// TODO Auto-generated method stub
}
@Override
public void onStatusChanged(String arg0, int arg1, Bundle arg2) {
// TODO Auto-generated method stub
}
});