相关配置:
framework/base/core/res/res/values/config.xml
true
@null
true
com.android.location.fused
true
@null
- com.android.location.fused
实际生效的是 厂商定制
device/sample/overlays/location/frameworks/base/core/res/res/values
true
true
true
true
- com.google.android.gms
- com.android.location.fused
创建:
framework:
LocationManagerService
此处待补充其他类型
GeocodeProvider:
mGeocodeProvider = GeocoderProxy.createAndBind(mContext,
com.android.internal.R.bool.config_enableGeocoderOverlay,
com.android.internal.R.string.config_geocoderProviderPackageName,
com.android.internal.R.array.config_locationProviderPackageNames,
mLocationHandler);
核心是 mServiceWatcher
ServiceWatcher() 中初始化mSignatureSets
ServiceWatcher.bindBestPackageLocked() 中选择mSignatureSets包存的包,然后选择版本最大的包。(不理解,版本号大的就好吗?) 然后 bindToPackageLocked
提供两个接口:
getFromLocation 位置转名字
getFromLocationName 名字转位置
}
--------------------------------------------------------------------------
cts测试:
android.webkit.cts.GeolocationTest {
RAW_HTML 网页实现
setUp():
1. mOnUiThread 初始化,JavaScript 和 Geolocation(enable 和 databasepath)
2. test providers 准备(mock location)addTestProviders()
testSimpleGeolocationRequestAcceptOnce():{
初始化 TestSimpleGeolocationRequestWebChromeClient chromeClientAcceptOnce {
onGeolocationPermissionsShowPrompt()关键函数配置网页权限 mReceivedRequest在这里刷新
}
loadUrlAndUpdateLocation(URL_1){
新起线程加载url
新起线程更新模拟地址 250ms更新一次
}
检查两个值
chromeClientAcceptOnce.mReceivedRequest :Geolocation prompt
mJavascriptStatusReceiver.mHasPosition:{
JavascriptStatusReceiver{
gotLocation() : RAW_HTML 中去调用该接口“navigator.geolocation.getCurrentPosition”
}
}
}
testSimpleGeolocationRequestAcceptAlways()
}
----------------------------------------------------
webkit
navigator.geolocation.getCurrentPosition 实现:
以下不确定:
接口实现
external\chromium_org\third_party\WebKit\Source\modules\geolocation.cpp:void Geolocation::getCurrentPosition
调用
external\chromium_org\third_party\WebKit\Source\bindings\v8\custom\V8GeolocationCustom.cpp
测试
external\chromium_org\chrome\test\webdriver\test\chromedriver_tests.py