LocationProvider


相关配置:

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);

GeocoderProxy{

核心是 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





你可能感兴趣的:(android,location,Geocode)