GVKun编程网logo

Android-WebView 与本地 HTML (Java 调用 --->HTML 的方法)(android webview调用js)

2

本文将介绍Android-WebView与本地HTML(Java调用--->HTML的方法)的详细情况,特别是关于androidwebview调用js的相关信息。我们将通过案例分析、数据研究等多种方式

本文将介绍Android-WebView 与本地 HTML (Java 调用 --->HTML 的方法)的详细情况,特别是关于android webview调用js的相关信息。我们将通过案例分析、数据研究等多种方式,帮助您更全面地了解这个主题,同时也将涉及一些关于Android / Java WebView Fileupload 在 Android 版本 10 和 11 中失败、Android Webview - 调用方法 webView.loadUrl 时,chromium 会显示 ANR(带有标题)、android webview js 交互,响应 webview 图片的响应事件、Android webview loadurl(“file:///android_asset/index.html#home”)失败的知识。

本文目录一览:

Android-WebView 与本地 HTML (Java 调用 --->HTML 的方法)(android webview调用js)

Android-WebView 与本地 HTML (Java 调用 --->HTML 的方法)(android webview调用js)

上一篇博客 Android-WebView 与本地 HTML (HTML 调用 -->Java 的方法) 介绍了 JavaScript 调用 --> Java 中的方法而此篇博客是介绍 Java 调用 ---> JavaScript 中的方法

 

上一篇博客 Android-WebView 加载网络图片 & 网页 介绍了 使用 WebView 去加载网络上的图片与网页;

 

此篇博客专门介绍 Android-WebView 与本地 HTML (HTML 调用 -->Java 的方法), 其实对于 WebView 来说 无论是本地 HTML 还是 网络 HTML ,代码操作方式都是相似的,只是 loadUrl (1. 网络链接 或 2. 本地链接)

 




 

 

Java 调用 ---> JavaScript 的方法:

 

Activity:

package cn.h5;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.webkit.WebView;
import android.widget.EditText;

public class MainActivity4 extends Activity {

    private EditText etName;
    private WebView webView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main4);

        etName = findViewById(R.id.et_name);

        /**
         * 定义此WebView 用于去展现本地HTML
         */
        webView = findViewById(R.id.wv_webview);

        /**
         * WebView默认是不能够执行javascript
         * 以下代码是设置>>允许webview能够执行javascript代码
         */
        webView.getSettings().setJavaScriptEnabled(true);

        // 这里不需要设置 webView.addJavascriptInterface,是因为JavaScript不调用-->Java的方法

        /**
         * 加载本地的HTML文件
         */
        webView.loadUrl("file:///android_asset/test2.html");
    }

    /**
     * Button onClick 添加名字
     * @param view
     */
    public void addName(View view) {

        /**
         * 让WebView去执行JavaScript代码
         * 让WebView去执行JavaScript的my_function方法
         *
         * JavaScript方法:
         *      function my_function(myname) {
         *          document.getElementById("demo").innerHTML = "Java设置我的值名字是:" + myname;
         *      }
         */
        webView.loadUrl("javascript:my_function(" + etName.getText().toString() + ")");
    }
}

 

activity 的布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <EditText
            android:id="@+id/et_name"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:hint="请输入给JS的名字"
            />

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="添加"
            android:onClick="addName"
            />

    </LinearLayout>

    <!--
            定义WebView
                1.WebView可以展现处理本地的HTML相关;
                2.WebView可以展现处理网络的HTML相关;
                3.WebView可以制作自定义浏览器;
                ....
         -->
    <WebView
        android:id="@+id/wv_webview"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="60dp">
    </WebView>

</LinearLayout>

 

test2.html:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

        <!-- viewport的宽度等于设备宽度,viewport会根据屏幕宽度自动适应,并且对图片和文字进行缩放显示 -->
        <meta name="viewport" content="initial-scale=1.0" />

        <title>Web页面</title>

        <script type="text/javascript">

            function my_function(myname) {
                document.getElementById("demo").innerHTML = "Java设置我的值名字是:" + myname;
            }

        </script>

    </head>

    <body>

        这是一个html页面,现在在WebView中运行

        <p id = "demo"></p>

    </body>

</html>

 

执行结果:

 

Android / Java WebView Fileupload 在 Android 版本 10 和 11 中失败

Android / Java WebView Fileupload 在 Android 版本 10 和 11 中失败

