账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    使用原生网络定位,部分机型无法获取经纬度该怎么解决?
    40
    0

    现在是小米,华为,vivo可以,锤子坚果pro2不行,下面是代码:

    public class FinishedContractActivity extends BaseActivity implements LocationListener {
    
        private BottomSheetDialog mCheckSignDialog;
        private BottomSheetDialog mSignProcessDialog;
        private CheckSignBean checkSignBean;
        private SignProcessBean signProcessBean;
        private SealPresenter mPresenter = new SealPresenter(this);
        private LocationManager locationManager;
    
        //省略部分无关代码...
    
        @SuppressLint("MissingPermission")
        @Override
        protected void initView(Bundle savedInstanceState) {
    
            boolean deviceRooted = DeviceUtils.isDeviceRooted();//是否root
            if (!deviceRooted) {
                locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
                locationManager.requestLocationUpdates("network", 0, 0, this);
            }
    
            mToolbar.setVisibility(View.GONE);
            ImmersionBar.with(this).titleBar(toolbar).init();   //适配刘海屏,自动设置状态栏距离和沉浸式状态栏
            StatusBarUtil.setAndroidNativeLightStatusBar(this, true);    //设置状态栏字体颜色
    
            String id = getIntent().getStringExtra("id");
            String contractName = getIntent().getStringExtra("contractName");
            mContractName.setText(contractName);
            mTitle.setText(contractName.replace(".pdf", ""));
    
            int playAudio = getIntent().getIntExtra("playAudio", 0);
            if (playAudio == 1) {
                playingmusic(1);
            }
        }
    
    
        @Override
        public void onLocationChanged(Location location) {
            double latitude = location.getLatitude();//获取纬度
            double longitude = location.getLongitude();//获取经度
            String strLatitude = String.valueOf(latitude);
            String strLongitude = String.valueOf(longitude);
            if (strLatitude != null && strLatitude != "") {
                double longti = Double.parseDouble(strLongitude);
                double latitu = Double.parseDouble(strLatitude);
                getAddress(longti, latitu);
                locationManager.removeUpdates(this);
            }
        }
    
        @Override
        public void onStatusChanged(String provider, int status, Bundle extras) {
    
        }
    
        @Override
        public void onProviderEnabled(String provider) {
    
        }
    
        @Override
        public void onProviderDisabled(String provider) {
    
        }
    
        public String getAddress(double lnt, double lat) {
            Geocoder geocoder = new Geocoder(this);
            boolean falg = geocoder.isPresent();
            StringBuilder stringBuilder = new StringBuilder();
            try {
                //根据经纬度获取地理位置信息---这里会获取最近的几组地址信息,具体几组由最后一个参数决定
                List<Address> addresses = geocoder.getFromLocation(lat, lnt, 1);
                if (addresses.size() > 0) {
                    Address address = addresses.get(0);
                    for (int i = 0; i < address.getMaxAddressLineIndex(); i++) {
                        //每一组地址里面还会有许多地址。这里我取的前2个地址。xxx街道-xxx位置
                        if (i == 0) {
                            stringBuilder.append(address.getAddressLine(i)).append("-");
                        }
                        if (i == 1) {
                            stringBuilder.append(address.getAddressLine(i));
                            break;
                        }
                    }
    
    
                    String country = address.getCountryName();// 国家
                    String province = address.getAdminArea();//省
                    String city = address.getLocality();//市
                    String area = address.getSubLocality();//区
                    String street = address.getFeatureName();//详细地址
                    String id = getIntent().getStringExtra("id");
                    LogUtils.d("1054  id="+id+"   经度"+lnt+"  纬度"+lat+"  国家"+country+"   省"+province+"  市"+
                        city+"   区"+area+"   详细"+street);
                    //提交位置信息
                    LocationBody locationBody=new LocationBody(id,String.valueOf(lnt),String.valueOf(lat),country,province,city,area,street);
                    GlobalBody body = CustomEncryptUtil.customEncrypt(locationBody);
                    RxManager.getMethod().location(body).compose(RxUtil.schedulers(FinishedContractActivity.this))
                            .subscribe(new RxCallback<Object>(FinishedContractActivity.this) {
                                @Override
                                public void onSuccess(Object o, String msg) {
                                    LogUtils.d("1108  提交地理位置信息成功");
                                }
                            });
                    return currentLocation;
                }
            } catch (IOException e) {
                LogUtils.d("定位失败");
                e.printStackTrace();
            }
            return stringBuilder.toString();
        }
    
    }
    0
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 10 元积分
        全部回答
    • 0
    • 娇宠小可爱 普通会员 1楼

      原生网络定位是一种在手机或电脑上进行定位的技术,但不是所有的设备都支持。如果你的设备无法获取经纬度,可能是因为以下原因:

      1. 硬件限制:一些硬件设备,如一些高端手机,可能无法支持原生网络定位。例如,一些高端手机的GPS和基站支持可能非常有限。

      2. 软件限制:一些手机操作系统可能对原生网络定位的支持有限。例如,一些Android手机可能会在某些特定的情况下阻止使用原生网络定位。

      3. 网络问题:网络问题也可能导致无法获取经纬度。例如,如果网络信号不好,或者网络速度过慢,可能会导致定位失败。

      4. 应用问题:一些应用可能不支持原生网络定位。例如,一些地图应用可能只支持GPS定位。

      解决这些问题的方法可能包括:

      1. 清除手机或电脑的GPS和基站数据,然后重新启动设备。

      2. 检查你的手机或电脑的网络设置,确保它们允许使用原生网络定位。

      3. 重启你的设备,有时候这可以解决一些问题。

      4. 更新你的设备操作系统,看看是否有更新可以解决一些问题。

      5. 如果以上方法都不能解决问题,你可能需要联系设备制造商的技术支持,看看他们是否能提供一些帮助。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部