WebView,输入类型文件,相机和图像

时间:2013-09-02 08:20:40

标签: android image input webview camera

我已经玩了很长时间了......但是我仍然无法找到我的问题的真实答案。 问题是,我需要一种方法让我的用户能够选择从图库或直接从相机上传文件,一旦他们按下type =“file”的输入元素。 所以,如果有任何好的样本,那么请告诉我,如果你有一个我可以看一下的样本。

提前致谢!

2 个答案:

答案 0 :(得分:1)

public void attachFileInput() {

    Intent i = new Intent(Intent.ACTION_GET_CONTENT);
    i.addCategory(Intent.CATEGORY_OPENABLE);
    i.setType("image/*");
    ((Activity) mContext).startActivityForResult(
                Intent.createChooser(i, "Image Choser"), 1);
}

此方法将在您的JSInterface中。 请按以下方式调用:

$(".file").live('click', function() {
    mySJInterface.attachFileInput();
});

希望这有帮助。

答案 1 :(得分:1)

我正在使用带有android webview的输入标签创建一个上传文件的程序。顺便说一句,我不是一个Android应用程序程序员。

请查看以下参考资料:Android webview, openfilechooser terminationhttp://www.cnblogs.com/sipher/archive/2012/09/05/2672361.html

步骤:

  1. 使用输入文件请求制作菜单以捕捉照片 - Android webview, openfilechooser termination

  2. 但是图片未发送到服务器并修改了imageUri值Environment.getExternalStoragePublicDirectory,如此处所示 - http://www.cnblogs.com/sipher/archive/2012/09/05/2672361.html

  3. 所以我需要在Manifest中添加权限WRITE_EXTERNAL_STORAGE。

    webView.setWebChromeClient(new WebChromeClient(){
        @SuppressWarnings("unused")
        public void openFileChooser(ValueCallback<Uri> uploadMsg){
            this.openFileChooser(uploadMsg, "");
        }
    @SuppressWarnings("unused")
    public void openFileChooser(ValueCallback<Uri> uploadMsg, String AcceptType, String capture) {
        this.openFileChooser(uploadMsg, "");
    }
    
    @SuppressWarnings("unused")
    public void openFileChooser(ValueCallback<Uri> uploadMsg, String AcceptType) {
        final List<Intent> cameraIntents = new ArrayList<Intent>();
        final Intent captureIntent = 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";
        imageUri = Uri.fromFile(new File(mCameraFilePath));
    
    final PackageManager packageManager = getPackageManager();
    final List<ResolveInfo> listCam = packageManager.queryIntentActivities(captureIntent, 0);
    for(ResolveInfo res : listCam) {
        final String packageName = res.activityInfo.packageName;
        final Intent intent = new Intent(captureIntent);
        intent.setComponent(new ComponentName(res.activityInfo.packageName, res.activityInfo.name));
        intent.setPackage(packageName);
        intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
        cameraIntents.add(intent);
        }
    
    mUploadMessage = uploadMsg;
    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, cameraIntents.toArray(new Parcelable[]{}));
    MainActivity.this.startActivityForResult(chooserIntent, FILECHOOSER_RESULTCODE);
    }
    });
    webView.getSettings().setDomStorageEnabled(true);
    webView.loadUrl("..............");
    webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
    webView.setWebViewClient(new WebViewClientClass());}
    
  4. 现在。我可以上传带有输入标签的相机拍摄的照片。

    更新:You can look for alternate methods to solve the same issue