如何解决Android / Java WebView Fileupload 在 Android 版本 10 和 11 中失败

我有一个 android 应用程序,其中有一个 webview。此网络视图包含用于上传图片的文件上传,该图片确实像从 Android 6 到 9 的魅力一样工作。对于版本 10,如果我使用图库中的图片,它仍然可以工作,但如果我尝试直接通过相机使用图片,它会告诉我认为它没有对 ExternalStorage 的权限。我在设置中给了它访问权限,因为我没有实现权限问题。对于版本 11,它几乎相同,只是我根本没有收到任何错误。我检查了一些我认为是因为“ACTION_IMAGE_CAPTURE”的 Intent 由于某种原因返回 null 的事情。我错过了什么吗?

onShowFileChooser

  1. public boolean onShowFileChooser(WebView view,ValueCallback<Uri[]> filePath,WebChromeClient.FileChooserParams fileChooserParams) {
  2. // Double check that we don''t have any existing callbacks
  3. if (mFilePathCallback != null) {
  4. mFilePathCallback.onReceiveValue(null);
  5. }
  6. mFilePathCallback = filePath;
  7. Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
  8. if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
  9. // Create the File where the photo should go
  10. File photoFile = null;
  11. try {
  12. photoFile = createImageFile();
  13. takePictureIntent.putExtra("PhotoPath",mCameraPhotoPath);
  14. Log.d("test","Test1");
  15. } catch (IOException ex) {
  16. // Error occurred while creating the File
  17. Toast.makeText(getApplicationContext(),"\\"Unable to create Image File",Toast.LENGTH_SHORT).show();
  18. }
  19. // Continue only if the File was successfully created
  20. if (photoFile != null) {
  21. mCameraPhotoPath = "file:" + photoFile.getAbsolutePath();
  22. takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT,Uri.fromFile(photoFile));
  23. } else {
  24. takePictureIntent = null;
  25. }
  26. }
  27. Intent contentSelectionIntent = new Intent(Intent.ACTION_GET_CONTENT);
  28. contentSelectionIntent.addCategory(Intent.CATEGORY_OPENABLE);
  29. contentSelectionIntent.setType("image/*");
  30. Intent[] intentArray;
  31. if (takePictureIntent != null) {
  32. intentArray = new Intent[]{takePictureIntent};
  33. } else {
  34. intentArray = new Intent[0];
  35. }
  36. Intent chooserIntent = new Intent(Intent.ACTION_CHOOSER);
  37. chooserIntent.putExtra(Intent.EXTRA_INTENT,contentSelectionIntent);
  38. chooserIntent.putExtra(Intent.EXTRA_TITLE,"Image Chooser");
  39. chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS,intentArray);
  40. startActivityForResult(chooserIntent,INPUT_FILE_REQUEST_CODE);
  41. return true;
  42. }

createImageFile() -> 即使在“设置”中给它权限后,也会给我错误“权限被拒绝”

  1. private File createImageFile() throws IOException {
  2. try {
  3. // Create an image file name
  4. String timeStamp = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());
  5. String imageFileName = "JPEG_" + timeStamp + "_";
  6. File storageDir = Environment.getExternalStoragePublicDirectory(
  7. Environment.DIRECTORY_PICTURES);
  8. File imageFile = File.createTempFile(
  9. imageFileName,/* prefix */
  10. ".jpg",/* suffix */
  11. storageDir /* directory */
  12. );
  13. return imageFile;
  14. } catch (Exception e) {
  15. Log.d("test",e.getMessage());
  16. return null;
  17. }
  18. }

