android webview 图片居中,Android WebView 图片选择

Android WebView 图片选择

最近需要做webview选择图片,就找了一些资料,记录一下。

本文参考:Android使用WebView从相册/拍照中添加图片

自定义WebChromeClient

import android.net.Uri;

import android.webkit.ValueCallback;

import android.webkit.WebChromeClient;

import android.webkit.WebView;

/**

* WebView 上传文件

*/

public class ReWebChomeClient extends WebChromeClient {

private OpenFileChooserCallBack mOpenFileChooserCallBack;

public ReWebChomeClient(OpenFileChooserCallBack openFileChooserCallBack) {

mOpenFileChooserCallBack = openFileChooserCallBack;

}

//For Android 3.0+

public void openFileChooser(ValueCallback uploadMsg, String acceptType) {

mOpenFileChooserCallBack.openFileChooserCallBack(uploadMsg, acceptType);

}

// For Android < 3.0

public void openFileChooser(ValueCallback uploadMsg) {

openFileChooser(uploadMsg, "");

}

// For Android > 4.1.1

public void openFileChooser(ValueCallback uploadMsg, String acceptType, String capture) {

openFileChooser(uploadMsg, acceptType);

}

// For Android 5.0+

@Override

public boolean onShowFileChooser(WebView webView, ValueCallback filePathCallback, FileChooserParams fileChooserParams) {

mOpenFileChooserCallBack.showFileChooserCallBack(filePathCallback);

return true;

}

public interface OpenFileChooserCallBack {

void openFileChooserCallBack(ValueCallback uploadMsg, String acceptType);

void showFileChooserCallBack(ValueCallback filePathCallback);

}

}

使用ReWebChomeClient

//定义变量

private ValueCallback uploadMessage;

private ValueCallback uploadMessageAboveL;

//用来判断是否需要给WebView返回null

private int web_image = 0;

private String picFilePath;//图片保存路径

private int IDENTITY_IMAGE_REQUEST_CODE_Album = 1;//相册

private int IDENTITY_IMAGE_REQUEST_CODE_Photograph = 2;// 拍照

private int FILE_CHOOSER_RESULT_CODE = 3;//图片选择

...

//设置WebChromeClient

mWebView.setWebChromeClient(mWebChromeClient);

...

private ReWebChomeClient mWebChromeClient = new ReWebChomeClient(new ReWebChomeClient.OpenFileChooserCallBack() {

@Override

public void openFileChooserCallBack(ValueCallback uploadMsg, String acceptType) {//Android >=3.0

uploadMessage = uploadMsg;

openImageChooserActivity();

}

@Override

public void showFileChooserCallBack(ValueCallback filePathCallback) {// Android >= 5.0

uploadMessageAboveL = filePathCallback;

openImageChooserActivity();

}

});

选择图片

private void openImageChooserActivity() {

web_image = 0;//判断是否已经选择了

//自定义选择图片提示框

AlertDialog dialog = new AlertDialog.Builder(mContext).setItems(R.array.head_type_array, (dialog1, which) -> {

//如果点击了dialog的选项,修改变量,不要在setOnDismissListener()方法中

web_image = 1;

selected(which);

}).create();

dialog.show();

dialog.setOnDismissListener(dialog12 -> {

if (web_image == 0) {

getImageWebView(null);

}

});

}

public void selected(int position) {

switch (position) {

case 0://相册

getPermissionsStorage();

break;

case 1:// 拍照

getPermissionsCamera();

break;

case 2://选择图片

Intent i = new Intent(Intent.ACTION_GET_CONTENT);

i.addCategory(Intent.CATEGORY_OPENABLE);

i.setType("image/*");

startActivityForResult(Intent.createChooser(i, "Image Chooser"), FILE_CHOOSER_RESULT_CODE);

break;

}

@Override

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

super.onActivityResult(requestCode, resultCode, data);

if (requestCode == IDENTITY_IMAGE_REQUEST_CODE_Photograph) {//拍照

if (resultCode == Activity.RESULT_OK) {

// 添加图片

if (picFilePath == null) {

picFilePath = Datas.picPathSD + BitmapUtil.pictime;

}

getImageWebView(picFilePath);

} else {

// 删除图片

BitmapUtil.deleteTempFile(picFilePath);

getImageWebView(null);

}

} else if (requestCode == IDENTITY_IMAGE_REQUEST_CODE_Album) {//相册

if (resultCode == 1020) {

String str_images = StringUtils.null2Length0(data.getStringExtra("images"));

getImageWebView(str_images);

} else {

getImageWebView(null);

}

} else if (requestCode == FILE_CHOOSER_RESULT_CODE) {//选择图片

if (null == uploadMessage && null == uploadMessageAboveL) {

return;

}

Uri result = data == null || resultCode != RESULT_OK ? null : data.getData();

if (uploadMessageAboveL != null) {

onActivityResultAboveL(requestCode, resultCode, data);

} else if (uploadMessage != null) {

uploadMessage.onReceiveValue(result);

}

}

}

private void getImageWebView(String str_image) {//将图片路径返回给webview

if (!StringUtils.isEmpty(str_image)) {

Uri uri = getImageContentUri(mContext, new File(str_image));

if (uploadMessageAboveL != null) {

Uri[] uris = new Uri[]{uri};

uploadMessageAboveL.onReceiveValue(uris);

uploadMessageAboveL = null;

} else if (uploadMessage != null) {

uploadMessage.onReceiveValue(uri);

uploadMessage = null;

}

} else {

if (uploadMessageAboveL != null) {

uploadMessageAboveL.onReceiveValue(null);

uploadMessageAboveL = null;

} else if (uploadMessage != null) {

uploadMessage.onReceiveValue(null);

uploadMessage = null;

}

}

}

//选择图片

@TargetApi(Build.VERSION_CODES.LOLLIPOP)

private void onActivityResultAboveL(int requestCode, int resultCode, Intent intent) {

if (uploadMessageAboveL == null) {

return;

}

Uri[] results = null;

if (resultCode == Activity.RESULT_OK) {

if (intent != null) {

String dataString = intent.getDataString();

LogUtils.e("web", dataString);

ClipData clipData = intent.getClipData();

if (clipData != null) {

results = new Uri[clipData.getItemCount()];

for (int i = 0; i < clipData.getItemCount(); i++) {

ClipData.Item item = clipData.getItemAt(i);

results[i] = item.getUri();

}

}

if (dataString != null) {

results = new Uri[]{Uri.parse(dataString)};

}

}

}

uploadMessageAboveL.onReceiveValue(results);

}

@Override

protected void onDestroy() {

super.onDestroy();

uploadMessage = null;

uploadMessageAboveL = null;

}

//将文件File转成Uri

public Uri getImageContentUri(Context context, File imageFile) {

String filePath = imageFile.getAbsolutePath();

Cursor cursor = context.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,

new String[]{MediaStore.Images.Media._ID}, MediaStore.Images.Media.DATA + "=? ",

new String[]{filePath}, null);

if (cursor != null && cursor.moveToFirst()) {

int id = cursor.getInt(cursor.getColumnIndex(MediaStore.MediaColumns._ID));

Uri baseUri = Uri.parse("content://media/external/images/media");

return Uri.withAppendedPath(baseUri, "" + id);

} else {

if (imageFile.exists()) {

ContentValues values = new ContentValues();

values.put(MediaStore.Images.Media.DATA, filePath);

return context.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);

} else {

return null;

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值