1.软件需求:
某Android设备没有sim卡但其支持定位,客户需求为在已有的Android中添加LBS网络定位,用以辅助gps定位。
2.思路分析
首先看到这个需求笔者是比较懵逼的,秉持着客户是上帝的原则,笔者首先先了解了一下什么事LBS定位,在网上找了很多文章,大部分文章较为冗余,笔者简要列举两篇文章帮助大家了解LBS定位是什么。
关于Android中的位置服务解读_com.android.location.fused-CSDN博客文章浏览阅读3.2k次,点赞3次,收藏5次。关于Android中的位置服务解读一提到位置或者定位,一般的开发者会第一时间百度地图和高德。这么做其实把自己仅仅当成了一个Api caller。还是细细了解一下系统的关于位置的架构比较好。下面开始细细品味。不说第三方定位,系统原生带有位置提供者相关的API有三种:提供者描述NETWORK_PROVIDERGMS或者手机制造商,原生手机不装GMS是为空的。装了GMS会出现“Google 位置信息服务”;GPS_PROVIDER手机GPS硬件,硬件有这个模块一般都支持,注意室_com.android.location.fusedhttps://blog.csdn.net/kangear/article/details/106586846/Android定位--GPS定位与LBS基站定位_android location.getprovider lbs-CSDN博客文章浏览阅读6.7k次。虽然现在第三方的定位非常强大,非常方便,但是我们在只需要很简单的定位,且不想用第三方的时候,我们可以自己动动手,基于GPS卫星定位和LBS基站定位的方式获取当前位置。其实我这里测试LBS定位比GPS定位出来的详细信息更加准确,GPS定位超级费电,可能是我这手机比较low,打开一会儿手机就发热,电池掉的也飞快。_android location.getprovider lbshttps://blog.csdn.net/chengliang0315/article/details/53911390
通过以上两篇文章的内容分析,相信大家对定位模式已经有了一个大体的了解,而我们的LBS定位大家可以简单的理解为设备通过连接的网络实现的定位功能,在国内主要使用的网络定位供应商是百度地图(com.baidu.map.location)和高德地图(com.amap.android.location),笔者选择高德地图提供的(com.amap.android.location)来实现合入LBS辅助定位。
3.实现方法
通俗的来讲说白了就是将高德地图提供的网络定位服务包内置进自己的Android 设备中,从而达到LBS网络辅助定位的功能。
实现思路:
//lbs定位属性相关修改点
1.frameworks/base/core/res/res/values/config.xml
//将需要内置的apk放入指定位置中
2.packages/apps/xxxxxxx/AMapLocation.apk
//在放入apk中的同级目录下添加Android.mk文件
3.packages/apps/xxxxxxx/Android.mk
//定义宏控和开启宏控
4.alps/device/mediatek/system/common/device.mk
//验证方式
5.https://m.amap.com(浏览器搜索点击定位图标) && 命令查看包名
adb shell pm list packages
1.frameworks/base/core/res/res/values/config.xml
//配置文件需要修改四处
//改为false
<bool name="config_enableNetworkLocationOverlay" translatable="false">false</bool>
//修改为自己合入的apk包名
<string name="config_networkLocationProviderPackageName" translatable="false">com.amap.android.location</string>
//修改为自己合入的apk包名
<string name="config_geocoderProviderPackageName" translatable="false">com.amap.android.location</string>
//将使用的包名放入到首位
<string-array name="config_locationProviderPackageNames" translatable="false">
<!-- The standard AOSP fused location provider -->
<item>com.amap.android.location</item>
</string-array>
2.系统需合入的aok需自己寻找添加
3.apk同目录下Android.mk文件
###重点关注带注释的属性值###
宏控名称
ifeq ($(strip $(HX_MAP_LOCATION_APP)), yes)
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
//编译成功模块名称
LOCAL_MODULE := MapLocation
//编译所需apk
LOCAL_SRC_FILES := AMapLocation.apk
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_CLASS := APPS
LOCAL_BUILT_MODULE_STEM := package.apk
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
#PRESIGNED platform
//签名方式
LOCAL_CERTIFICATE := PRESIGNED
#LOCAL_PRIVILEGED_MODULE := true
#LOCAL_OVERRIDES_PACKAGES := Home Launcher2 Launcher3 MtkLauncher3 MtkLauncher3QuickStep Launcher3QuickStep
#LOCAL_MODULE_PATH := $(TARGET_OUT)/operator/app
#LOCAL_MULTILIB :=32
LOCAL_DEX_PREOPT := false
LOCAL_PRIVATE_PLATFORM_APIS := true
LOCAL_PRODUCT_MODULE := true
//该项可有可无,若报错请屏蔽,不报错正常即可
#LOCAL_ENFORCE_USES_LIBRARIES := false
include $(BUILD_PREBUILT)
endif
4.定义宏控
//注意此处的包名对应Android.mk文件的包名
ifeq ($(strip $(HX_MAP_LOCATION_APP)), yes)
PRODUCT_PACKAGES += MapLocation
endif
5.adb shell pm list packages命令查看包名
4.总结
虽然只是一个简单的合入apk的问题,但是对于初学者来说,刚一接手还是比较懵逼的,在此做个笔记仅供大家学习参考。