onActivityResult()

  1. @Override
  2. public void onActivityResult(int requestCode,int resultCode,Intent data) {
  3. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
  4. if (requestCode != INPUT_FILE_REQUEST_CODE || mFilePathCallback == null) {
  5. super.onActivityResult(requestCode,resultCode,data);
  6. return;
  7. }
  8. Uri[] results = null;
  9. // Check that the response is a good one
  10. if (resultCode == Activity.RESULT_OK) {
  11. if (data == null || data.getDataString() == null) {
  12. // If there is not data,then we may have taken a photo
  13. if (mCameraPhotoPath != null) {
  14. results = new Uri[]{Uri.parse(mCameraPhotoPath)};
  15. }
  16. } else {
  17. String dataString = data.getDataString();
  18. if (dataString != null) {
  19. results = new Uri[]{Uri.parse(dataString)};
  20. }
  21. }
  22. }
  23. mFilePathCallback.onReceiveValue(results);
  24. mFilePathCallback = null;
  25. } else if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.KITKAT) {
  26. if (requestCode != FILECHOOSER_RESULTCODE || mUploadMessage == null) {
  27. super.onActivityResult(requestCode,data);
  28. return;
  29. }
  30. if (requestCode == FILECHOOSER_RESULTCODE) {
  31. if (null == this.mUploadMessage) {
  32. return;
  33. }
  34. Uri result = null;
  35. try {
  36. if (resultCode != RESULT_OK) {
  37. result = null;
  38. } else {
  39. // retrieve from the private variable if the intent is null
  40. result = data == null ? mCapturedImageURI : data.getData();
  41. }
  42. } catch (Exception e) {
  43. Toast.makeText(getApplicationContext(),"activity :" + e,Toast.LENGTH_LONG).show();
  44. }
  45. mUploadMessage.onReceiveValue(result);
  46. mUploadMessage = null;
  47. }
  48. }
  49. return;
  50. }

提前致谢:D

Android Webview - 调用方法 webView.loadUrl 时,chromium 会显示 ANR(带有标题)

Android Webview - 调用方法 webView.loadUrl 时,chromium 会显示 ANR(带有标题)

如何解决Android Webview - 调用方法 webView.loadUrl 时,chromium 会显示 ANR(带有标题)?

我们有一个使用 Android webview 的应用程序,我们注意到自 2021 年 4 月 7 日起调用以下代码时出现 ANR(该代码在 UIThread 中调用):

public void onLoadUrlWithHeaders(final String url,final Map<String,String> headers) {
        Log.d(TAG,"onLoadUrl with headers : " + url);
        webView.loadUrl(url,headers);
    }

此问题是间歇性的,仅在某些设备上发生。例如在我们的测试设备上: 摩托罗拉 Moto X (4) Android 9 (SDK 28)

三星 SM - A520F Android 8 (SDK 26) - Webview Chrome 90.0.4430.82

问题出现在我们于 2020 年 12 月发布的应用版本中,该版本直到 4 月才出现上述 ANR。

ANR后A520F的/data/anr/traces.txt文件摘录

suspend all histogram:  Sum: 340.474ms 99% C.I. 0.042ms-187.678ms Avg: 4.365ms Max: 283.301ms
DALVIK THREADS (69):
"Signal Catcher" daemon prio=5 tid=3 Runnable
  | group="system" sCount=0 dsCount=0 flags=0 obj=0x13680248 self=0x7d302c1400
  | sysTid=15932 nice=0 cgrp=default sched=0/0 handle=0x7d254fe4f0
  | state=R schedstat=( 0 0 0 ) utm=2 stm=3 core=3 HZ=100
  | stack=0x7d25404000-0x7d25406000 stackSize=1005KB
  | held mutexes= "mutator lock"(shared held)
  native: #00 pc 0000000000397510  /system/lib64/libart.so (_ZN3art15DumpNativeStackERNSt3__113basic_ostreamicns0_11char_traitsIcEEEEiP12BacktraceMapPKcPNS_9ArtMethodEPv+212)
  native: #01 pc 000000000045dce8  /system/lib64/libart.so (_ZNK3art6Thread9DumpStackERNSt3__113basic_ostreamicns1_11char_traitsIcEEEEbP12BacktraceMapb+348)
  native: #02 pc 000000000047549c  /system/lib64/libart.so (_ZN3art14DumpCheckpoint3RunEPNS_6ThreadE+880)
  native: #03 pc 000000000046d774  /system/lib64/libart.so (_ZN3art10ThreadList13runcheckpointEPNS_7ClosureES2_+480)
  native: #04 pc 000000000046d17c  /system/lib64/libart.so (_ZN3art10ThreadList4DumpERNSt3__113basic_ostreamicns1_11char_traitsIcEEEEb+796)
  native: #05 pc 000000000046cd1c  /system/lib64/libart.so (_ZN3art10ThreadList14DumpForSigQuitERNSt3__113basic_ostreamicns1_11char_traitsIcEEEE+920)
  native: #06 pc 00000000004426f0  /system/lib64/libart.so (_ZN3art7Runtime14DumpForSigQuitERNSt3__113basic_ostreamicns1_11char_traitsIcEEEE+196)
  native: #07 pc 000000000044bb88  /system/lib64/libart.so (_ZN3art13SignalCatcher13HandleSigQuitEv+1676)
  native: #08 pc 000000000044a9c0  /system/lib64/libart.so (_ZN3art13SignalCatcher3RunEPv+388)
  native: #09 pc 0000000000067d04  /system/lib64/libc.so (_ZL15__pthread_startPv+200)
  native: #10 pc 000000000001f348  /system/lib64/libc.so (__start_thread+68)
  (no managed stack frames)

