您的位置:首页 > 编程语言

第11章 LocationTest

2016-03-16 21:43 411 查看
import java.util.List;
import android.app.Activity;
import android.content.Context;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {

private TextView positionTextView;
private LocationManager locationManager;
private String provider;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

positionTextView=(TextView)findViewById(R.id.position_text_view);
locationManager=(LocationManager)getSystemService(Context.LOCATION_SERVICE);
//获取所有可用 的位置提供器
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;
Log.d("MainActivity","NETWORK_PROVIDER");
}else{
//当没有可用的位置提供器时,弹出Toast提示用户
Toast.makeText(this,"No location provider to use",Toast.LENGTH_SHORT).show();
return;
}
Location location=locationManager.getLastKnownLocation(provider);
if(location!=null){
//显示当前设备的位置信息
showLocation(location);
}else{
Log.d("MainActivity","location is null.");
}
locationManager.requestLocationUpdates(provider,5000,1,locationListener);
}

protected void onDestroy(){
super.onDestroy();
if(locationManager!=null){
//关闭程序时,将监听器移除
locationManager.removeUpdates(locationListener);
}
}

LocationListener locationListener=new LocationListener(){
@Override
public void onStatusChanged(String provider,int status,Bundle extras){

}

@Override
public void onProviderEnabled(String provider){

}

@Override
public void onProviderDisabled(String provider){

}

@Override
public void onLocationChanged(Location location){
//更新当前设备的位置信息
showLocation(location);
}
};

private void showLocation(Location location){
String currentPosition="latitude is "+location.getLatitude()+"\n"+
"longitude is "+location.getLongitude();
positionTextView.setText(currentPosition);
}

}


这个案例一开始调试出来,一片空白的。后来发现在宿舍里信号不好,GPS搜索不到信号。到了操场之后,才有书上的效果。
但是,关闭了GPS,想用NETWORK_PROVIDER来定位,发现不可以。后来我打印了一下那个Location,发现是null,现在也搞不明白。然后,也尝试着直接将GPS_PROVIDER那个If语句注释掉,直接选择NETWORK_PROVIDER还是不行,可是又不会弹出那个Toast。
我遇到的问题是,为什么调用NETWORK_PROVIDER打印出来的是一片空白的情况,实在难以理解?
权限,我声明的是<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息