首页 > 其他分享 >安卓webview开发选择照片文件

安卓webview开发选择照片文件

时间:2023-09-25 15:01:23浏览次数:56  
标签:文件 settings 安卓 fileUploadCallback 照片 webview null true webView

一、介绍

二、实践代码

三、问题

 

一、介绍

  当需要将H5页面接入android时,会遇到选择文件的问题。

  如果是在web端,选择文件就会打开本地文件。而在安卓,需要先到安卓app,再到系统文件,选择完后再回到app.再回到H5页面,所以需要配置。

二、代码实践

  1.先画界面

  只需要一个webview, 加个id就好

<LinearLayout 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"
    android:orientation="vertical"
    tools:context=".MainActivity2">

    <WebView
        android:id="@+id/webview"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
       />

</LinearLayout>

  2.上java代码

public class MainActivity2 extends AppCompatActivity {

    private ValueCallback<Uri[]> fileUploadCallback;
    private String cameraPhotoPath;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        WebView webView = (WebView) findViewById(R.id.webview);
//        允许解析js
        WebSettings settings=webView.getSettings();
        settings.setJavaScriptEnabled(true);
//        优先使用缓存
        settings.setCacheMode(settings.LOAD_CACHE_ELSE_NETWORK);

        settings.setDomStorageEnabled(true);
//        设置此属性,可任意比例缩放
        settings.setUseWideViewPort(true);
//        适应webview
        settings.setLoadWithOverviewMode(true);
//        设置可以支持缩放
        settings.setSupportZoom(true);
//      设置出现缩放工具
        settings.setBuiltInZoomControls(true);
//        手势焦点
        webView.requestFocusFromTouch();
//      打开内置浏览器
        WebViewClient webViewClient=new WebViewClient();
        webView.setWebViewClient(webViewClient);

        // 设置WebChromeClient,以处理文件选择请求
        webView.setWebChromeClient(new MyWebChromeClient());

        webView.loadUrl( "H5地址");

    }

    // 自定义WebChromeClient以处理文件选择请求
    private class MyWebChromeClient extends WebChromeClient {
        @Override
        public boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> filePathCallback, FileChooserParams fileChooserParams) {
            fileUploadCallback = filePathCallback;

            // 创建一个文件选择的Intent
            Intent intent = fileChooserParams.createIntent();
            try {
                startActivityForResult(intent, 1);
            } catch (Exception e) {
                fileUploadCallback = null;
                return false;
            }

            return true;
        }
    }

    // 处理文件选择的结果
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == 1) {
            if (fileUploadCallback == null) {
                return;
            }

            Uri[] results = null;
            // 检查选择的文件是否为空
            if (resultCode == RESULT_OK && data != null) {
                String dataString = data.getDataString();
                if (dataString != null) {
                    results = new Uri[]{Uri.parse(dataString)};
                }
            }

            // 传递选择的文件给WebView
            fileUploadCallback.onReceiveValue(results);
            fileUploadCallback = null;
        }
    }

}

  3.权限,在AndroidManifest,文件增加文件读取权限

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
    <!--
 Required only if your app needs to access videos
         that other apps created.
    -->
    <uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
    <!--
 Required only if your app needs to access audio files
         that other apps created.
    -->
    <uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />
    <uses-permission
        android:name="android.permission.READ_EXTERNAL_STORAGE"
        android:maxSdkVersion="32" />

 

三、问题

  

标签:文件,settings,安卓,fileUploadCallback,照片,webview,null,true,webView
From: https://www.cnblogs.com/nobody-/p/17727943.html

相关文章

  • 本地电脑打包安卓证书教程
    打包教程进入目录D:\phpstudy_pro\Extensions\jre1.8\bin键入CMD回车keytool-importkeystore-srckeystorehaiwaishifu.keystore-destkeystorehaiwaishifu.keystore-deststoretypepkcs12haiwaishifu.keystore证书名字或者keytool-genkey-aliastestalias-keyalg......
  • 安卓打包之后 查看证书的SHA1
    查看证书keystore的SHA1keytool-list-v-keystorehaiwaishifu.keystore-storepass123456keytool-list-v-keystore'ystore-file'-storepasskeystore-password'......
  • 安卓逆向 -- 入门Smali语言
    在Android应用程序逆向工程和安全研究中,了解Smali语言是非常重要的。Smali是一种用于Android应用程序的反汇编和反编译的语言,允许您分析、修改和定制应用程序的行为。本博客将带您深入了解Smali语言的基础知识和技术,同时提供一些实际的代码案例。一、什么是Smali语言?Smali是一种基......
  • 从安卓模拟器中获取 expo-av 库录音得到的音频文件 file:///data/user/0/mo.com.nccl.
    在使用expo-av录制音频时,录制结束通过recording.getURI()可以获取得到的音频文件的地址。想要获取该文件可以通过发送请求的方式:consturi=recording.getURI();letresponse=awaitfetch(uri);letblob=awaitresponse.blob();如果想直接根据文件路径找到这个文......
  • 05_webview操作和使用
      新建一个文件夹,跟之前一样,在Vscode终端里输入yarncreateelectron-appDrag。  首先也是按照之前的方法去创建js和js文件夹下的render.js。  在index.js中的webPreferences添加:  红框中的代码是html支持webview。webview其实是嵌入式一个网页,让我......
  • HbuilderX将Vue项目打包后的dist,打包成安卓apk安装包
    1、先看这个(必看):https://www.cnblogs.com/lyt520/p/16545806.html2、安装移动端log(如不需要可跳过此步骤)npminstallvconsolemain.js中引入:importVConsolefrom'vconsole'constvConsole=newVConsole()Vue.use(vConsole)3、HBuilderX和逍遥模拟器(用模拟器实现真......
  • Stable Diffusion基础:ControlNet之重新上色(黑白照片换新颜)
     本文给大家分享StableDiffusion的基础能力:ControlNet之重新上色。这是一个最近新上的ControlNet模型,它可以识别图像中的不同区域,并使用不同的颜色重新绘制它们。安装ControlNet安装工欲善其事必先利其器,ControlNet还是先要安装好的,已经安装好的请跳过这一步。......
  • 联发科MTK6877/MT6877(天玑900)安卓核心板_5G安卓AI智能模块
    MTK/联发科5G安卓AI智能模块(MT6877天玑900平台)开发板方案定制支持NR-SA/NR-NSA/LTE-FDD(CAT-18)/LTE-TDD(CAT-18)/WCDMA/TD-SCDMA/EVDO/CDMA/GSM等多种制式;支持WiFi6,802.11a/b/g/n/ac/ax,BTv2.1+EDR,3.0+HS,v4.1+HS,V5.2,支持Beidou(北斗),Galileo,Glonass,GPS,QZSS,GNSS(L1+L2......
  • 安卓音视频入门难,分享一份杭州某大厂音视频内部文档
    前言最近在写作过程中,我注意到很多读者私下向我提问,他们对安卓音视频方面非常感兴趣,但苦于没有系统的学习方法。今天,我想和大家分享一些我在音视频开发方面的经验。首先,要学习音视频开发,你需要掌握一些基础知识点,这些知识点包括:FFmpeg:这是一款强大的音视频处理库,可以帮助你进行音视......
  • wpf 覆盖元素在webview2之上
    元素代码来源githubCrissCross项目需要两个工具类及一个webview2的封装类//Copyright(c)ChrisPulman.Allrightsreserved.//LicensedundertheMITlicense.SeeLICENSEfileintheprojectrootforfulllicenseinformation.usingSystem;usingSystem.Runt......