"main" prio=5 tid=1 Native
  | group="main" sCount=1 dsCount=0 flags=1 obj=0x731fda50 self=0x7d302c0a00
  | sysTid=15926 nice=-10 cgrp=default sched=0/0 handle=0x7d353e19c8
  | state=R schedstat=( 0 0 0 ) utm=4634 stm=638 core=2 HZ=100
  | stack=0x7fd505c000-0x7fd505e000 stackSize=8MB
  | held mutexes=
  kernel: (Couldn''t read /proc/self/task/15926/stack)
  native: #00 pc 00000000035e867c  /data/app/com.android.chrome-ZK4DdobzNyyzf7J8pPGLPg==/base.apk (???)
  native: #01 pc 00000000033e32d8  /data/app/com.android.chrome-ZK4DdobzNyyzf7J8pPGLPg==/base.apk (???)
  at J.N.MAqmDh4t(Native method)
  **at org.chromium.content.browser.framehost.NavigationControllerImpl.c(chromium-Monochrome.aab-stable-443008223:17)
  at org.chromium.android_webview.AwContents.w(chromium-Monochrome.aab-stable-443008223:35)
  at org.chromium.android_webview.AwContents.v(chromium-Monochrome.aab-stable-443008223:14)
  at com.android.webview.chromium.WebViewChromium.loadUrl(chromium-Monochrome.aab-stable-443008223:5)**
  at android.webkit.WebView.loadUrl(WebView.java:927)
  at br.com.gabba.Box.l.o(:-1)
  at br.com.gabba.Box.model.BO.k$a.c(:-1)
  at br.com.gabba.Box.model.BO.k$a.b(:-1)
  at br.com.gabba.Box.model.BO.LoginAuthBO.i(:-1)
  at br.com.gabba.Box.model.BO.LoginAuthBO_.H(:-1)
  at br.com.gabba.Box.model.BO.LoginAuthBO_$a.run(:-1)
  at android.os.Handler.handleCallback(Handler.java:789)
  at android.os.Handler.dispatchMessage(Handler.java:98)
  at android.os.Looper.loop(Looper.java:164)
  at android.app.ActivityThread.main(ActivityThread.java:6944)
  at java.lang.reflect.Method.invoke(Native method)
  at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)

Here is the entire traces.txt

Similar problem in Google Mobile Ads SDK Developers

解决方法

在 Activity onDestroy 上有一个遗留代码。

 @Override
    protected void onDestroy() {
        super.onDestroy();

        WebView webView = getWebView();

        if (webView != null) {
            webView.setWebViewClient(null);
            webView.setWebChromeClient(null);
            webView.loadUrl("about:blank");
        }
    }

此代码可以在 webview 中的注销请求后立即执行。当响应仍在等待中时。

在某些时候,在 Chromium 更新之后,当发生这种情况时(onDestroy 带有待处理的响应),在 webView.loadUrl 的下一次执行中观察到 ANR。

我们创建一个控件来等待注销响应以完成活动。 Play 商店中注册的 ANR 数量下降了 99% 以上。或者您可以简单地从 ondestroy 中删除上述代码。

android webview js 交互,响应 webview 图片的响应事件

android webview js 交互,响应 webview 图片的响应事件

方案思路,

1. 在点击图片的时候调用本地的 java 方法并给出响应的图片地址

2. 本地获得图片地址后,开启一个遮罩 activity 进行显示和处理


第二步的实现很容易实现,关键是第一步的实现,在网页中点击图片不会调用本地的 java 代码。那么我们需要给这个点击事件加上相应的 js 函数,让点击事件调用的 js 函数来调用我们提前准备好的 java 函数,等我们捕获到图片的 url 剩下的就好处理了。

关键点就是给普通的 html 注入我们的 js 函数,让图片能够响应点击并调用 js 函数,在通过 js 函数来调用我们的 java 函数。听起来好像有点绕,不过也不难,下面我们用代码实现下


