1

我想测试我在我的 android 平板电脑上开发的 GPS 应用程序,所以我需要从使用 DDMS 加载它的 KML 文件中向它发送欺骗位置。我想使用物理设备,而不是模拟器。

问题是当我在设备视图中选择我的外部设备(正在运行的应用程序进程)时,DDMS 中的 Emulator Control 部分被禁用(灰显)。如果我选择模拟器,那么模拟器控件显示为已启用,但物理设备未启用。

我的应用程序有

<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />

我的物理平板电脑配置有:

  • USB调试。
  • 允许模拟地点

我正在使用 SDK r20,我的平板电脑有 android 4.0.3。

有任何想法吗?

非常感谢

4

2 回答 2

2

我已经拼凑了一个解决这个问题的方法。

  • 转到设置->应用程序->开发并选择“允许模拟位置”。

  • ACCESS_MOCK_LOCATION权限添加到 AndroidManifest.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android">
    
    <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION">
    
  • 实现一个使用LocationManager .addTestProvider() 函数的类。这将向应用程序指示它应该使用文件中的数据来构造新的 Location 对象。

  • 然后可以使用 LocationManager.setTestProviderLocation() 函数创建新位置。

    // start using mock locations
    try {
       mockLocationCreator = new MockLocationCreator(this.getApplicationContext());
       try {
           mockLocationCreator.openLocationList();
    
           mockLocationThread = new Thread(mockLocationCreator);
           mockLocationThread.start();
    
           Toast.makeText(this.getApplicationContext(), 
                          "Mock locations are in use", 
                          Toast.LENGTH_LONG)
                .show();
    
       } catch (IOException e) {
           Toast.makeText(this.getApplicationContext(), 
                          "Error: Unable to open / read data file", 
                          Toast.LENGTH_LONG)
                .show();
           mockLocationCreator = null;
       }
    } catch(SecurityException e) {
       Toast.makeText(this.getApplicationContext(), 
                      "Error: Insufficient Privileges", 
                       Toast.LENGTH_LONG)
            .show();
       Log.e(TAG, "unable to use mock locations, insufficient privileges", e);
    }
    

注意:无论设备或清单权限如何,都无法从 DDMS->Emulator Control->Location Controls 将模拟位置发送到真实设备,正如此处错误建议的那样。


资料来源:

设备上的Android模拟位置?- 有关清单权限和使用 telnet 命令行、链接和代码片段的替代解决方案的信息。

在 Android 中使用模拟位置- 更详细,包含一些死链接。

LocationManager 文档- Android 官方文档

于 2012-07-21T11:37:28.527 回答
0

为简单起见spoofing,您可以使用此免费版本,但正如您在问题中所说,您需要文件中的spoof位置KML,您必须购买专业版

于 2012-07-21T10:34:19.190 回答