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

android4.3 webview 实现读取本地照片和摄像机功能

2016-03-14 12:29 393 查看
这几天琢磨了安卓webview。 网上有很多简单的实例,但是当我想读取本地照片时,webview居然没有反应。

但是,最终在google找到了代码。

import android.support.v7.app.ActionBarActivity;

import java.io.File;

import java.util.ArrayList;

import java.util.List;

import android.annotation.SuppressLint;

import android.annotation.TargetApi;

import android.app.Activity;

import android.app.ActionBar;

import android.app.Fragment;

import android.content.ComponentName;

import android.content.Intent;

import android.content.pm.PackageManager;

import android.content.pm.ResolveInfo;

import android.net.Uri;

import android.os.Bundle;

import android.os.Environment;

import android.os.Parcelable;

import android.provider.MediaStore;

import android.util.Log;

import android.view.LayoutInflater;

import android.view.Menu;

import android.view.MenuItem;

import android.view.View;

import android.view.ViewGroup;

import android.os.Build;

import android.webkit.ConsoleMessage;

import android.webkit.CookieManager;

import android.webkit.ValueCallback;

import android.webkit.WebChromeClient;

import android.webkit.WebSettings;

import android.webkit.WebView;

import android.webkit.WebViewClient;

import android.widget.Toast;

public class MainActivity extends Activity {

private WebView webView;

private String urlStart = "http://ir.sejong.ac.kr/cbir/index.html";

//File choser parameters

private static final int FILECHOOSER_RESULTCODE   = 2888;

private ValueCallback<Uri> mUploadMessage;

//Camera parameters

    private Uri mCapturedImageURI = null;

@SuppressLint("SetJavaScriptEnabled")

@Override

protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    webView = (WebView) findViewById(R.id.webView1);

    webView.getSettings().setJavaScriptEnabled(true);

    webView.getSettings().setLoadWithOverviewMode(true);

    webView.getSettings().setAllowFileAccess(true);

    webView.loadUrl(urlStart);

    webView.setWebChromeClient(new WebChromeClient() {

        // openFileChooser for Android 3.0+

        public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType) { 

            mUploadMessage = uploadMsg;

            try{

                Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

                File externalDataDir = Environment.getExternalStoragePublicDirectory(

                          Environment.DIRECTORY_DCIM);

                File cameraDataDir = new File(externalDataDir.getAbsolutePath() +

                          File.separator + "browser-photos");

                cameraDataDir.mkdirs();

                String mCameraFilePath = cameraDataDir.getAbsolutePath() + File.separator +

                          System.currentTimeMillis() + ".jpg";

                mCapturedImageURI = Uri.fromFile(new File(mCameraFilePath));

                cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, mCapturedImageURI);

                Intent i = new Intent(Intent.ACTION_GET_CONTENT); 

                i.addCategory(Intent.CATEGORY_OPENABLE);

                i.setType("image/*");

                Intent chooserIntent = Intent.createChooser(i, "Image Chooser");

                chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, new Parcelable[] { cameraIntent });

                startActivityForResult(chooserIntent, FILECHOOSER_RESULTCODE);

              }

             catch(Exception e){

                 Toast.makeText(getBaseContext(), "Camera Exception:"+e, Toast.LENGTH_LONG).show();

             }

           }

        // For Android < 3.0

       @SuppressWarnings("unused")

    public void openFileChooser(ValueCallback<Uri> uploadMsg ) {

               openFileChooser(uploadMsg, "");

           }

    // For Android  > 4.1.1

        @SuppressWarnings("unused")

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

               openFileChooser(uploadMsg, acceptType);

           }

           public boolean onConsoleMessage(ConsoleMessage cm) {        

               onConsoleMessage(cm.message(), cm.lineNumber(), cm.sourceId());

               return true;

           }

           public void onConsoleMessage(String message, int lineNumber, String sourceID) {

               Log.d("androidruntime", "www.example.com: " + message);

             }

    });

}

@Override

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

    // TODO Auto-generated method stub

    if(requestCode==FILECHOOSER_RESULTCODE)  

     {  

            if (null == this.mUploadMessage) {

                return;

            }

           Uri result=null;

           try{

                if (resultCode != RESULT_OK) {

                    result = null;

                } else {

                    // retrieve from the private variable if the intent is null

                    result = intent == null ? mCapturedImageURI : intent.getData(); 

                } 

            }

            catch(Exception e)

            {

                Toast.makeText(getApplicationContext(), "activity :"+e, Toast.LENGTH_LONG).show();

            }

            mUploadMessage.onReceiveValue(result);

            mUploadMessage = null;

     }

}

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