Android-GPS,网络定位

本文介绍了一种在Android应用中实现位置服务的方法。通过获取系统的LocationService,检查GPS和网络定位的可用性,并使用LocationListener监听位置变化。文章还展示了如何处理权限问题及不同定位方式的切换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

private void getLocation() {
        locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        String locationProvider = "";
        List<String> providers = locationManager.getProviders(true);
        //GPS,网络定位是否可用
        if (providers.contains(LocationManager.GPS_PROVIDER)) {
            locationProvider = LocationManager.GPS_PROVIDER;
            Toast.makeText(getApplicationContext(),"GPS定位",Toast.LENGTH_SHORT).show();
        } else if (providers.contains(LocationManager.NETWORK_PROVIDER)) {
            locationProvider = LocationManager.NETWORK_PROVIDER;
            Toast.makeText(getApplicationContext(),"网络定位",Toast.LENGTH_SHORT).show();
        } else {
            return;
        }
        locationListener = new LocationListener() {
            //当坐标改变时触发此函数,如果Provider传进相同的坐标,它就不会被触发
            @Override
            public void onLocationChanged(Location location) {
                //Log.i("location",location.getLatitude()+"-"+location.getLongitude());
            }

            // Provider的状态在可用、暂时不可用和无服务三个状态直接切换时触发此函数
            @Override
            public void onStatusChanged(String provider, int status, Bundle extras) {

            }

            // Provider被enable时触发此函数,比如GPS被打开
            @Override
            public void onProviderEnabled(String provider) {

            }

            // Provider被disable时触发此函数,比如GPS被关闭
            @Override
            public void onProviderDisabled(String provider) {

            }
        };
        try{
            Location location = locationManager.getLastKnownLocation(locationProvider);
            if (location != null){
                Log.i("location",location.getLatitude()+"-"+location.getLongitude());
            }else {
                located = "定位";
            }
            locationManager.requestLocationUpdates(locationProvider, 1000, 1, locationListener);
        }catch (SecurityException e){
            located = "定位";
            Toast.makeText(getApplicationContext(),"no permission",Toast.LENGTH_SHORT).show();
        }
        invalidateOptionsMenu();
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值