Android webview 調(diào)起原生相機拍照咐柜、錄視頻

準備工作

聲明權限:

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

使用前動態(tài)申請相機權限站故。
Android7.0以上需要 聲明FileProvider (http://www.reibang.com/p/47fcd7873f39

開始

    val CAPTURE_REQUEST = 123
    var mFilePathCallback: ValueCallback<Array<Uri>>? = null //webview內(nèi)部回調(diào)
    var captureUri: Uri? = null //使用該uri接收系統(tǒng)返回的圖片/視頻

    fun file2Uri(file: File): Uri {
                    //Android 7.0以上需要使用fileprovider
                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
                        val authority = application.packageName + ".provider"
                        return FileProvider.getUriForFile(Utils.getApp(), authority, file)
                    } else {
                        return Uri.fromFile(file)
                    }
     }

     mWebview.webChromeClient = object : WebChromeClient() {
             /**
             * 復寫該方法
             */
            override fun onShowFileChooser(webView: WebView?, filePathCallback: ValueCallback<Array<Uri>>?, fileChooserParams: FileChooserParams?): Boolean {

          

                mFilePathCallback = filePathCallback

                if (fileChooserParams?.acceptTypes?.isNotEmpty() == true) {
                    val mipmap = fileChooserParams.acceptTypes[0]

                    when (mipmap) {
                        "image/*" -> {
                            val file = File(getExternalFilesDir(Environment.DIRECTORY_PICTURES), "imageCapture${System.currentTimeMillis()}.jpg")
                            ///文件路徑 storage/emulated/0/Android/data/包名/files/Pictures/imageCapture1563956535105.jpg
                            captureUri = file2Uri(file)
                            val intent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
                            intent.putExtra(MediaStore.EXTRA_OUTPUT, captureUri)
                            intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
                            startActivityForResult(intent, CAPTURE_REQUEST)

                            return true
                        }

                        "video/*" -> {
                            val file = File(getExternalFilesDir(Environment.DIRECTORY_PICTURES), "videoCapture${System.currentTimeMillis()}.mp4")
                            ///文件路徑 storage/emulated/0/Android/data/包名/files/Pictures/videoCapture1563956535105.mp4
                            captureUri = file2Uri(file)
                            val intent = Intent(MediaStore.ACTION_VIDEO_CAPTURE)
                            intent.putExtra(MediaStore.EXTRA_OUTPUT, captureUri)
                            intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
                            startActivityForResult(intent, CAPTURE_REQUEST)
                            return true

                        }
                    }
                }
                return super.onShowFileChooser(webView, filePathCallback, fileChooserParams)
            }


        }

接收返回結果

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        if (requestCode == CAPTURE_REQUEST) {
            if (resultCode == Activity.RESULT_OK) {
                mFilePathCallback?.onReceiveValue(arrayOf(captureUri)) //給回調(diào)設置數(shù)據(jù)
            } else
                mFilePathCallback?.onReceiveValue(arrayOf()) //給回調(diào)設置空數(shù)據(jù)
        }
    }

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末固灵,一起剝皮案震驚了整個濱河市降狠,隨后出現(xiàn)的幾起案子磷杏,更是在濱河造成了極大的恐慌溜畅,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件极祸,死亡現(xiàn)場離奇詭異慈格,居然都是意外死亡怠晴,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進店門浴捆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蒜田,“玉大人,你說我怎么就攤上這事选泻〕逶粒” “怎么了?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵页眯,是天一觀的道長梯捕。 經(jīng)常有香客問我,道長窝撵,這世上最難降的妖魔是什么傀顾? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮忿族,結果婚禮上锣笨,老公的妹妹穿的比我還像新娘。我一直安慰自己道批,他們只是感情好错英,可當我...
    茶點故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著隆豹,像睡著了一般椭岩。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上璃赡,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天判哥,我揣著相機與錄音,去河邊找鬼碉考。 笑死塌计,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的侯谁。 我是一名探鬼主播锌仅,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼墙贱!你這毒婦竟也來了热芹?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤惨撇,失蹤者是張志新(化名)和其女友劉穎伊脓,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體魁衙,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡报腔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年株搔,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片纯蛾。...
    茶點故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡邪狞,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出茅撞,到底是詐尸還是另有隱情帆卓,我是刑警寧澤,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布米丘,位于F島的核電站剑令,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏拄查。R本人自食惡果不足惜吁津,卻給世界環(huán)境...
    茶點故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望堕扶。 院中可真熱鬧碍脏,春花似錦、人聲如沸稍算。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽糊探。三九已至钾埂,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間科平,已是汗流浹背褥紫。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留瞪慧,地道東北人髓考。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像弃酌,于是被迫代替她去往敵國和親氨菇。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,781評論 2 354