对 java 和 js 交互还不熟悉的同学,请参照前面的文章

http://blog.csdn.net/wangtingshuai/article/details/8631835


这次实例的主要功能:点击图片在新的 activity 中展示,对图片能够进行手势操作,包括双指缩放等

效果图


加载 webview 的 activity 代码  


[java] view plaincopy

  1. package wst.webview;  

  2.   

  3. import android.annotation.SuppressLint;  

  4. import android.app.Activity;  

  5. import android.content.Context;  

  6. import android.content.Intent;  

  7. import android.graphics.Bitmap;  

  8. import android.os.Bundle;  

  9. import android.webkit.WebView;  

  10. import android.webkit.WebViewClient;  

  11.   

  12. @SuppressLint("SetJavaScriptEnabled")  

  13. public class MainActivity extends Activity {  

  14.   

  15.     private WebView contentWebView = null;  

  16.   

  17.     @SuppressLint("SetJavaScriptEnabled")  

  18.     @Override  

  19.     public void onCreate(Bundle savedInstanceState) {  

  20.         super.onCreate(savedInstanceState);  

  21.         setContentView(R.layout.main);  

  22.         contentWebView = (WebView) findViewById(R.id.webview);  

  23.         // 启用 javascript  

  24.         contentWebView.getSettings().setJavaScriptEnabled(true);  

  25.         // 随便找了个带图片的网站  

  26.         contentWebView.loadUrl("http://www.weim.me/12408.html");  

  27.         // 添加 js 交互接口类,并起别名 imagelistner  

  28.         contentWebView.addJavascriptInterface(new JavascriptInterface(this), "imagelistner");  

  29.         contentWebView.setWebViewClient(new MyWebViewClient());  

  30.   

  31.     }  

  32.   

  33.     // 注入 js 函数监听  

  34.     private void addImageClickListner() {  

  35.         // 这段 js 函数的功能就是,遍历所有的 img 几点,并添加 onclick 函数,函数的功能是在图片点击的时候调用本地 java 接口并传递 url 过去  

  36.         contentWebView.loadUrl("javascript:(function(){" +  

  37.         "var objs = document.getElementsByTagName(\"img\"); " +   

  38.                 "for(var i=0;i<objs.length;i++)  " +   

  39.         "{"  

  40.                 + "    objs[i].onclick=function()  " +   

  41.         "    {  "   

  42.                 + "        window.imagelistner.openImage(this.src);  " +   

  43.         "    }  " +   

  44.         "}" +   

  45.         "})()");  

  46.     }  

  47.   

  48.     // js 通信接口  

  49.     public class JavascriptInterface {  

  50.   

  51.         private Context context;  

  52.   

  53.         public JavascriptInterface(Context context) {  

  54.             this.context = context;  

  55.         }  

  56.   

  57.         public void openImage(String img) {  

  58.             System.out.println(img);  

  59.             //  

  60.             Intent intent = new Intent();  

  61.             intent.putExtra("image", img);  

  62.             intent.setClass(context, ShowWebImageActivity.class);  

  63.             context.startActivity(intent);  

  64.             System.out.println(img);  

  65.         }  

  66.     }  

  67.   

  68.     // 监听  

  69.     private class MyWebViewClient extends WebViewClient {  

  70.         @Override  

  71.         public boolean shouldOverrideUrlLoading(WebView view, String url) {  

  72.   

  73.             return super.shouldOverrideUrlLoading(view, url);  

  74.         }  

  75.   

  76.         @Override  

  77.         public void onPageFinished(WebView view, String url) {  

  78.   

  79.             view.getSettings().setJavaScriptEnabled(true);  

  80.   

  81.             super.onPageFinished(view, url);  

  82.             // html 加载完成之后,添加监听图片的点击 js 函数  

  83.             addImageClickListner();  

  84.   

  85.         }  

  86.   

  87.         @Override  

  88.         public void onPageStarted(WebView view, String url, Bitmap favicon) {  

  89.             view.getSettings().setJavaScriptEnabled(true);  

  90.   

  91.             super.onPageStarted(view, url, favicon);  

  92.         }  

  93.   

  94.         @Override  

  95.         public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {  

  96.   

  97.             super.onReceivedError(view, errorCode, description, failingUrl);  

  98.   

  99.         }  

  100.     }  

  101.   

  102. }  


展示图片的 activity 代码


