如何通过ACTION_SEND意图将文件上传到webview

时间:2015-04-08 00:07:40

标签: android android-intent webview

我正在尝试通过ACTION_SEND意图将文件上传到webview应用。如果他们选择在应用程序内部使用openFileChooser上传文件,我已经有了它的工作,但是当他们点击文件或图库应用程序中的共享时我需要它才能工作。所以,我非常需要BYPASS openFileChooser,因为已经选择了一个文件并且它的Uri在我的Intent中,我只需要实际上传它。我想躲开openFileChooser的方式,但我不知道该怎么做。

我认为我最大的障碍是不知道如何获取/创建/忽略ValueCallback uploadMsg,除非当然有一种方法可以完全避免这种情况。

这是我的意图和openFileChooser,但我需要BYPASS收到意图,所以我有

intent = getActivity().getIntent();
    if(intent != null){
        intentAction = intent.getAction();
        if(!TextUtils.isEmpty(intentAction)){
            if(intentAction.equalsIgnoreCase(Intent.ACTION_SEND)){
                if(intent.getExtras()!=null){
                   //get file from extra and piggyback off upload handler used in openFileChooser
                }
            }
        }

和我的openFileChooser工作正常,有用户输入,但我需要能够在收到意图时没有用户输入这样做

WebChromeClient chromeClient = new WebChromeClient() {
        @Override
        public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType,
                                    String capture) {
                mUploadHandler = new UploadHandler(WebFragment.this);
                mUploadHandler.openFileChooser(uploadMsg, acceptType, capture);
        }

所以我需要以某种方式获得一个有效的ValueCallback Uri来设置为用于创建openFileChooser的上传消息,这样当我在这里执行mUploadMessage.onReceiveValue(结果)(取自google的webkit包)时

void onResult(int resultCode, Intent intent) {

    if (resultCode == Activity.RESULT_CANCELED && mCaughtActivityNotFoundException) {
        mCaughtActivityNotFoundException = false;
        return;
    }

    Uri result = intent == null || resultCode != Activity.RESULT_OK ? null
            : intent.getData();
    if (result == null && intent == null && resultCode == Activity.RESULT_OK) {
        File cameraFile = new File(mCameraFilePath);
        if (cameraFile.exists()) {
            result = Uri.fromFile(cameraFile);
            mController.getActivity().sendBroadcast(
                    new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, result));
        }
    }

    mUploadMessage.onReceiveValue(result);
    mHandled = true;
    mCaughtActivityNotFoundException = false;
}

所以,长话短说,我需要一个有效的ValueCallback<Uri>,以便捎带Android / webkit的onReceiveValue(结果)/ WebView的上传处理程序,我不知道如何无需用户输入即可从设备上打开上传。

1 个答案:

答案 0 :(得分:0)

正如您对问题的第一条评论所说,更多代码可以帮助诊断这一点,但接收ACTION_SEND意图的一般方法如下:

在您的活动的Android Manifest中将ACTION_SEND配置为Intent Filter

<application>
...
    <activity>
    ...
    <intent-filter>
        <action android:name="android.intent.action.SEND" />    
        <category android:name="android.intent.category.DEFAULT" />   
    </intent-filter>

如果您只想接受某些类型的文件,可以选择设置多个<data android:mimeType=XXX>元素。

然后在您的活动中,您可以使用getIntent()Intent.getData()方法来处理传入的发送意图。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Intent intent = getIntent();
    Uri sharedFile = intent.getData();
    // We can now use the URI of the file / item in
    // the WebView. Probably want to do this after onCreate
    // so that the WebView has fully initialised.
}