我想在我的Android平板电脑上测试我正在开发的GPS应用程序,所以我需要从使用DDMS加载它的KML文件向它发送欺骗位置。我想使用物理设备,而不是模拟器。
问题是当我在设备视图中选择我的外部设备(运行应用程序进程)时,DDMS中的模拟器控制部分被禁用(显示为灰色)。如果我选择了仿真器,则检测到仿真器控件是否已启用但不是物理设备。
我的申请已经
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />
我的物理平板电脑配置为:
我正在使用SDK r20,我的平板电脑有android 4.0.3。
有什么想法吗?
非常感谢
答案 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,但正如您在问题中所述,您需要spoof
个KML
个文件中的{{1}}个位置,您必须购买pro version }}