Android用webView加载h5的页面,h5获取本地的图库中的图片

本文提供了一个 Android WebView 的示例代码,展示了如何使用 WebView 加载网页、处理 JavaScript 对话框及实现文件选择器等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

效果图:


代码:

package com.testandroid.webview;

import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.view.KeyEvent;
import android.view.View;
import android.webkit.JsResult;
import android.webkit.ValueCallback;
import android.webkit.WebBackForwardList;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;


public class WebViewActivity extends AppCompatActivity {

   private final String TAG = WebViewActivity.class.getSimpleName();

   private Button button;
   private WebView webView;

//   private String recgPic = "http://m.shitu.chinaso.com/mx/index.html";
    private String recgPic = "http://t.2858.com/party-api/m/news/enter/detail/178.html?token=7fcec1183b8587f1dc51dcc0286bb450&fontSize=1.0";

   public final static int FILECHOOSER_RESULTCODE = 1;
   public final static int FILECHOOSER_RESULTCODE_FOR_ANDROID_5 = 2;
   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_web_view);

       button = (Button) findViewById(R.id.button);
       button.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View v) {
           }
       });

       initTestWebView();

   }

   private void initTestWebView() {
       webView = (WebView) findViewById(R.id.tempWebView);

       WebSettings settings = webView.getSettings();
       settings.setJavaScriptEnabled(true);

       webView.setWebChromeClient(new WebChromeClient() {
           @Override
           public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
               AlertDialog.Builder builder = new AlertDialog.Builder(view.getContext());
               builder.setTitle("xxx提示").setMessage(message).setPositiveButton("确定", null);
               builder.setCancelable(false);
               builder.setIcon(R.mipmap.ic_launcher);
               AlertDialog dialog = builder.create();
               dialog.show();
               result.confirm();
               return true;
           }

           //扩展浏览器上传文件
           //3.0++版本
           public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType) {
               openFileChooserImpl(uploadMsg);
           }

           //3.0--版本
           public void openFileChooser(ValueCallback<Uri> uploadMsg) {
               openFileChooserImpl(uploadMsg);
           }

           public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType, String capture) {
               openFileChooserImpl(uploadMsg);
           }

           @Override
           public boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> filePathCallback, FileChooserParams fileChooserParams) {
               onenFileChooseImpleForAndroid(filePathCallback);
               return true;
           }
       });

       webView.setWebViewClient(new WebViewClient() {
           @Override
           public boolean shouldOverrideUrlLoading(WebView view, String url) {
               view.loadUrl(url);
               return true;
           }
       });
       webView.loadUrl(recgPic);


   }

   public ValueCallback<Uri> mUploadMessage;
   public void openFileChooserImpl(ValueCallback<Uri> uploadMsg) {
       mUploadMessage = uploadMsg;
       Intent i = new Intent(Intent.ACTION_GET_CONTENT);
       i.addCategory(Intent.CATEGORY_OPENABLE);
       i.setType("image/*");
       startActivityForResult(Intent.createChooser(i, "File Chooser"), FILECHOOSER_RESULTCODE);
   }

   public ValueCallback<Uri[]> mUploadMessageForAndroid5;
   public void onenFileChooseImpleForAndroid(ValueCallback<Uri[]> filePathCallback) {
       mUploadMessageForAndroid5 = filePathCallback;
       Intent contentSelectionIntent = new Intent(Intent.ACTION_GET_CONTENT);
       contentSelectionIntent.addCategory(Intent.CATEGORY_OPENABLE);
       contentSelectionIntent.setType("image/*");

       Intent chooserIntent = new Intent(Intent.ACTION_CHOOSER);
       chooserIntent.putExtra(Intent.EXTRA_INTENT, contentSelectionIntent);
       chooserIntent.putExtra(Intent.EXTRA_TITLE, "Image Chooser");

       startActivityForResult(chooserIntent, FILECHOOSER_RESULTCODE_FOR_ANDROID_5);
   }

   @Override
   protected void onActivityResult(int requestCode, int resultCode,Intent intent) {
       if (requestCode == FILECHOOSER_RESULTCODE) {
           if (null == mUploadMessage)
               return;
           Uri result = intent == null || resultCode != RESULT_OK ? null: intent.getData();
           mUploadMessage.onReceiveValue(result);
           mUploadMessage = null;

       } else if (requestCode == FILECHOOSER_RESULTCODE_FOR_ANDROID_5){
           if (null == mUploadMessageForAndroid5)
               return;
           Uri result = (intent == null || resultCode != RESULT_OK) ? null: intent.getData();
           if (result != null) {
               mUploadMessageForAndroid5.onReceiveValue(new Uri[]{result});
           } else {
               mUploadMessageForAndroid5.onReceiveValue(new Uri[]{});
           }
           mUploadMessageForAndroid5 = null;
       }
   }

   @Override
   public boolean onKeyDown(int keyCode, KeyEvent event) {
       if (webView.canGoBack() && event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
           //获取历史列表
           WebBackForwardList mWebBackForwardList = webView
                   .copyBackForwardList();
           //判断当前历史列表是否最顶端,其实canGoBack已经判断过
           if (mWebBackForwardList.getCurrentIndex() > 0) {
               webView.goBack();
               return true;
           }
       }
       return super.onKeyDown(keyCode, event);
   }
}

2.布局文件:activity_web_view.xml

<?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">
<WebView
    android:id="@+id/tempWebView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"></WebView>
    <Button
        android:id="@+id/button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        />
</LinearLayout>

添加权限:AndroidMainifet.xml


<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.testandroid.webview">
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".WebViewActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>


demo下载:http://download.youkuaiyun.com/detail/yhy123456q/9874464 点击打开链接


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值