【问题标题】:onLocationChanged() not called when mocking location模拟位置时未调用 onLocationChanged()
【发布时间】:2015-01-09 20:55:55
【问题描述】:

我无法在我的真实设备上发送模拟位置。我在设置中启用了模拟位置,在位置设置中禁用了网络位置。

清单:

 <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <uses-permission android:name="android.permission.VIBRATE"/>
    <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />

代码如下:

private static final String PROVIDER_NAME = "flp";
locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
locationManager.setTestProviderEnabled(PROVIDER_NAME, true);
locationManager.requestLocationUpdates(
                        LocationManager.GPS_PROVIDER, 1000, 1, new LocationListener() {
                            @Override
                            public void onLocationChanged(Location location) {

                            }

                            @Override
                            public void onStatusChanged(String provider, int status, Bundle extras) {

                            }

                            @Override
                            public void onProviderEnabled(String provider) {

                            }

                            @Override
                            public void onProviderDisabled(String provider) {

                            }
                        });

                mockLocation(12.333, 13.444);

还有这个方法:

public void mockLocation(double lat, double lng) {
        // Create a new Location
        Location newLocation = new Location(PROVIDER_NAME);
        newLocation.setLatitude(lat);
        newLocation.setLongitude(lng);
        newLocation.setAccuracy(3.0f);
        newLocation.setTime(1);
        locationManager.setTestProviderLocation(PROVIDER_NAME, newLocation);
    }

为什么没有调用 onLocationChanged()?

【问题讨论】:

    标签: android


    【解决方案1】:

    这对我有用

    locationManager.addTestProvider(mocLocationProvider, false, false,
                        false, false, true, true, true, 0, 5);
    locationManager.setTestProviderEnabled(mocLocationProvider, true);
    
    
    Location mockLocation = new Location(mocLocationProvider); // a string
    mockLocation.setLatitude(location.getLatitude());  // double 
    mockLocation.setLongitude(location.getLongitude()); 
    mockLocation.setAltitude(location.getAltitude()); 
    mockLocation.setTime(System.currentTimeMillis()); 
    locationManager.setTestProviderLocation( mocLocationProvider, mockLocation); 
    
    
    
    <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION">
    

    另外,在 android 手机设置中,确保您勾选了“允许模拟位置”复选框。

    Source

    【讨论】:

    • 是的,如果你检查我在那边添加的 OP 的实际源链接也有同样的效果
    猜你喜欢
    • 1970-01-01
    • 2017-08-09
    • 1970-01-01
    • 1970-01-01
    • 2019-02-07
    • 2023-03-13
    • 2015-09-28
    • 2014-11-23
    • 2017-08-27
    相关资源
    最近更新 更多