Android - 从相机上传工作在webview中,但从图库上传不

时间:2014-11-03 16:46:41

标签: android webview upload gallery

我已经对这个主题进行了大量搜索,直到大约30分钟前我才能在应用程序中打开文件选择器或相机。

现在,我可以在点击上传按钮时打开它们。相机上传工作,所以我拍照,保存,并将其添加到我的应用程序队列中进行上传。

问题是当从图库中选择文件时,它不会被添加到应用程序队列以进行上载。有人可以帮忙吗?

更新:我也注意到了。我可以选择我用相机拍摄的照片,然后从文件管理器/库中重新上载。它不会让我从filemanager / gallery上传任何我没带相机的东西。

这是我的MainActivity代码:

public class MainActivity extends Activity
{

private WebView webView;
private String urlStart = "http://www.xxxxx.com/";

//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.webView);

    webView.getSettings().setJavaScriptEnabled(true);
    webView.getSettings().setLoadWithOverviewMode(true);
    webView.setWebViewClient(new MyAppWebViewClient());
    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.xxxxxx.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;

    }
}}

0 个答案:

没有答案