使用DDMS仿真器控件将欺骗位置发送到平板电脑Android设备

时间:2012-07-21 10:19:20

标签: android android-emulator gps ddms

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

问题是当我在设备视图中选择我的外部设备(运行应用程序进程)时,DDMS中的模拟器控制部分被禁用(显示为灰色)。如果我选择了仿真器,则检测到仿真器控件是否已启用但不是物理设备。

我的申请已经

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

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

  • USB调试。
  • 允许模拟位置

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

有什么想法吗?

非常感谢

2 个答案:

答案 0 :(得分:2)

我已经拼凑出了这个问题的解决方案。

  • 转到设置 - &gt;应用程序 - >开发,然后选择“允许模拟位置”。

  • 为AndroidManifest.xml添加 ACCESS_MOCK_LOCATION 权限:

    <?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-&gt;模拟器控制 - >位置控制向模拟位置发送模拟位置,无论设备或清单权限是否正确,建议{{3} }。


来源:

here - 有关使用telnet命令行,链接和代码段的清单权限和替代解决方案的信息。

Android mock location on device? - 更详细,包含一些死链接。

Using Mock Locations in Android - 官方Android文档

答案 1 :(得分:0)

对于简单的spoofing,您可以使用this free version,但正如您在问题中所述,您需要spoofKML个文件中的{{1}}个位置,您必须购买pro version }}