精华内容
下载资源
问答
  • 集成webview+gps+相机调用的安卓app源码,很有实际应用框架。
  • 安卓调用webview实现浏览器的完整例子源码,这是一个很完整的一个webview例子,可以直接调用使用,页面精美,有加载状态,判断了网络连接状态
  • 安卓WebView设置本地缓存和使用。

    千次阅读 2018-05-25 16:46:01
    直接上源码吧,都有注解。private void initWebView() { //获取WebSetting对象 final WebSettings settings = webView.getSettings(); settings.setJavaScriptEnabled(true);//支持js脚本 settings....

    直接上源码吧,都有注解。

    private void initWebView() { 
        //获取WebSetting对象
        final WebSettings settings = webView.getSettings();
        settings.setJavaScriptEnabled(true);//支持js脚本
        settings.setRenderPriority(WebSettings.RenderPriority.HIGH);//设置渲染优先级
        //隐藏缩放控件
        settings.setBuiltInZoomControls(false);
        settings.setDisplayZoomControls(false);
        //禁止缩放
        settings.setSupportZoom(false);
        //文件权限
        settings.setAllowFileAccess(true);
        settings.setAllowFileAccessFromFileURLs(true);
        settings.setAllowUniversalAccessFromFileURLs(true);
        settings.setAllowContentAccess(true);
        //缓存相关
        if(InternetUtil.checkInternet(context)){
            //有网络,则加载网络地址
            settings.setCacheMode(WebSettings.LOAD_DEFAULT);//设置缓存模式LOAD_CACHE_ELSE_NETWORK
        }else{
            //无网络,则加载缓存路径
            settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
        }
        settings.setDomStorageEnabled(true);//开启DOM storage API功能
        settings.setDatabaseEnabled(true);//开启database storeage API功能
        String cacheDirPath = context.getFilesDir().getAbsolutePath()+ "/webcache";//缓存路径
        settings.setDatabasePath(cacheDirPath);//设置数据库缓存路径
        settings.setAppCachePath(cacheDirPath);//设置AppCaches缓存路径
        settings.setAppCacheEnabled(true);//开启AppCaches功能
    }

    清除缓存:

    /** 
     * 清除WebView缓存 
     */  
    public void clearWebViewCache(){  
    	//清理Webview缓存数据库  
    	try {  
    		deleteDatabase("webview.db");   
    		deleteDatabase("webviewCache.db");  
    	} catch (Exception e) {  
    		e.printStackTrace();  
    	}  
    	  
    	//WebView 缓存文件  
    	File appCacheDir = new File(getFilesDir().getAbsolutePath()+"/webcache");  
    	Log.e(TAG, "appCacheDir path="+appCacheDir.getAbsolutePath());  
    	  
    	File webviewCacheDir = new File(getCacheDir().getAbsolutePath()+"/webviewCache");  
    	Log.e(TAG, "webviewCacheDir path="+webviewCacheDir.getAbsolutePath());  
    	  
    	//删除webview 缓存目录  
    	if(webviewCacheDir.exists()){  
    		deleteFile(webviewCacheDir);  
    	}  
    	//删除webview 缓存 缓存目录  
    	if(appCacheDir.exists()){  
    		deleteFile(appCacheDir);  
    	}  
    }



    展开全文
  • 我们做安卓开发时,webview中发现html5 视频的autoplay根本没实现,查看了下android 源码HTMLVideoElement.cpp也未见相应处理,网上有资料显示,这可能关乎UI线程与后台线程的协调性,我看,以后的升级版本总会解决...
    a8be8a3d62dd9040dd1193fad2fb67c1.png

    我们做安卓开发时,webview中发现html5 视频的autoplay根本没实现,查看了下android 源码HTMLVideoElement.cpp也未见相应处理,网上有资料显示,这可能关乎UI线程与后台线程的协调性,我看,以后的升级版本总会解决这个问题的。

    html5标签属性不支持,那只有通过javascript来处理了

    演示apk下载地址:http://download.csdn.net/detail/qiushi_1990/9513038

    github源码下载:https://github.com/qiushi123/H5Demo

    下面是实现步骤和原理

    一,我们在设置的WebViewClient中覆盖方法:

    不要忘记了webview.getSettings().settings.setJavaScriptEnabled(true)启用javascript,AndroidManifest加入INTERNET权限

    @Override

    public void onPageFinished( WebView view, String url) {

    view.loadUrl("javascript:try{autoplay();}catch(e){}");

    }

    实例代码

     public class Html5VideoAutoPlay extends Activity {WebView webview = null;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.html5video);webview = (WebView)findViewById(R.id.webview);webview.getSettings().setJavaScriptEnabled(true);webview.setWebViewClient(new WebViewClient(){/** * 当前网页的链接仍在webView中跳转 */@Overridepublic boolean shouldOverrideUrlLoading(WebView view, String url) {view.loadUrl(url);return true;}/** * 处理ssl请求 */@Overridepublic void onReceivedSslError(WebView view,SslErrorHandler handler, SslError error) {handler.proceed();}/** * 页面载入完成回调 */@Overridepublic void onPageFinished(WebView view, String url) {super.onPageFinished(view, url);view.loadUrl("javascript:try{autoplay();}catch(e){}");}});webview.setWebChromeClient(new WebChromeClient() {/** * 显示自定义视图,无此方法视频不能播放 */@Overridepublic void onShowCustomView(View view, CustomViewCallback callback) {super.onShowCustomView(view, callback);}});webview.loadUrl("file:///sdcard/html/video.html");}@Overrideprotected void onPause() {if(null != webview) {webview.onPause();}super.onPause();} }

    二,布局文件

    html5video.xml

    <?xml version="1.0" encoding="utf-8"?>

    三,html文件(这里用的是html5的video标签来设置自动播放和循环播放)

    video.html

    上面的src可以引入本地视频b.mp4,

    也可以引入网上视频:http://2449.vod.myqcloud.com/2449_43b6f696980311e59ed467f22794e792.f20.mp4

    个人觉得html5结合Android会让未来各种技术实现越来越简单。到我的个人博客查看更多h5与安卓的结合案例。

    也可以关注我github里的其他开源项目。

    github:https://github.com/qiushi123?tab=repositories

    实例图片

    5f46bb5ee8862a28f33d21790d17a409.png

    效果图

    有任何关于编程的问题都可以私信我,我看到后会及时解答。

    编程小石头,为分享干货而生!据说,每个年轻上进,颜值又高的互联网人都关注了编程小石头。​

    展开全文
  • 本文主要对从安卓系统源码中抽取出WebView相关源码进行单独编译的流程进行说明。

    本文主要对从安卓系统源码中抽取出WebView相关源码进行单独编译的流程进行说明。

    编译流程说明

    由于WebView包含两个部分,一部分是上层的Java代码,包括若干Java类,用于对外提供接口;另一部分是下层的C++代码,包括两个so库(libwebcore.so和libchromium_net.so),用于网页的解析和渲染。两个部分之间通过JNI进行交互。

    因此,编译WebView也需要分成两部分,一部分是编译Java代码,另一部分是将C++代码编译成so库。另外,由于WebView的Java代码中会使用到很多系统的隐藏API,所以我们还需要编译安卓系统,并从中获取几个jar包。

    编译Java代码

    首先,我们需要下载并编译任意一个版本的安卓系统源码,具体步骤可以参见《下载安卓系统源码教程》和《安卓系统源码编译教程》。

    完成编译后,我们可以使用Eclipse(不能使用Intellij IDEA,因为之后添加library的时候无法设置为system library)新建一个Android工程,在src目录下创建一个android.webkit2的包。然后将源码目录下的frameworks/base/core/java/android/webkit目录下的所有文件拷贝到新创建的包中。

    由于其中有一个类是编译之后生成的,所以我们还需要从编译完的源码目录out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/src/core/java/android/webkit中将EventLogTags.java类也拷贝到新建的包中。

    接下来,我们需要在工程中加入包含系统隐藏API的jar包,将以下三个jar包重命名(名称随意)后拷贝到工程的libs目录下:

    out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes.jar
    out/target/common/obj/JAVA_LIBRARIES/core_intermediates/classes.jar
    out/target/common/obj/JAVA_LIBRARIES/bouncycastle_intermediates/classes.jar

    在Eclipse中打开工程的Properties->Java Build Path->Libraries->Add Library->User Library,点击下一步,选择User Libraries...,选择New,随便输入一个名字,将System library选上(重要),选择OK。选中刚刚新建的User Library,选择Add JARs,在工程目录中选择新加入的三个jar包,选择OK。

    添加完Library之后,切换到Order and Export选项卡,将刚刚新建的User library调整到最前面,确保隐藏API不会被系统API覆盖(由于包名相同),选择OK。另外,还要把Android Private Libraries库前的勾取消掉,否则之后运行会报错。

    最后,由于我们的java文件都放到了android.webkit2包下,避免与系统的包重名,我们需要将所有java文件中的android.webkit都替换成android.webkit2。使用菜单中的Search命令批量替换即可。完成替换后,刷新一下工程,会发现所有的错误都没了。(有可能还会提示minSdkVersion版本太低,直接按要求修改AndroidManifest.xml文件即可)

    编译so库

    此时我们的Eclipse工程已经可以编译运行了,但是启动的时候会闪退,因为我们还没有加入so库。下面我们就来编译so库。再回到虚拟机中,进入到安卓源码的external/chromium目录下,在终端执行以下命令:

    $ sudo sed -i "s#android/webkit#android/webkit2#g" `grep android/webkit -rl *`

    可以将源码中的android/webkit都替换成android/webkit2,确保与我们的java代码包名相同。

    再打开external/chromium目录下的Android.mk文件,将其中的libchromium_net都替换成libchromium_net2,同时增加一行LOCAL_MODULE_TAGS := optional,修改部分如下:

    LOCAL_MODULE := libchromium_net2
    LOCAL_MODULE_CLASS := SHARED_LIBRARIES
    LOCAL_MODULE_TAGS := optional
    INTERMEDIATES := $(call local-intermediates-dir)

    再回到安卓源码根目录,运行以下命令:

    $ source build/envsetup.sh
    $ mmm external/chromium

    编译成功后可以在out/target/product/generic/obj/lib目录下找到libchromium_net2.so文件。

    接下来进入到安卓源码的external/webkit/Source/WebKit/android目录下,在终端执行以下命令:

    $ sudo sed -i "s#android/webkit#android/webkit2#g" `grep android/webkit -rl *`

    同样可以将源码中的android/webkit都替换成android/webkit2,确保与我们的java代码包名相同。

    再打开external/webkit目录下的Android.mk文件,将其中的libwebcore都替换成libwebcore2(三个地方),并且增加一行LOCAL_MODULE_TAGS := optional,另外还要将LOCAL_SHARED_LIBRARIES里面的libchromium_net改成libchromium_net2。修改部分如下:

    # Define our module and find the intermediates directory
    LOCAL_MODULE := libwebcore2
    LOCAL_MODULE_CLASS := STATIC_LIBRARIES
    LOCAL_MODULE_TAGS := optional
    base_intermediates := $(call local-intermediates-dir)
    ...
    LOCAL_SHARED_LIBRARIES := \
    libEGL \
    libGLESv2 \
    libandroid \
    libandroidfw \
    libandroid_runtime \
    libchromium_net2 \
    libcrypto \
    ...
    LOCAL_PRELINK_MODULE := false
    LOCAL_MODULE := libwebcore2
    LOCAL_MODULE_TAGS := optional
    LOCAL_LDLIBS := $(WEBKIT_LDLIBS)
    LOCAL_SHARED_LIBRARIES := $(WEBKIT_SHARED_LIBRARIES)
    LOCAL_STATIC_LIBRARIES := libwebcore2 $(WEBKIT_STATIC_LIBRARIES)
    LOCAL_LDFLAGS := -fvisibility=hidden
    

    同样再回到安卓源码根目录,运行以下命令:

    $ source build/envsetup.sh
    $ mmm external/webkit

    编译成功后可以在out/target/product/generic/obj/lib目录下找到libwebcore2.so文件。

    完成编译并运行测试代码

    下面我们将以上编译生成的两个so文件(libchromium_net2.so和libwebcore2.so)放到我们工程的libs/armeabi目录下。再修改工程android.webkit2包下的JniUtil.java和WebViewCore.java文件,将其中的

    static {
        System.loadLibrary("webcore");
        System.loadLibrary("chromium_net");
    }

    改为(注意,顺序也颠倒了)

    static {
        System.loadLibrary("chromium_net2");
        System.loadLibrary("webcore2");
    }

    到此为止,与WebView相关的操作都完成了,我们可以开始加入测试代码。在测试的Activity.java的onCreate方法中加入:

    WebView webView = (WebView)findViewById(R.id.webview);
    webView.getSettings().setJavaScriptEnabled(true);
    webView.loadUrl("http://www.baidu.com");
    

    对应的xml layout中加入:

    <android.webkit2.WebView 
        android:id="@+id/webview" 
        android:layout_width="fill_parent"     
        android:layout_height="fill_parent" />

    最后在AndroidManifest.xml中加入:

    <uses-permission android:name="android.permission.INTERNET"/>

    现在我们就可以在模拟器上运行工程了,运行效果如下: 


    注意:

    1. 如果出现黑屏,可以尝试将最后加入的INTERNET权限去掉后重试。
    2. 只能在编译时对应版本的模拟器上运行,如果提示函数找不到,可以切换相应模拟器的版本后重试。

    真机运行

    在模拟器上运行成功之后可以在真机上运行,效果如下: 


    但是一旦用手指滑动WebView,应用就会闪退,原因是缺少一些资源,下面我们来将它们加上:

    首先我们需要将安卓源码目录下的frameworks/base/core/res/res/values/styles.xml中的

    <style name="ZoomControls">
        <item name="android:gravity">bottom</item>
        <item name="android:paddingLeft">15dip</item>
        <item name="android:paddingRight">15dip</item>
    </style>

    粘贴到我们工程目录下的res/values/styles.xml中。

    然后再将frameworks/base/core/res/res/layout/zoom_magnify.xml文件复制到我们工程目录下的res/layout中。

    接着将frameworks/base/core/res/res/drawable/btn_zoom_page.xml文件复制到我们工程目录下的res/drawable中。

    最后将frameworks/base/core/res/res下的drawable-ldpidrawable-mdpidrawable-hdpidrawable-xhdpi目录下的btn_zoom_page_normal.pngbtn_zoom_page_press.png文件复制到我们工程目录res下的相应文件夹中。

    再次运行,即可任意滑动WebView了。


    但是,这个版本在其他版本的安卓系统上可能会闪退,解决办法见我的下一篇博客:

    安卓系统源码编译系列(七)——单独编译WebView兼容性问题解决

    参考资料

    Android 4.1 - 将系统浏览器编译成独立应用

    搭建自定义android Browser环境


    如果大家觉得对自己有帮助的话,还希望能帮顶一下,谢谢:)
    转载请注明出处,谢谢!

    展开全文
  • 我们做安卓开发时,webview中发现html5 视频的autoplay根本没实现,查看了下android 源码HTMLVideoElement.cpp也未见相应处理,网上有资料显示,这可能关乎UI线程与后台线程的协调性,我看,以后的升级版本总会解决...
    b8392750c7e917fe7d4ed13dfb07b862.png

    我们做安卓开发时,webview中发现html5 视频的autoplay根本没实现,查看了下android 源码HTMLVideoElement.cpp也未见相应处理,网上有资料显示,这可能关乎UI线程与后台线程的协调性,我看,以后的升级版本总会解决这个问题的。

    html5标签属性不支持,那只有通过javascript来处理了

    演示apk下载地址:http://download.csdn.net/detail/qiushi_1990/9513038

    github源码下载:https://github.com/qiushi123/H5Demo

    下面是实现步骤和原理

    一,我们在设置的WebViewClient中覆盖方法:

    不要忘记了webview.getSettings().settings.setJavaScriptEnabled(true)启用javascript,AndroidManifest加入INTERNET权限

    @Override

    public void onPageFinished( WebView view, String url) {

    view.loadUrl("javascript:try{autoplay();}catch(e){}");

    }

    实例代码

     public class Html5VideoAutoPlay extends Activity {WebView webview = null;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.html5video);webview = (WebView)findViewById(R.id.webview);webview.getSettings().setJavaScriptEnabled(true);webview.setWebViewClient(new WebViewClient(){/** * 当前网页的链接仍在webView中跳转 */@Overridepublic boolean shouldOverrideUrlLoading(WebView view, String url) {view.loadUrl(url);return true;}/** * 处理ssl请求 */@Overridepublic void onReceivedSslError(WebView view,SslErrorHandler handler, SslError error) {handler.proceed();}/** * 页面载入完成回调 */@Overridepublic void onPageFinished(WebView view, String url) {super.onPageFinished(view, url);view.loadUrl("javascript:try{autoplay();}catch(e){}");}});webview.setWebChromeClient(new WebChromeClient() {/** * 显示自定义视图,无此方法视频不能播放 */@Overridepublic void onShowCustomView(View view, CustomViewCallback callback) {super.onShowCustomView(view, callback);}});webview.loadUrl("file:///sdcard/html/video.html");}@Overrideprotected void onPause() {if(null != webview) {webview.onPause();}super.onPause();} }

    二,布局文件

    html5video.xml

    <?xml version="1.0" encoding="utf-8"?>

    三,html文件(这里用的是html5的video标签来设置自动播放和循环播放)

    video.html

    上面的src可以引入本地视频b.mp4,

    也可以引入网上视频:http://2449.vod.myqcloud.com/2449_43b6f696980311e59ed467f22794e792.f20.mp4

    个人觉得html5结合Android会让未来各种技术实现越来越简单。到我的个人博客查看更多h5与安卓的结合案例。

    也可以关注我github里的其他开源项目。

    github:https://github.com/qiushi123?tab=repositories

    实例图片

    abfe5436288d40775a6452619a163e53.png

    效果图

    有任何关于编程的问题都可以私信我,我看到后会及时解答。

    编程小石头,为分享干货而生!据说,每个年轻上进,颜值又高的互联网人都关注了编程小石头。​

    展开全文
  • 解压以后,用eclipse导入工程,将例子视频放在sdcard下面即可 DeBug或打包需要加上自己的证书
  • 近期做一个项目需要把一个 服务支持的界面用webview来显示..呀 html白雪了js更是一样啥也不会,相信很多初学屌丝员跟我一样,, html开发工具都不知道怎么写..哈哈哈.....现在把做完的结果分享一下先上图了 ,, ...
  • 近期做一个项目需要把一个 服务支持的界面用webview来显示..呀 html白雪了js更是一样啥也不会,相信很多初学屌丝员跟我一样,, html开发工具都不知道怎么写..哈哈哈.....现在把做完的结果分享一下先上图了 ,, 这是...
  • 插件源码在这里 开发插件要具备的知识: Flutter 与 原生 Android iOS 双向通信 Flutter通过MethodChannel实现Flutter 与Android iOS 的双向通信 Flutter通过BasicMessageChannel实现Flutter 与Android iOS 的双向...
  • 这篇文章不是为了炫源码的,就给一些在解决问题的时候无从下手的小朋友一些思路,求求大佬,莫喷我呀 在下一名小公司的前端开发人员,我们产品公司主要是移动端与pc端开发,由于某些客户公司产品是app,需要嵌入我们...
  • 上一篇文章中,说明了单独编译WebView的流程,但是我们最后编译出来的版本只能在对应系统版本的模拟器或者真机才能运行,下面我们就需要解决各个版本的兼容问题。仔细分析不同版本运行时报的错误。
  • WebView webView = findViewById(R.id.taobaoView); final WebSettings settings = webView.getSettings(); settings.setUseWideViewPort(true); settings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm....
  • 用QT开发跨平台的浏览器或者其他应用是非常不错的,大家可以积极尝试。...WebView { id: webView anchors.fill: parent url: initialUrl onLoadingChanged: { if (loadRequest.errorString) ...
  • 安卓html源码获取

    2019-10-03 13:38:03
    关于安卓获取html源码,方法很简单,通过webview与js交互即可获取.说一下思路,安卓端新建接口,在接口中写需要与js端交互的方法,然后webview注册接口.在js端调用.具体代码如下 1.新建接口,记得将需要JS调用的方法加如...
  • 安卓 苹果系统 视窗 注意:从开始, 对React Native WebView的支持。 入门 阅读我们的。 如果任何步骤似乎不清楚,请创建一个详细的问题。 版本控制 该项目遵循。 我们会毫不犹豫地发布重大更改,但它们将是主要...
  • 很多时候,uwp移动端的网页体验很不好,因为大部分网站都没用针对wp手机做UA适配,所以为了我们的网页体验好一点,可以用webview来模拟成安卓浏览器。原理就是修改uwp webview的useragent ,把它改成安卓的。在网上...
  • android浏览器源码webview基本功能齐全.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
  • 做使用WebView应用时,网页上有一个输入框,当输入的文字过多时,超过输入框的行数时,输入框能够滚动,这时间问题来了,输入的提示箭头会移动到输入框外,怎么解决这个问题呢,查找chromium源码如下:void ...
  • webview_sdl_krkr-源码

    2021-02-10 02:01:17
    把krkrsdl2( )编译成webassembly嵌入到安卓webview中的工程,配合nanohttpd( )拉起http服务实现在安卓手机上的webview运行krkr的目的 代码可直接克隆下来用android studio编译运行,建议在真机上运行以获取到...
  • 安卓封装网址APP源码

    2019-04-29 23:52:26
    安卓封装网址APP源码WebView打包H5应用,带图标、Splash等,集成极光推送SDK。

空空如也

空空如也

1 2 3 4 5 ... 7
收藏数 127
精华内容 50
关键字:

安卓webview源码