zoukankan      html  css  js  c++  java
  • 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);
    }
    }
    }

  • 相关阅读:
    【LeetCode】17. Letter Combinations of a Phone Number
    【LeetCode】16. 3Sum Closest
    【LeetCode】15. 3Sum 三个数和为0
    【LeetCode】14. Longest Common Prefix 最长前缀子串
    【LeetCode】13. Roman to Integer 罗马数字转整数
    【LeetCode】12. Integer to Roman 整型数转罗马数
    【LeetCode】11. Container With Most Water
    【LeetCode】10. Regular Expression Matching
    Models of good programmer
    RSA Algorithm
  • 原文地址:https://www.cnblogs.com/wangfeng520/p/5126193.html
Copyright © 2011-2022 走看看