首页 / 浏览问题 / 移动GIS / 问题详情
android 定位
47EXP 2021年08月27日
按照官方给的定位demo中的定位方式 locationmanager.requestlocationupdates,在模拟器中定位没问题,在小米测试机上执行完这一行不执行回调,请问下是什么原因

1个回答

您好,请确保手机是在空旷的地方,并且手机开启了相关定位权限和GPS定位设置。
9,137EXP 2021年08月27日
手机中其他定位软件正常使用,测试demo locationmanager 采用gps定位,不进入locationlistener监听
您那边有其他设备吗?可以使用其他设备运行看下是否能够进入回调。GPS定位必须要在空旷的室外运行,其他定位软件使用的可能是wifi定位加GPS定位的方式。
试了多个测试机,都不能定位,不走回调监听,但是模拟器就能定位成功
您那边方便把工程整理一下发我吗?可以上传百度云盘将地址发我。我这边看下你的程序
public class LocationActivity extends AppCompatActivity {

    private TextView tv_location;
    private Context context;

    @SuppressLint("MissingPermission")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_location);

        context = this;
        tv_location = (TextView) findViewById(R.id.tv_location);

        //获取LocationManager
        LocationManager lManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

        /**
         * 1:选择定位的方式
         * 2:定位的间隔时间
         * 3:当位置改变多少时进行重新定位
         * 4:位置的回调监听
         */
        lManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1, 0, new LocationListener() {
            //当位置改变的时候调用
            @Override
            public void onLocationChanged(Location location) {

                //经度
                double longitude = location.getLongitude();
                //纬度
                double latitude = location.getLatitude();

                //海拔
                double altitude = location.getAltitude();

                tv_location.setText("经度:==>"+longitude+" \n 纬度==>"+latitude+"\n"+"海拔==>"+altitude);
            }

            //GPS状态发生改变的时候调用
            @Override
            public void onStatusChanged(String provider, int status, Bundle extras) {


                switch (status){

                    case LocationProvider.AVAILABLE:

                        Toast.makeText(context,"当前GPS为可用状态!",Toast.LENGTH_SHORT).show();

                        break;

                    case LocationProvider.OUT_OF_SERVICE:

                        Toast.makeText(context,"当前GPS不在服务内",Toast.LENGTH_SHORT).show();

                        break;

                    case LocationProvider.TEMPORARILY_UNAVAILABLE:

                        Toast.makeText(context,"当前GPS为暂停服务状态",Toast.LENGTH_SHORT).show();
                        break;


                }

            }

            //GPS开启的时候调用
            @Override
            public void onProviderEnabled(String provider) {

                Toast.makeText(context,"GPS开启了",Toast.LENGTH_SHORT).show();

            }

            //GPS关闭的时候调用
            @Override
            public void onProviderDisabled(String provider) {

                Toast.makeText(context,"GPS关闭了",Toast.LENGTH_SHORT).show();

            }
        });




    }
}

这是又写的一个demo,只gps定位,在模拟器上可以定位到,真机上就不行,不走回调,我看到真机状态栏显示正在搜索GPS,意思是还没有搜索到GPS,等搜索到就走监听了吗

模拟器可以整个定位,真机上无法定位,一直显示gps搜索中
...