您的位置:首页 > 移动开发

如何实现webview上传图片

2016-04-15 11:18 274 查看
//主界面

package com.example.webview_js;

import java.io.File;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.ActivityNotFoundException;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.util.Log;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnKeyListener;
import android.webkit.ConsoleMessage;
import android.webkit.ValueCallback;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ProgressBar;
import android.widget.Toast;

@SuppressLint("SetJavaScriptEnabled")
public class MainActivity extends Activity {
protected static final int FILECHOOSER_RESULTCODE = 1;
//定义控件
private WebView mWebView;
private ProgressBar mProgressBar;
//定义接口
private Uri imageUri;
public ValueCallback<Uri> mUploadMessage;
public final static int REQ_CHOOSER = 1;
private final static int REQ_CAMERA = 2;

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

final String url = "http://101.200.142.201/Login/index?redirect_uri=http%3A%2F%2F101.200.142.201%2F";
mWebView=(WebView) findViewById(R.id.mywebview);
mProgressBar=(ProgressBar) findViewById(R.id.my_progresss);
mWebView.loadUrl(url);

WebSettings webSettings = mWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setDefaultTextEncodingName("utf-8");
mWebView.setWebViewClient(new MyWebViewClient());

mWebView.getSettings().setJavaScriptEnabled(true);
//设置webview视图
mWebView.setWebChromeClient(new WebChromeClient() {
@Override
public void onProgressChanged(WebView view, int progress) {
mProgressBar.setVisibility(View.VISIBLE);
mProgressBar.setProgress(progress);
if (progress >= 80) {
mProgressBar.setVisibility(View.GONE);
}
}
// For Android 3.0-
@SuppressWarnings("unused")
public void openFileChooser(ValueCallback<Uri> uploadMsg) {
openFileChooser(uploadMsg,"");

}
@SuppressWarnings("unused")
public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType) {
//选择图片
openFileChooser(uploadMsg,acceptType);
}
// For Android 4.1
@SuppressWarnings("unused")
public void openFileChooser( ValueCallback<Uri> uploadMsg, String acceptType, String capture) {
mUploadMessage=uploadMsg;
selectImage();
}
});
}

public class MyWebViewClient extends WebViewClient{
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// TODO Auto-generated method stub
mWebView.loadUrl(url);
return true;
}

}

/**
*
* 弹出框,,选择图片
*/
protected final void selectImage() {
AlertDialog.Builder builder = new Builder(MainActivity.this);
builder.setOnCancelListener(new ReOnCancelListener());
final String[] items = { "照相机", "相册" };
builder.setItems(items, new DialogInterface.OnClickListener() {

@SuppressLint("SdCardPath")
public void onClick(DialogInterface dialog, int which) {
Intent intent = null;
switch (which) {
case 0:
Toast.makeText(getApplicationContext(), items[0],
Toast.LENGTH_SHORT).show();
intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
// 必须确保文件夹路径存在,否则拍照后无法完成回调
File vFile = new File(Environment
.getExternalStorageDirectory().getPath()
+ "/DCIM/Camera/"
+ (System.currentTimeMillis() + ".jpg"));
if (!vFile.exists()) {
File vDirPath = vFile.getParentFile();
vDirPath.mkdirs();
} else {
if (vFile.exists()) {
vFile.delete();
}
}
//或得图片的url
imageUri = Uri.fromFile(vFile);
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
MainActivity.this
.startActivityForResult(intent, REQ_CAMERA);
break;
case 1:
Toast.makeText(getApplicationContext(), items[1],
Toast.LENGTH_SHORT).show();
intent = new Intent(Intent.ACTION_PICK, null);

intent.setDataAndType(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
"image/*");
/*// 裁切图片
intent.putExtra("crop", "true");
// 裁切的宽高比率
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
// 设置输出的图片大小
intent.putExtra("outputX", 200);
intent.putExtra("outputY", 200);
intent.putExtra("return-data", true);*/
MainActivity.this.startActivityForResult(
Intent.createChooser(intent, "选择图片"), REQ_CHOOSER);
break;
}
}
});
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
builder.create().show();
}

//(这里的意思是取消弹框之后要告诉WebView不要再等待返回结果,设置为空就等于重置了状态)
private class ReOnCancelListener implements
DialogInterface.OnCancelListener {

@Override
public void onCancel(DialogInterface dialogInterface) {
if (mUploadMessage != null) {
mUploadMessage.onReceiveValue(null);
mUploadMessage = null;
}
}
}

//回调方法
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
switch (requestCode) {
//相册
case REQ_CHOOSER:
if (resultCode == Activity.RESULT_OK) {
if (null == mUploadMessage)
return;
Uri result = data == null || resultCode != RESULT_OK ? null : data
.getData();
mUploadMessage.onReceiveValue(result);
mUploadMessage = null;
}else{
mUploadMessage.onReceiveValue(null);
mUploadMessage = null;
}
break;
//相机
case REQ_CAMERA:
if (resultCode == Activity.RESULT_OK) {
mUploadMessage.onReceiveValue(imageUri);
mUploadMessage = null;
}else{
mUploadMessage.onReceiveValue(null);
mUploadMessage = null;
}
break;
}
super.onActivityResult(requestCode, resultCode, data);
}

// 此按键监听的是返回键,能够返回到上一个网页(通过网页的hostlistery)
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {
mWebView.goBack();
return true;
}
return super.onKeyDown(keyCode, event);
}
}


//布局文件

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.webview_js.MainActivity" >

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

<ProgressBar
android:id="@+id/my_progresss"
style="?android:attr/progressBarStyleLarge"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="36dp" />

</RelativeLayout>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: