当前位置: 首页 > 知识库问答 >
问题:

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

鲍宁
2023-03-14

我正在尝试通过ACTION\u SEND intent将文件上载到webview应用程序。如果他们选择在应用程序中使用openFileChooser上传文件,我已经可以使用它了,但我需要它在他们单击文档或画廊应用程序中的共享时工作。所以,我非常需要绕过openFileChooser,因为已经选择的文件及其Uri在我的意图中,我只需要实际上传它。我想重蹈openFileChooser的覆辙,但不知道如何做到这一点。

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

这是我的意图和openFileChooser,但我需要在收到意图时绕过它,所以我有

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


共有1个答案

卫骏
2023-03-14

正如您问题的第一条评论所说,更多的代码将有助于诊断这一问题,但接收动作发送意图的一般方式如下所示。

在Android清单中为您的活动配置ACTION_SEND作为意图过滤器。

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

您可以选择设置<代码>

然后在您的活动中,可以使用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.
}
 类似资料:
  • 我在API网关中创建了一个API,用于将音频文件上载到s3,该文件作为多部分/表单数据从本地PC发送。 API集成请求如下所示 在URL路径参数中,添加bucket作为param,直接添加bucket名称 当我尝试上载文件时,收到错误响应, 需要做哪些更改?

  • 问题内容: 我可能迟到了CI / CD派对,但总比没有好。到目前为止,我已经能够在不包含XCode的单独MAC上设置Jenkins。我将此MAC用作24x7小型服务器,以进行较小的操作。浪费大量时间进行归档,然后将生成的内容上传到我的iOS应用程序的testflight上,因此我想到了设置CI / CD流程的准备。 设置Jenkins之后,我可以为指定目标(发布/调试)生成.ipa文件。 现在,我

  • 问题内容: 这是我的代码,但这是针对单个文件的解决方案。 我可以像下面的单个文件一样共享多个文件和上载吗? 问题答案: 是的,但是您需要使用而不是。 这绝对可以简化,但我在其中保留了一些内容,以便您可以分解所需的每个步骤。 更新 :从API 24开始,共享文件URI将导致FileUriExposedException。为了解决这个问题,您可以将compileSdkVersion切换为23或更低版本

  • 问题内容: 在过去的几天里,我一直在努力用jQuery和AJAX提交表单。我面临的问题是在表单字段中上传图像。 我的表格是这样的: 我的用于获取表单值的jQuery脚本如下所示: 但是,如果image返回null,则返回除image 1以外的所有字段值。 如何存储在数据数组中? 我要存储,以便可以通过AJAX将值发送到服务器。 问题答案: 对于上传单个图像,像这样 对于多张图片,您将不得不循环不同

  • 任何帮助都很感激。