我从使用的代码 我已经改变了一点。 以下是我的代码段。 问题是Google Map没有显示我嘲笑的正确位置。

public class MockGpsProviderActivity extends Activity implements LocationListener {
public static final String LOG_TAG = "MockGpsProviderActivity";
private static final String MOCK_GPS_PROVIDER_INDEX = "GpsMockProviderIndex";

private MockGpsProvider mMockGpsProviderTask = null;
private Integer mMockGpsProviderIndex = 0;

/** Called when the activity is first created. */
/*
 * (non-Javadoc)
 * 
 * @see android.app.Activity#onCreate(android.os.Bundle)
 */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    /** Use saved instance state if necessary. */
    if (savedInstanceState instanceof Bundle) {
        /** Let's find out where we were. */
        mMockGpsProviderIndex = savedInstanceState.getInt(MOCK_GPS_PROVIDER_INDEX, 0);
    }

    /** Setup GPS. */
    LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

    // if(locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)){
    // // use real GPS provider if enabled on the device
    // locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
    // }
    // else if(!locationManager.isProviderEnabled(MockGpsProvider.GPS_MOCK_PROVIDER)) {
    // otherwise enable the mock GPS provider
    locationManager.addTestProvider(MockGpsProvider.GPS_MOCK_PROVIDER, false, false, false, false, true, true, true, Criteria.POWER_LOW,
            Criteria.ACCURACY_FINE);
    locationManager.setTestProviderEnabled(MockGpsProvider.GPS_MOCK_PROVIDER, true);
    locationManager.setTestProviderStatus(LocationManager.GPS_PROVIDER, LocationProvider.AVAILABLE, null, System.currentTimeMillis());

    // }

    if (locationManager.isProviderEnabled(MockGpsProvider.GPS_MOCK_PROVIDER)) {
        locationManager.requestLocationUpdates(MockGpsProvider.GPS_MOCK_PROVIDER, 0, 0, this);

        /** Load mock GPS data from file and create mock GPS provider. */
        try {
            // create a list of Strings that can dynamically grow
            List<String> data = new ArrayList<String>();

            /**
             * read a CSV file containing WGS84 coordinates from the 'assets' folder (The website http://www.gpsies.com offers downloadable
             * tracks. Select a track and download it as a CSV file. Then add it to your assets folder.)
             */
            InputStream is = getAssets().open("mock_gps_data.csv");
            BufferedReader reader = new BufferedReader(new InputStreamReader(is));

            // add each line in the file to the list
            String line = null;
            while ((line = reader.readLine()) != null) {
                data.add(line);
            }

            // convert to a simple array so we can pass it to the AsyncTask
            String[] coordinates = new String[data.size()];
            data.toArray(coordinates);

            // create new AsyncTask and pass the list of GPS coordinates
            mMockGpsProviderTask = new MockGpsProvider();
            mMockGpsProviderTask.execute(coordinates);
        } catch (Exception e) {
        }
    }
}

@Override
public void onDestroy() {
    super.onDestroy();

    // stop the mock GPS provider by calling the 'cancel(true)' method
    try {
        mMockGpsProviderTask.cancel(true);
        mMockGpsProviderTask = null;
    } catch (Exception e) {
    }

    // remove it from the location manager
    try {
        LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        locationManager.removeTestProvider(MockGpsProvider.GPS_MOCK_PROVIDER);
    } catch (Exception e) {
    }
}

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
    // store where we are before closing the app, so we can skip to the location right away when restarting
    savedInstanceState.putInt(MOCK_GPS_PROVIDER_INDEX, mMockGpsProviderIndex);
    super.onSaveInstanceState(savedInstanceState);
}

@Override
public void onLocationChanged(Location location) {
    // show the received location in the view
    TextView view = (TextView) findViewById(R.id.text);
    view.setText("index:" + mMockGpsProviderIndex + "\nlongitude:" + location.getLongitude() + "\nlatitude:" + location.getLatitude()
            + "\naltitude:" + location.getAltitude());
}

@Override
public void onProviderDisabled(String provider) {
    // TODO Auto-generated method stub
}

@Override
public void onProviderEnabled(String provider) {
    // TODO Auto-generated method stub
}

@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
    // TODO Auto-generated method stub
}

/** Define a mock GPS provider as an asynchronous task of this Activity. */
private class MockGpsProvider extends AsyncTask<String, Integer, Void> {
    public static final String LOG_TAG = "GpsMockProvider";
    public static final String GPS_MOCK_PROVIDER = LocationManager.GPS_PROVIDER;

    /** Keeps track of the currently processed coordinate. */
    public Integer index = 0;

