安卓10源码开发定制(21)GPS定位研究(3)修改GPS定位数据测试gps定位代码

文章首发微信公众号:QDROID88888,如果感兴趣可以关注一下公众号。

一、测试gps定位功能的方法探讨

在安卓App gps定位开发过程中,往往需要进行GPS定位的测试。由于室内gps信号被挡住了,所以如果需要测试gps定位的代码,要么跑到室外去等待gps定位更新或者使用安卓sdk中提供的"MOCK_LOCATION"功能编写额外的测试代码来模拟gps位置更新。如果从系统定制的角度出发,也可以根据gps上报的流程来模拟gps上报的逻辑实现模拟gps 的定位数据。

二、修改系统实现模拟gps数据上报

2.1 安卓系统上报gps数据流程总结

在之前的文章安卓10源码开发定制(21)GPS定位研究(2)gps位置改变监听源码分析中已经分析安卓系统中gps数据上报的大概流程:

1. 当gps位置改变更新,com_android_server_location_GnssLocationProvider.cpp中通过反射调用GnssLocationProvider.java中的reportLocation方法将gps数据上报到安卓系统java层。

2. GnssLocationProvider.java中使用LocationProvider.java提供的onReportLocation方法将gps数据上报到GPS 位置管理器。

3. GPS位置管理器LocationProvider.java调用LocationManagerService.java提供的方法handleLocationChangedLocked将gps数据传到LocationManagerService.java中。

4. LocationManagerService.java中通过GPS_PROVIDER关键字获取缓存的注册监听器Receiver列表,然后遍历每一个监听器并调用监听的callLocationChangedLocked方法来通知客户端位置更新。

2.2 修改GPS数据的方案构想

参考以上gps上报的流程,可以在LocationManagerService中使用定时器。定时获取设置的gps坐标,然后通过名称GPS_PROVIDER获取缓存的GPS位置提供管理器对象,然后调用onReportLocation方法达到模拟上报的目的。

2.3 实现参考代码

基于以上构想,通过修改系统测试高德地图验证成功。以下是验证的核心参考代码:

 ///ADD START
     //LocationManagerService中添加模拟上报位置的接口
    //主动上报GPS位置信息
    private void  reportLocation()
    {
     

        Timer time=new Timer();
        TimerTask timerTask=new TimerTask() {
     
            @Override
            public void run() {
     
                Location location=new Location(LocationManager.GPS_PROVIDER);
                location.setLongitude(117.27127064678953);
                location.setLatitude(39.138059417665445);
				
                location.setElapsedRealtimeNanos(System.nanoTime());
				location.makeComplete();
				LocationProvider mylocProvider=getLocationProviderLocked(LocationManager.GPS_PROVIDER);
				if(mylocProvider!=null)
				{
     
				    mylocProvider.onReportLocation(location);
					XLog.d("LocationManagerService","onReportLocation success");
				}else{
     
                    XLog.d("LocationManagerService","mylocProvider is NULL");
				}
				
            }
        };
        time.schedule(timerTask,10*1000,5*1000);
    }
    ///ADD END

本文的目的只有一个就是学习更多的安卓系统方面的知识,如果有人利用本文技术去进行非法商业获取利益带来的法律责任都是操作者自己承担,和本文以及作者没关系

安卓系统、安卓ndk开发、安卓应用安全和逆向分析相关等IT知识分享,系统定制、frida、xposed(sandhook、edxposed)、加固刷机交流等等。微信搜索公众号"QDOIRD88888"或者扫描以下二维码关注公众号。第一时间接收文章更新。

安卓10源码开发定制(21)GPS定位研究(3)修改GPS定位数据测试gps定位代码_第1张图片

你可能感兴趣的:(安卓10系统源码开发定制,定位,java,android,android,studio)