Android内核解析出值 (JNI层)传递到->内核java层

- 调查3G页面的meta属性:initial-scale
 从内核解析出该值 (JNI层)->内核java层 ,从而设置webview的Scale的大小。
 
1. 内核解析initial-scale
 Settings::setMetadataSettings(const String& key, const String& value)
 //设置m_viewport_initial_scale为指定值。
 
2. Jni层 接口函数:SetViewportSettingsFromNative
     env->SetIntField(obj, gWebViewCoreFields.m_viewportInitialScale, s->viewportInitialScale())
     //设置m_viewport_initial_scale -> gWebViewCoreFields.m_viewportInitialScale 里。
    
   // Field ids for WebViewCore
  struct WebViewCoreFields {
      jfieldID    m_nativeClass;
      jfieldID    m_viewportWidth;
      jfieldID    m_viewportHeight;
      jfieldID    m_viewportInitialScale;
      jfieldID    m_viewportMinimumScale;
      jfieldID    m_viewportMaximumScale;
      jfieldID    m_viewportUserScalable;
      jfieldID    m_viewportDensityDpi;
      jfieldID    m_webView;
  } gWebViewCoreFields;
  
  
3. 通过 SetViewportSettingsFromNative()将解析出来的值m_viewport_initial_scale 传递给内核java层 :
  webviewcore::mViewportInitialScale @ webviewcore.java 
  
 Q1:内核怎么样将解析出来的值m_viewport_initial_scale 与 内核java层 webviewcore::mViewportInitialScale值 对应的呢?
 Answer: 通过webviewcore: register_webviewcore(JNIEnv* env)  它将java层与内核层的两个值对应,也实现了JNI定义函数,并将这个函数注册到Java层,以便于调用。
   如:gWebViewCoreFields.m_viewportInitialScale = env->GetFieldID(widget, "mViewportInitialScale", "I");

   如:jniRegisterNativeMethods(JNIEnv* env, const char* className,
    const JNINativeMethod* gMethods, int numMethods)
{   
4. 在内核java层调用 setViewportSettingsFromNative() @ didFirstLayout() in webviewcore.java
   调用后,值就可以从内核传递到 java层。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值