精华内容
下载资源
问答
  • file:///android_asset/www/trialhtml.html对Web浏览器等外部应用程序没有任何意义.其他应用程序无法访问您资产中的任何文件.你有2个选择.>将html文件复制到共享存储,以便webbrowser可以访问该文件.>然后在...

    file:///android_asset/www/trialhtml.html对Web浏览器等外部应用程序没有任何意义.

    其他应用程序无法访问您资产中的任何文件.你有2个选择.

    >将html文件复制到共享存储,以便webbrowser可以访问该文件.

    >然后在应用程序中的新Activity或片段中实现WebView

    webview.loadUrl( “文件:///android_asset/www/trialhtml.html”);

    您不需要像其他答案指示您一样阅读资产. WebView将在幕后处理所有这些,包括加载其他资产,如图像

    作为旁注,如果Web浏览器能够读取您的文件,您将不想使用

    i.setClassName("com.android.browser", "com.android.browser.BrowserActivity");

    这是因为您明确要求某个浏览器,可能会也可能不会安装在用户的设备上.我有理由相信,在一些只安装了Chrome的现代Android设备上并非如此.

    正确的用法是这样的

    Uri uri = Uri.parse("http://www.example.com");

    Intent intent = new Intent(Intent.ACTION_VIEW, uri);

    startActivity(intent);

    通过不显式设置类和包名称,这可确保无论安装哪个Web浏览器,都将选择用户默认值.

    展开全文
  • android studio加载本地html的文件
  • 我是通过webview去加载本地HTMLHTML中包含有标签的MP4文件, 运行的时候MP4播放不了,求大神指点,不胜感激,先在此谢过!!!
  • android webview读本地html、css等资源并实现登陆,现在很多app都是跟web页面混编的。除了原生控件以外,有些功能页面直接用web端的,用webview加载后台同事写的功能,避免重复开发。 本帖详细说明,webview访问远程...
    现在很多app都是跟web页面混编的。除了原生控件以外,有些功能页面直接用web端的,用webview加载后台同事写的功能,避免重复开发。但是webview加载远程url速度会比较慢,也比较影响用户体验,有些公司产品经理会要求使用html和css、js、jpg等都用本地的来读取,webview只需要加载远程数据,这样既节省了流量,也会大大提升运行速度。 
    

    但是这就有两个问题了:

    ①登陆问题

    ②访问url如何加载本地web资源

    最近做项目的时候,遇到了这个需求,webview加载本地资源,国内帖子少之又少,这个问题辗转了一个多星期,才得以解决,现在把主要的核心代码贴出来,以便后人查阅


    //登陆获取session,保存起来,之后然后同步session就可以实现登陆了
    RequestParams params = new RequestParams("你的登陆地址"); 
    HashMap
       
         signMap = new HashMap
        
         (); 
    params.addBodyParameter("json", url_post);//json里面包含自己的用户名、加密的密码等信息
    
    //发送到后台验证,我这里是使用xutil3 做请求,也可以改成自己的
    x.http().post(params, new Callback.CacheCallback
         
          () {
                @Override
                public boolean onCache(String result) {
                    return false;
                }
    
                @Override
                public void onSuccess(String result) {
                    Log.e("--------发送到服务器接收成功!!!!!!!!!!!!!", "result:" + result + "");
                    //Toast.makeText(context, result + "", Toast.LENGTH_LONG).show();
    
                    //-----------------------获取session-----------------------//
                    DbCookieStore instance = DbCookieStore.INSTANCE;
                    List
          
            cookies = instance.getCookies();
                    for (int i = 0; i < cookies.size(); i++) {
                        //保存session
                        HttpCookie cookie = cookies.get(i);
                        MyCookieStore.cookies = cookie;
                        if ((cookies.get(i) + "").contains("JSESSIONID")) {
                            MyCookieStore.SessionId = cookies.get(i).toString().replace("JSESSIONID=", "");
                            break;
                        }
                    }
                    //-----------------------获取session-----------------------//
    
                    //我们的服务器返回成功啦!正式进入登陆主界面
                    Intent intent = new Intent(context, MainActivity.class);
                    context.startActivity(intent);
                }
    
                @Override
                public void onError(Throwable ex, boolean isOnCallback) {
    
                }
    
                @Override
                public void onCancelled(CancelledException cex) {
    
                }
    
                @Override
                public void onFinished() {
    
                }
            });
          
         
        
       

    //保存cookie的类
    public class MyCookieStore {
        public static CookieStore cookieStore=null;
        public static HttpCookie cookies=null;
        public static String SessionId = "";
    }

    //主MainActivity
    public class MainActivity extends Activity{
        private Webview webview;
        private BMHWebViewClient mBMHWebViewClient;
        @Override
        protected void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
            //webview = (WebView) root.findViewById(R.id.wv_mainui);
            WebSettings webSettings = webview.getSettings();
            webSettings.setDefaultTextEncodingName("GBK");//设置字符编码
            webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
            webSettings.setAllowFileAccess(true);// 设置允许访问文件数据
            webSettings.setAllowContentAccess(true);
            webSettings.setSupportZoom(true);
            webSettings.setBuiltInZoomControls(true);
            webSettings.setDomStorageEnabled(true);
            webSettings.setCacheMode(WebSettings.LOAD_DEFAULT);
            webSettings.setAppCacheEnabled(true);
            webSettings.setDatabaseEnabled(true);
            webSettings.setJavaScriptEnabled(true);//滚动条风格,为0指滚动条不占用空间,直接覆盖在网页上
            mBMHWebViewClient = new BMHWebViewClient(this);
            webview.setWebViewClient(mBMHWebViewClient);//网页跳转监听
            
            String mainUrl = "htpp://192.168.1.1/html/index/index.html"";//url远程地址,改成你的域名
    
            webview.loadUrl(mainUrl);
            CookieUtil.syncCookie(getContext(), mainUrl);//同步session实现登陆
            }
        }

    public class BMHWebViewClient extends WebViewClient {
    
        private Activity activity;//当前的活动类
    
        /**
         * 监听webview的跳转链接,处理连接本地化、过滤地址
         *
         * @param activity 活动页上下文
         */
        public BMHWebViewClient(Activity activity) {
            this.activity = activity;
        }
    
        @Override
        public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
    
        }
    
        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
    
        }
    
    //webview每次访问html、css、图片、js、font资源的时候,都回来这里过滤,在这个方法里面,把本需要远程访问的资源,替换成本地读取
        @Override
        public WebResourceResponse shouldInterceptRequest(WebView view, final String url) {
            WebResourceResponse response = null;
    
                try {
                    String newUrl;//本地的路径
                    newUrl = url.replace(activity.getString(R.string.url_head), activity.getFilesDir().getPath());//url_head域名,把远程地址替换成files文件夹下的对应资源,如:远程地址需要加载:url是http://www.baidu.com/html/index.html,newUrl就为:/data/data/包名/files/html/index.html
                    //Log.v("NEWURL--------------------------->",newUrl);
    
                    //请求不同的远程资源,生成不同类型的文件返回。
                    String type;
                    if (newUrl.contains(".js")) {
                        type = "text/javascript";
                    } else if (newUrl.contains(".png")) {
                        type = "image/png";
                    } else if (newUrl.contains(".html")) {
                        type = "text/html";
                    } else if (newUrl.contains(".css")) {
                        type = "text/css";
                    } else if (newUrl.contains(".jpg")) {
                        type = "image/jpeg";
                    } else {
                        return null;
                    }
                    FileInputStream input = new FileInputStream(newUrl);
                    response = new WebResourceResponse(type, "UTF-8", input);
                } catch (IOException e) {
                    //e.printStackTrace();
                }         
            //如果返回null,webview继续访问远程的资源,非null使用本地的资源,不再从远程取
            return response;
        }


    public class CookieUtil {
        /**
         * 将cookie同步到WebView
         *
         * @param context 上下文
         * @param url     WebView要加载的url
         */
        public static void syncCookie(Context context, String url) {
            try {
                CookieSyncManager syncManager = CookieSyncManager.createInstance(ZebraApplication.getContext());
                CookieManager cookieManager = CookieManager.getInstance();
                cookieManager.setAcceptCookie(true);
                cookieManager.removeAllCookie();
                String host = ZebraApplication.getContext().getResources().getString(R.string.url_head);
                cookieManager.setCookie(host, "JSESSIONID="+ MyCookieStore.SessionId);
                syncManager.sync();
                String newCookie = cookieManager.getCookie(url);
    
            } catch (Exception e) {
                Log.e("Nat: webView.syncCookie failed", e.toString());
            }
        }
    }


    PS:android的assets文件夹是只读的。在app第一次启动的时候,把assets里面的文件夹下的资源全部复制到包名下的fiels文件夹,我这里是在assets下放一个压缩包,执行解压到程序下的fiels文件夹里。进行维护。每次启动发现webview资源更新了,执行下载覆盖files下的对应文件即可。
    展开全文
  • Android webview加载本地html详细教程

    千次阅读 2021-06-13 18:00:20
    1.创建一个项目 一路默认就可以 ...file:///android_asset/js/jquery.min.js" 3.创建webview控件并实例化 找到默认的activity_main.xml文件,完整代码如下 <?xml version="1.0" encoding="utf-

    1.创建一个项目

    一路默认就可以
    在这里插入图片描述

    2.

    右键点击app创建一个和res同级的assets 文件夹。在此文件夹下把html文件以及所要渲染的静态文件放进去
    在这里插入图片描述
    如这是我的文件夹
    如这是我的文件夹
    注:在html中引用css,js等静态文件方法和通常一样,修改一下路径就可以在这里插入图片描述

    file:///android_asset/js/jquery.min.js"
    

    3.创建webview控件并实例化

    找到默认的activity_main.xml文件,完整代码如下

    <?xml version="1.0" encoding="utf-8"?>
    <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity">
    
    <!--    <TextView-->
    <!--        android:layout_width="wrap_content"-->
    <!--        android:layout_height="wrap_content"-->
    <!--        android:text="Hello World!"-->
    <!--        app:layout_constraintBottom_toBottomOf="parent"-->
    <!--        app:layout_constraintLeft_toLeftOf="parent"-->
    <!--        app:layout_constraintRight_toRightOf="parent"-->
    <!--        app:layout_constraintTop_toTopOf="parent" />-->
    
    
        <WebView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/mWebView">
        </WebView>
    
    </androidx.constraintlayout.widget.ConstraintLayout>
    

    修改MainActiviy.java文件,完整代码如下:

    package com.example.webviewdome;
    
    import android.os.Bundle;
    import android.app.Activity;
    import android.webkit.WebView;
    import android.webkit.WebViewClient;
    
    
    public class MainActivity extends Activity {
    
        private WebView mWebView;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            // 实例化
            mWebView = (WebView) findViewById(R.id.mWebView);
    
            // 开启javascript 渲染
            mWebView.getSettings().setJavaScriptEnabled(true);
            mWebView.setWebViewClient(new WebViewClient());
    
            // 载入内容
            mWebView.loadUrl("file:///android_asset/index.html");
    
    //  测试远程的    mWebView.loadUrl("http://www.itxdl.cn");
    
        }
    
    }
    

    然后就可以运行啦
    在这里插入图片描述

    展开全文
  • Android studio 中与本地 html 页面交互

    千次阅读 2017-02-21 17:15:29
    在assets目下考入写好的html页面,webview通过“file:///android_assets/xxxx.html”加载此文件。 _webView.loadUrl("file:///android_asset/01_test.html"); 下面说一下java与js之间的

      在Android studio的工程里的main目录下建立一个 assets目录与res同级如下图:

    在assets目下考入写好的html页面,webview通过“file:///android_assets/xxxx.html”加载此文件。

    _webView.loadUrl("file:///android_asset/01_test.html");
    下面说一下java与js之间的交互:
    首先webview要设置支持 js:_webView.getSettings().setJavaScriptEnabled(true);再注册js访问java的接口:
    _webView.addJavascriptInterface(new Contact(),"contact");
    
    
    class Contact{
        @JavascriptInterface//必须标明否则访问不了
        public void clickAndroid() {
            Toast.makeText(MyWebViewActivity.this, "contact success", Toast.LENGTH_LONG).show();
        }
    }
    js访问Android本地方法:绑定的关键字“aontact”.加方法名如下:
    function opAndroid(){
    
    contact.clickAndroid
    }
    <button  id="button" οnclick="contact.clickAndroid()">
    Android 访问js方法:
    首先在html的js中构建一个方法
    
    
     <script type="text/javascript">
         function invokedByJava(param) {
             document.getElementById("button").innerHTML = "Java has invoked JS function and returnd the data:"+param;
         }
    </script>
    再通过地址:(由javascript:function())组成如下:
    
    _webView.loadUrl("javascript:invokedByJava('java_data')");(必须在UI线程,否则无法访问)
    展开全文
  • android 外部html页面启动本地app及app启动问题
  • AndroidStudio导入项目一直卡在Building gradle project info,实际上是因为你导入的这个项目使用的gradle与你已经拥有的gradle版本不一致,导致需要下载该项目需要的gradle版本,不知是被墙了还是什么原因,反正...
  • 使用AndroidStudio运行HBuilder本地打包的Mui项目 Mui官网 5+SDK下载地址 官网的AndroidStudio打包说明 离线打包说明(包括引入aar包的图文教程)   我这里使用SDK的是18年3月19日发布的...
  • 将您的网站或HTML5应用转换为可正常运行Android应用。 支持html5,html,php,htm,js,css。 从任何Web服务器站点或本地目录构建应用程序。 v4.2的新增功能 多图像上传支持 JS API获取设备API级别 7更多颜色...
  • 如题:android webview 加载本地html,低配置手机超级慢,这是在低配置手机android 4.4版本上遇到这样的问题,本地的html已经放在了asserts文件夹下面,然后运行,在htc上,有时候需要十几秒的始终,好一点的手机也要7/8秒钟...
  • 使用HTML5开发Android本地应用(一)

    千次阅读 2013-03-21 10:10:59
    HTML5是现在最热门的技术之一,Android自带的WebKit浏览器...二是可以从服务器下载应用的内容,但是不依赖于后台Server也可以运行,可以把Web应用和本地应用更好的结合在一起。   这一系列文章的目的在于研究和实
  • android中自定义WebView显示网页或本地html文件

    千次阅读 多人点赞 2014-07-11 16:41:01
    * 面的链接还是在当前的WebView里跳转,不会跳到浏览器上运行。 *****************************************************************/ mWebView.setWebViewClient(new WebViewClient(){ @Override public ...
  • 链接3: 这个实现本地局域网运行html. 链接4: 这个实现本地局域网分享视频. 链接5: link. 链接1: link. 链接2: link.
  • HTML5来开发一款android本地化App游戏-宝石碰碰

    万次阅读 多人点赞 2013-03-27 08:03:33
    本次来说一说如何利用lufylegend.js引擎制作一款HTML5游戏后,将其转换为android本地化的App应用,转换过程其实很简单,下面一步步来做说明。首先来开发一个类似于对对碰的游戏,不过此游戏玩法为在下原创,如有雷同...
  • 原生安卓和js的交互WebView的基本使用基本配置原生安卓调用js原生安卓代码js代码 WebView的基本使用 基本配置 1.在xml里创建如下代码 <WebView android:id="@+id/web_view" android:layout_width="match_...
  • //打开本包内asset目录下的index.html文件 02   ... file:///android_asset/index.html ");  04   05 //打开本地sd卡内
  • android studio中加载本地html文件

    千次阅读 2016-05-30 19:10:26
    首先,在main目录下新建assets文件夹,并将html文件拷贝进去,代码中通过调用webView.loadUrl("file:///android_asset/二级目录/你的html文件.html")即可。
  • 通过 Android SDK Manager 下载下来的文档中包含大量对 Google 网站的样式和脚本的引用,所以打开本地文档的时候速度奇慢无比,所以特地写了这个工具。 只需要将 exe 文件放在 sdk\docs 目录下运行即可。 本工具会...
  • Android Studio 初级调用本地html+css

    千次阅读 2016-09-27 10:52:38
    Android Studio 中Project 下 点击main文件 new 一个Folder->Assets Folder 默认路径 创建成功后 在文件里面放如需要的html+css文件。 在你的项目下找到 项目名.iml 文件点击打开 在标签中 加上下面这句代码 ...
  • PhoneGap是一个采用HTML,CSS...这里我记录下我使用PhoneGap(命令方式)将本地的前端静态页面打包生成安卓apk安装包的全过程。如有问题,请指正,谢谢! 一、jdk和android sdk环境变量配置 下载安装 jdk: ...
  • 正在开发一个地图程序, 相对于用XML写安卓界面, 我更愿意用这个偷懒的办法, 就是不用Android自带的MapView, 而是使用之前就已经比较熟悉的Google Maps JavaScript API, ...在Android的WebView中载入HTML代码, 利用Andr
  • 最近有一个需求,就是要在安卓端获取某个值,这个值是由js文件里的某个函数生成的。问题是这个函数非常复杂,不容易将其换成Java代码重写,故需要安卓直接执行js代码...准备一个html文档,里面嵌入需要运行js代码,...
  • 有没有办法在Android运行Python?我们正在开发S60版本,这个平台有一个很好的Python API ..但是,在Android上没有关于Python的正式官方,但是由于Jython存在,有没有办法让蛇和机器人一起工作?25个解决方案870 ...
  • PhoneGap2.9.0本地html打包成Android应用

    万次阅读 热门讨论 2013-07-06 17:17:15
    PhoneGap的在线打包有大小限制,超过30M的包无法在线打包。当然,可以把包里面的图片、声音文件去掉,然后打包。...http://developer.android.com/sdk/index.html 打开ADT,新建一个安卓应用项目
  • 但是clone的时候发现运行不了,开始以为是包没下载什么的,最后查以后发现是gradle版本有问题记下来做笔记,以后遇到好解决在导入别人的android studio项目或者在github下的项目时(比如项目A),一般无法运行和编译...
  • Hbuilder项目Android Studio本地打包详细步骤,包含官网地址,步骤、截图、注意事项
  • 我就将文本直接填充进去,一运行。。。。发现Html.fromHtml 无法解析部分代码,直接把它们显示了出来。。 我又是一个HTML的小白,于是乎还是掏出了WebView来实现吧! 1、HTML样式文件读取 首先将文
  • Sarmiento创建了Fries——一个用来创建Android应用UI的小型框架,在创建过程中使用HTML、JavaScript和CSS,而无需本地代码。虽然已有许多类似的框架,但Fries对Android 4.0本地接口模仿得尤为出色。 目前,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 66,619
精华内容 26,647
关键字:

安卓运行本地html