当前位置:   article > 正文

Android Webview调相机拍照选择图片并显示到网页_webview 调用手机拍照

webview 调用手机拍照

前面几篇博客我们介绍了webView的基本使用和js与Android的相互调用,并且简单的封装了个X5WebView.

本篇博客我们通过前面的知识整合来实现一个比较实用的功能.就是点击网页上的img标签选择手机里的图片或拍照,然后将图片显示在网页对应的元素上.

大概就是这个样子吧.
这里写图片描述

下面是实现步骤:
我们从零开始!

1.创建项目
我的项目名字叫做HybridApp_SelectAndShowImg.不要问我为什么起这么长的名字,因为越长越专业.
这里写图片描述

这是创建好的项目,只有一个MainActivity

这里写图片描述

2.分析需求
1)首先,我需要有个网页,这个网页很简单,就是放了一些img标签,然后给img标签添加个点击事件,点击后去调用Android提供的方法去拍照或者选择照片.得到android传过来的图片路径后去显示图片即可.

好,那我们就先写个简单的网页.对前端不是太熟悉的同学可以看看我web前端专栏里面的前面几篇文章.顺便记得顶一下呦!
web前端基础

前端代码:

html很简单,引入了jquery,index.js和index.css

<!DOCTYPE html>
<html>

	<head>
		<meta charset="UTF-8">
		<title></title>
		<script type="text/javascript" src="js/jquery.min.js"></script>
		<script type="text/javascript" src="js/index.js"></script>
		<link rel="stylesheet" href="css/index.css" />
	</head>
	<body>
		<div class="content">
			<h1>我是网页</h1>
			<img />
			<img />
			<img />
			<img />
		</div>
	</body>
</html>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

index.js代码定义了两个方法:

	var imgDom;
	$(function() {

		/*点击事件*/
		$("img").on("click", function() {
			console.log("点击调android拍照");
			imgDom = this; //将当前点击的img标签赋给变量imgDom
			console.log("当前节点:" + imgDom);
			window.android.takePhoto();

		});

	});

	/*显示图片*/
	function displayImg(path) {
		console.log("显示图片");
		$(imgDom).attr("src", "file://" + path);

	}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

index.css代码:

.content {
	width: 100%;
	margin: auto;
}

h1 {
	width: 150px;
	margin: auto;
	margin-bottom: 20px;
}

img {
	border: 1px solid pink;
	border-radius: 5px;
	width: 100px;
	height: 100px;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

2)网页搞定后我们来看看Android这边需要什么东西,首先我需要用webView加载网页,然后需要拍照和选择图片,最后把得到的图片路径回传给网页即可.

webView方面用的还是上一篇博客我们简单封装的X5ProgressWebView.
图片选择器用的而是一个第三方的开源库**ImagePicker**
和谷歌的glide.

我们主要是看看MainActivity里的代码,其实代码很少,只是给前端提供了一个takephoto方法,然后得到图片路径后去调用js提供的 displayImg(path)方法,并将路径传过去就可以了.

package com.yzq.hybridapp_selectandshowimg.activity;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.webkit.JavascriptInterface;

import com.lzy.imagepicker.ImagePicker;
import com.lzy.imagepicker.bean.ImageItem;
import com.yzq.hybridapp_selectandshowimg.R;
import com.yzq.hybridapp_selectandshowimg.Tool.MyImagePicker;
import com.yzq.hybridapp_selectandshowimg.common.Constants;
import com.yzq.hybridapp_selectandshowimg.view.ProgressWebView;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {


    public final String TAG = "MainActivity";
    private ProgressWebView webView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        webView = (ProgressWebView) findViewById(R.id.webView);

        webView.addJavascriptInterface(new JsInterface(), "android");
        webView.loadUrl("file:///android_asset/index.html");

    }


    /*与js进行交互的类*/
    private class JsInterface {

        @JavascriptInterface
        public void takePhoto() {
            MyImagePicker.takePhoto(MainActivity.this, 1, false);
        }
    }


    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        switch (resultCode) {
            case ImagePicker.RESULT_CODE_ITEMS:
                if (data != null && requestCode == Constants.REQUEST_CODE_TAKE_PHOTO) {
                    ArrayList<ImageItem> images = (ArrayList<ImageItem>) data.getSerializableExtra(ImagePicker.EXTRA_RESULT_ITEMS);
                    String path = images.get(0).path;
                    /*将图片显示在网页上*/
                    String method = "javascript:displayImg('" + path + "')";
                    webView.loadUrl(method);

                }
                break;
        }
    }
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64

ok,这样就可以了,如果你的网页是从服务器端加载的,那么显示图片的时候会发现图片显示不出来,并且会提示这个错误:
android webview Not allowed to load local resource
解决这个问题请看:http://blog.csdn.net/yuzhiqiang_1993/article/details/76228541


下面是本篇博客的demo
Demo


如果你觉得本文对你有帮助,麻烦动动手指顶一下,算是对本文的一个认可,如果文中有什么错误的地方,还望指正,转载请注明转自喻志强的博客 ,谢谢!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/105040
推荐阅读
相关标签
  

闽ICP备14008679号