[java] view plaincopy

  1. package wst.webview;  

  2.   

  3. import java.io.IOException;  

  4. import java.io.InputStream;  

  5. import java.net.URL;  

  6.   

  7. import android.app.Activity;  

  8. import android.graphics.drawable.BitmapDrawable;  

  9. import android.graphics.drawable.Drawable;  

  10. import android.os.Bundle;  

  11. import android.widget.TextView;  

  12.   

  13. public class ShowWebImageActivity extends Activity {  

  14.     private TextView imageTextView = null;  

  15.     private String imagePath = null;  

  16.     private ZoomableImageView imageView = null;  

  17.   

  18.     @Override  

  19.     protected void onCreate(Bundle savedInstanceState) {  

  20.         super.onCreate(savedInstanceState);  

  21.         setContentView(R.layout.show_webimage);  

  22.         this.imagePath = getIntent().getStringExtra("image");  

  23.   

  24.         this.imageTextView = (TextView) findViewById(R.id.show_webimage_imagepath_textview);  

  25.         imageTextView.setText(this.imagePath);  

  26.         imageView = (ZoomableImageView) findViewById(R.id.show_webimage_imageview);  

  27.   

  28.         try {  

  29.             imageView.setImageBitmap(((BitmapDrawable) ShowWebImageActivity.loadImageFromUrl(this.imagePath)).getBitmap());  

  30.         } catch (IOException e) {  

  31.             e.printStackTrace();  

  32.         }  

  33.     }  

  34.   

  35.     public static Drawable loadImageFromUrl(String url) throws IOException {  

  36.   

  37.         URL m = new URL(url);  

  38.         InputStream i = (InputStream) m.getContent();  

  39.         Drawable d = Drawable.createFromStream(i, "src");  

  40.         return d;  

  41.     }  

  42. }  



图片布局文件 


[html] view plaincopy

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

  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  

  3.     android:layout_width="fill_parent"  

  4.     android:layout_height="fill_parent"  

  5.     android:orientation="vertical" >  

  6.   

  7.     <!-- TODO 默认占位图 -->  

  8.   

  9.     <wst.webview.ZoomableImageView  

  10.         android:id="@+id/show_webimage_imageview"  

  11.         android:layout_width="fill_parent"  

  12.         android:layout_height="fill_parent"  

  13.         android:scaleType="matrix"  

  14.         android:src="@drawable/icon" />  

  15.   

  16.     <TextView  

  17.         android:id="@+id/show_webimage_imagepath_textview"  

  18.         android:layout_width="fill_parent"  

  19.         android:layout_height="wrap_content"  

  20.         android:gravity="center"  

  21.         android:textColor="#ffff0000" />  

  22.   

  23. </LinearLayout> 



Android webview loadurl(“file:///android_asset/index.html#home”)失败

Android webview loadurl(“file:///android_asset/index.html#home”)失败

我正在研究Android中的应用程序,我想在其中加载本地html文件

webview.loadurl("file:///android_asset/index.html#home");

它将在大多数设备上加载,但在某些配备Android OS 4.0.4的三星设备上,加载失败.

你有这个问题的想法吗?

添加一些评论,对不起我的错误.

webview.loadurl("file:///android_asset/www/index.html");

工作得很好,但是

webview.loadurl("file:///android_asset/www/index.html#home");

失败了.

解决方法:

首先检查index.html是否在项目文件夹中的asset文件夹下.

我相信它位于项目资产文件夹中的www文件夹下.

1:首先将index.html放在www文件夹下

2:将www文件夹放在资产文件夹中并调用

webview.loadurl("file:///android_asset/www/index.html");

编辑:

我想您可能希望每次运行应用程序时都调用index.html的主页选项卡.

因为android只关注html页面而不是这里的标签是一个可以帮助你的好方法,即

将index.html的主页选项卡设置为活动状态,并使其他非活动状态.

这可能会对你有所帮助.

我们今天的关于Android-WebView 与本地 HTML (Java 调用 --->HTML 的方法)android webview调用js的分享已经告一段落,感谢您的关注,如果您想了解更多关于Android / Java WebView Fileupload 在 Android 版本 10 和 11 中失败、Android Webview - 调用方法 webView.loadUrl 时,chromium 会显示 ANR(带有标题)、android webview js 交互,响应 webview 图片的响应事件、Android webview loadurl(“file:///android_asset/index.html#home”)失败的相关信息,请在本站查询。

本文标签: