Fragment里使用 PhoneGap 的 CordovaWebView

首先说明一下为什么要使用 CordovaWebView 而不直接使用 WebView 呢?由于 Android4.4 版本之后对 WebView 做了很大的改变,具体参考

这篇文章:理解WebKit和Chromium: Android 4.4 上的Chromium WebView,这样的改变会出现这样的问题,也是我遇到的问题:webview4.4以上版本使用loadurl加载过长js文件失效问题

网上也有相关的解决方法,但是感觉很麻烦,而且解决不了我的问题,最后想了想,我们在使用 PhoneGap 的时候有一个继承 WebView 的 CordovaWebView 组件

已经对于这样的问题做了很好的处理,所以为何不直接用咧,所以就有了这篇文章的: Fragment里使用 PhoneGap 的 CordovaWebView

实现一个类继承 PhoneGap 的接口:CordovaInterface 

<span style="font-size:14px;">import android.app.Activity;
import android.content.ContextWrapper;
import android.content.Intent;

import org.apache.cordova.CordovaInterface;
import org.apache.cordova.CordovaPlugin;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * Created by long on 2016/5/30.
 */
public class CordovaContext extends ContextWrapper implements CordovaInterface {
    Activity activity;
    protected final ExecutorService threadPool = Executors.newCachedThreadPool();

    public CordovaContext(Activity activity) {
        super(activity.getBaseContext());
        this.activity = activity;
    }

    @Override
    public void startActivityForResult(CordovaPlugin cordovaPlugin, Intent intent, int i) {
    }

    @Override
    public void setActivityResultCallback(CordovaPlugin cordovaPlugin) {
    }

    @Override
    public Activity getActivity() {
        return activity;
    }

    @Override
    public Object onMessage(String s, Object o) {
        return null;
    }

    @Override
    public ExecutorService getThreadPool() {
        return threadPool;
    }
}


</span>


<span style="font-size:14px;">import android.app.Fragment;
import android.os.Build;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebView;

import org.apache.cordova.Config;
import org.apache.cordova.CordovaWebView;

public class HomeFragment extends Fragment {
    private View view = null;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

            LayoutInflater localInflater = inflater.cloneInContext(new CordovaContext(this.getActivity()));
            view = localInflater.inflate(R.layout.fragment_cordova, container, false);

            CordovaWebView webView = (CordovaWebView) view.findViewById(R.id.id_cordovaWebView);
            Config.init(getActivity());
            webView.loadUrl("file:///android_asset/www/index_home.html");

        }

        return view;
    }

}


</span>

相关文章分享:

http://www.lai18.com/content/1978961.html

https://github.com/Adobe-Marketing-Cloud-Apps/app-sample-android-phonegap/wiki/Embed-Webview-in-Android-Fragment

关注公众号,分享干货,讨论技术


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用指南:PhoneGapCordovaWebView组件在Android原生项目中使用. 1.下载phonegap2.0, 1.1 从解压文件中“phonegap-phonegap-2dbbdab\lib\android”中可以看到以下文件: cordova-2.0.0.jar、cordova-2.0.0.js和xml文件夹。 1.2 从解压文件中找以“phonegap-phonegap-2dbbdab\lib\android\bin\templates\project\assets”目录,面有个“www”文件夹。 2. 新建一个Android项目 3.把cordova-2.0.0.jar放到Android项目的lib目录中。 把www文件夹COPY到Android 项目的assets目录中。 把cordova-2.0.0.js文件COPY到Android 项目的assets下的www目录中。 把xml文件夹COPY到Android项目的res目录下。 4. 在layout的xml文件中添加cordovaWebView组件。 5. 修改Activity,让其实现CordovaInterface接口,且添加要实现的方法。以下只是简单实现三个方法,使项目可以正常运行。可根据自己的情况重写这些方法。可以参考/framework/src/org/apache/cordova/DroidGap.java。 @Override public Activity getActivity() { return this; } @Override @Deprecated public Context getContext() { return this; } @Override public void startActivityForResult(IPlugin command, Intent intent, int requestCode) { super.startActivityForResult(intent, requestCode); } 6.修改AndroidManifast.xml文件。在<users-sdk>与<application>之间添加以下代码。 <supports-screens android:largeScreens="true" android:normalScreens="true" android:smallScreens="true" android:resizeable="true" android:anyDensity="true" /> <uses-permission android:name="android.permission.VIBRATE" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.RECEIVE_SMS" /> <uses-permission android:name="android.permission.RECORD_AUDIO" /> <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> <uses-permission android:name="android.permission.READ_CONTACTS" /> <uses-permission android:name="android.permission.WRITE_CONTACTS" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.GET_ACCOUNTS" /> <uses-permission android:name="android.permission.BROADCAST_STICKY" />

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值