• GPS基础


    public class MainActivity extends Activity {
    private LocationManager manager;
    private List<String> providers;// 可以用GPS还是网络来定位
    private Location location;// 我们所在的位置
    private String provider;// 用哪种方式定位
    private LocationListener listener;// 位置改变的监听

    private BaiduMap baiduMap;// 百度地图控制器
    private MapView mapview;// 地图容器

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    // 初始化地图
    SDKInitializer.initialize(getApplicationContext());// 初始化<meta-data>

    setContentView(R.layout.map_main);

    mapview = (MapView) findViewById(R.id.mapview);
    baiduMap = mapview.getMap();
    baiduMap.setMyLocationEnabled(true);// 显示地图上的那个点

    // 位置服务
    manager = (LocationManager) getSystemService(LOCATION_SERVICE);

    providers = manager.getProviders(true);// 得到此设备上可用的定位(GPS.NETWORK)

    if (providers.contains(LocationManager.GPS_PROVIDER)) {
    provider = LocationManager.GPS_PROVIDER;
    } else if (providers.contains(LocationManager.NETWORK_PROVIDER)) {
    provider = LocationManager.NETWORK_PROVIDER;
    } else {// 网络和GPS没有打开
    Toast.makeText(this, "找不到可用的网络或者GPS", Toast.LENGTH_SHORT).show();
    }

    // location = manager.getLastKnownLocation(provider);// 上面找到的可用的定位方式
    location = manager
    .getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
    if (location != null) {
    showLocation(location);
    }

    listener = new MyLocationListener();
    // 位置在改变的时候,信息也得跟着改变,注册
    manager.requestLocationUpdates(provider, 2000, 3, listener);// 哪个定位方式,多长时间定位一次,最少移动多远(米),具体定位的代码

    // Log.i("经度:", ""+location.getLatitude());
    // Log.i("纬度:", ""+location.getLongitude());

    // for(String p: provider){
    // //LocationManager.GPS_PROVIDER
    // //LocationManager.NETWORK_PROVIDER
    //
    // Log.i("哪些可用的方式定位", p);
    // }
    }

    // 定位监听
    class MyLocationListener implements LocationListener {

    @Override
    public void onLocationChanged(Location location) {// 当位置改变了调用
    showLocation(location);
    }

    @Override
    public void onProviderDisabled(String provider) {// 定位功能关闭了

    }

    @Override
    public void onProviderEnabled(String provider) {// 定位功能能用了

    }

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {// 定位方式改变了

    }

    }

    public void showLocation(Location location) {// 写一个定位的方法,找到上面设置好的位置信息
    // Log.i("经度:", "" + location.getLatitude());
    // Log.i("纬度:", "" + location.getLongitude());
    double latitude = location.getLatitude();
    double longitude = location.getLatitude();

    // 将定位的经度纬度给百度API的LATLNG类
    LatLng ll = new LatLng(latitude, longitude);
    // 定位地图的改变
    MapStatusUpdate update = MapStatusUpdateFactory.newLatLng(ll);
    baiduMap.animateMapStatus(update);
    update = MapStatusUpdateFactory.zoomTo(17f);// 3-19,数字越大,距离最小
    baiduMap.animateMapStatus(update);

    // AlertDialog.Builder builder = new
    // AlertDialog.Builder(this).setTitle("ddd").setMessage("ddd");
    // builder.create();
    MyLocationData.Builder builder = new MyLocationData.Builder().latitude(
    latitude).longitude(longitude);// 构造一个MyLocationData.Builder对象

    // 构造 MyLocationData对象
    MyLocationData data = builder.build();

    // 把我的位置标注在地图上
    baiduMap.setMyLocationData(data);
    }

    // 暂停的时候
    @Override
    protected void onPause() {
    super.onPause();
    mapview.onPause();
    }

    // 持续运行的时候
    @Override
    protected void onResume() {
    super.onResume();
    mapview.onResume();
    }

    // 退出的时候
    @Override
    protected void onDestroy() {
    super.onDestroy();
    baiduMap.setMyLocationEnabled(false);
    mapview.onDestroy();
    if (manager != null) {
    manager.removeUpdates(listener);
    }
    }
    }

  • 相关阅读:
    积累
    AnkhSVN使用记录
    时间戳
    Nhibernate
    Css的sb问题
    ajax
    WAS资料收集
    CryStal资料收集
    Decorator模式
    MSDN WebCast网络广播全部下载列表
  • 原文地址:https://www.cnblogs.com/wangfeng520/p/5126193.html
Copyright © 2020-2023  润新知