    @Override
    protected Void doInBackground(String... data) {
        // process data
        for (String str : data) {
            // skip data if needed (see the Activity's savedInstanceState functionality)
            if (index < mMockGpsProviderIndex) {
                index++;
                continue;
            }

            // let UI Thread know which coordinate we are processing
            publishProgress(index);

            // retrieve data from the current line of text
            Double latitude = null;
            Double longitude = null;
            Double altitude = null;
            try {
                String[] parts = str.split(",");
                latitude = Double.valueOf(parts[0]);
                longitude = Double.valueOf(parts[1]);
                altitude = Double.valueOf(parts[2]);
            } catch (NullPointerException e) {
                break;
            } // no data available
            catch (Exception e) {
                continue;
            } // empty or invalid line

            // translate to actual GPS location
            Location location = new Location(GPS_MOCK_PROVIDER);
            location.setLatitude(latitude);
            location.setLongitude(longitude);
            location.setAltitude(altitude);
            location.setAccuracy(1);
            location.setTime(System.currentTimeMillis());
            location.setBearing(0F);
            location.setSpeed(0.0F);   

            // show debug message in log
            Log.d(LOG_TAG, location.toString());

            // provide the new location
            LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
            locationManager.setTestProviderLocation(GPS_MOCK_PROVIDER, location);

            // sleep for a while before providing next location
            try {
                Thread.sleep(200);

                // gracefully handle Thread interruption (important!)
                if (Thread.currentThread().isInterrupted())
                    throw new InterruptedException("");
            } catch (InterruptedException e) {
                break;
            }

            // keep track of processed locations
            index++;
        }

        return null;
    }

    @Override
    protected void onProgressUpdate(Integer... values) {
        Log.d(LOG_TAG, "onProgressUpdate():" + values[0]);
        mMockGpsProviderIndex = values[0];
    }
}
}

#1楼 票数:1

尝试添加:

location.setAccuracy(16F);
location.setAltitude(0D);
location.setBearing(0F);

#2楼 票数:0

我认为您也可以在您的权限(Manifest.xml)中调用模拟位置,以便工作。 您有权限吗?

因为当我用它这个 ,它的工作。

(对不起,我没有留下评论,因为我没有足够的声誉)

#3楼 票数:0

您是否在物理设备的设置中打开了Allow_Mock_Location? 在开发人员选项下。

#4楼 票数:0

还为您的模拟位置添加location.setSpeed(5); 速度超过1,例如5或10

  ask by Sanket translate from so

未解决问题?本站智能推荐:

1回复

在导航应用中使用模拟位置

我正在尝试开发一个应用程序来模拟通过Google导航应用程序的路线。 我找到了一些很好的例子,说明如何在这个网站的其他帖子中实现模拟位置提供程序( 设备上的Android模拟位置? )。 通过对源代码http://www.cowlumbus.nl/forum/MockGpsProvider
1回复

模拟位置在Android Pie及更高版本上不起作用

我编写了一个使用模拟位置提供程序的单元测试。 收到位置更新后,测试将通过;如果超时,则测试将失败。 该测试通过了在模拟的Pixel 3,Android M到Android O上的良好运行。它在Android P和Q上均超时。我还在具有Q的物理Pixel 3上进行了测试,但仍然失败。
1回复

检测模拟位置不起作用(Android)

我正在尝试对使用模拟位置来操纵我的应用的用户设置某种保护措施。 我意识到不可能100%避免...我只是想尽我所能。 该应用程序在其主要活动中使用Google定位服务(游戏服务的一部分)。 onLocationChanged()方法为: 位置服务可以完美运行,并且通常与该应用
3回复

在Google地图上查找位置

我想在Google地图上找到我的位置。 我的代码在这里。 我已经在电话中运行了我的应用程序,但不幸的是它停止了。 有什么问题的想法吗? 谢谢。
2回复

在Google地图上查找我的位置

我正在尝试让应用程序使用geapoint在google地图上显示我的位置,但是在手机上打开应用程序时,它始终会在同一位置打开,这是我在代码中添加的值,作为在上进行测试的初始值编译器。 我如何使其显示我的位置(使其根据我的位置更改纬度和经度)? 这是代码: 公共类AndroidGoo
21回复

如何在设备上模拟位置?

如何在物理设备 (Nexus One) 上模拟我的位置? 我知道您可以使用仿真器控制面板中的仿真器执行此操作,但这不适用于物理设备。
1回复

如何在Google地图上绘制多个位置(经度和纬度)?

我有一个需要在Google地图上标出两个位置的应用程序吗? 其中一个位置是我的当前位置,第二个位置是我获得的朋友的位置。现在我的问题是我可以在地图上绘制朋友的位置,但无法在同一张地图上绘制我的位置。我如何在同一张地图上绘制我的位置和我朋友的位置?
1回复

无法自动在Google地图上显示当前位置?

我试图在andorid上的谷歌地图上显示当前位置。我已经写了一些鳕鱼来做那件事。但是当我在地图活动上启动应用程序时,它没有在谷歌地图上显示当前位置。但是当我点击当前位置按钮时谷歌地图然后它显示当前位置。请问为什么它不会自动显示当前位置?