sendExtraCommand和force_xtra_injection的问题

时间:2011-02-10 19:11:24

标签: android locationmanager

我正在开发一个应用程序,如果该设备已植根,它实际上可以正常工作,但现在我正在为非root设备做一些事情。此时我需要使用以下(或类似的东西)才能下载xtra.bin并在设备中解压缩>

    public static void downloadGPSXtra(Context context)
{

        LocationManager locationmanager = (LocationManager)context.getSystemService("location");
        Bundle bundle = new Bundle();
        locationmanager.sendExtraCommand("gps", "force_xtra_injection", bundle);
        locationmanager.sendExtraCommand("gps", "force_time_injection", bundle);

}

然后我使用以下内容“执行”它>

        lto_downloader.downloadGPSXtra(lto_downloader.this);

好吧,我不知道为什么(显然),但它没有用。只得到logcat关于时间注入的回复>

    D/GpsLocationProvider( 3131): NTP server returned: 1297364952086 (Thu Feb 10 19:
09:12 GMT+00:00 2011) reference: 9750010 certainty: 337 system time offset: -483
80

我知道“force_xtra_injection”由于/data/gps/lto.dat

没有看到任何变化而无法正常工作

4 个答案:

答案 0 :(得分:3)

我是GPS状态的作者,我真的不做你现在正在做的事情。 (即调用sendExtraCommand方法。事实上,我的程序中还有3行代码:),我猜这些文件是特定于实现/手机的。我的手机上根本没有/ data / gps目录。 (Nexus One)

答案 1 :(得分:1)

我想,你的代码正在运行。 (假设您已向清单添加了所需的权限)。您不应该期望应用程序的数据目录中有任何更改。下载的XTRA数据直接注入GPS子系统,根本不存储在文件系统中。我的经验是检查注射是否成功的唯一方法是重置GPS状态,然后调用注射方法并查看GPS获得锁定的速度。

答案 2 :(得分:0)

LocationManager将仅返回false,并且仅在命令未知时才返回false。如果LocationManager知道该命令,它会对此命令进行排队,然后返回true,这就是它所做的一切。

注射是否成功,没有办法检查但是看logcat(如果有什么东西会出现在那里)。

答案 3 :(得分:0)

据我所知,无法确定XTRA数据下载是否成功。我在Nexus S上测试了这个.logcat不会显示任何内容,RIL日志只会显示已经发出请求 - 但是如果成功则没有。不幸的是,Android并没有给我们任何选择,只能盲目地force_xtra_injection LocationManager,并希望它会成功。

编辑:我刚遇到this paper,其中第34页介绍了如何更改GPS驱动程序堆栈的调试级别以获取NTP和AGPS ijection操作的状态消息。但是,这需要有根设备,并且可能无法与每个驱动程序实现一起使用。