Android sendExtraCommand和force_xtra_注入的问题

Android sendExtraCommand和force_xtra_注入的问题,android,locationmanager,Android,Locationmanager,我正在开发一个应用程序,如果设备是根设备,它实际上可以正常工作,但现在我正在为非根设备做一些事情。此时,我需要使用以下命令(或类似命令)下载xtra.bin并在设备中解包> public static void downloadGPSXtra(Context context) { LocationManager locationmanager = (LocationManager)context.getSystemService("location");

我正在开发一个应用程序,如果设备是根设备,它实际上可以正常工作,但现在我正在为非根设备做一些事情。此时,我需要使用以下命令(或类似命令)下载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);

}
然后我使用以下命令“执行”它>

好的,我不知道为什么(很明显),但它不起作用。在中,仅从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

我知道“强制注入”不起作用,因为我在
/data/gps/lto.dat

上没有看到任何变化,我想,你的代码起作用了。(假设您已将所需权限添加到清单中)。您不应期望应用程序的数据目录发生任何更改。下载的XTRA数据直接注入GPS子系统,根本不存储在文件系统中。根据我的经验,检查注入是否成功的唯一方法是重置GPS状态,然后调用注入方法,看看GPS获取锁的速度有多快。

我是GPS状态的作者,除了您当前正在做的事情,我真的不做任何其他事情。(即调用sendExtraCommand方法。事实上,我的程序中也有3行代码:),我猜这些文件是特定于实现/手机的。我的手机上甚至没有/data/gps目录。(Nexus One)

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


无论注入是否成功,都无法检查,只能查看logcat(如果有任何内容显示)。

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


编辑:我刚刚看到,第34页描述了如何更改GPS驱动程序堆栈的调试级别,以获取NTP和AGPS iConnect操作的状态消息。但是,这需要一个根设备,并且可能不适用于所有驱动程序实现。

@Reno感谢您更正我的英语:)好的!我将尝试在命令被注入时让GPS硬件工作,也许这就是诀窍。谢谢你,先生!
    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