在Cordova项目中,文件上传不适用于Android

问题描述 投票:0回答:1

在我的Cordova项目中,我依赖于第三方依赖,它使用ng-file-upload来上传文件。

它适用于iOS,但不适用于Android,如本issue on their Github所述。

旧问题已经关闭,因为可以使用以下解决方案:

我怎么解决这个问题?根本不发送HTTP请求。

附加信息:

  1. Logs found in LogCat

No activity found to handle file chooser intent.: android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.GET_CONTENT cat= [android.intent.category.OPENABLE] typ=.jpg,.png,.tiff,.jpeg,.tif,.pdf }

日志的解释:The error is telling you that the device has no applications installed that are able to handle that particular implicit intent. - >但事实并非如此

  1. 它似乎不是权限问题:(Cordova)Android应用程序在上传按钮时使用<input type="file" />代替ng-file-upload指令。

(我们已经提供了所有必需的权限:)

        <custom-config-file parent="/*" target="AndroidManifest.xml">
            <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
            <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
            <uses-permission android:name="android.permission.MANAGE_DOCUMENTS" />
            <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
        </custom-config-file>
  1. 我在config.xml中为cordova列出了所有内容:access,allow-navigation,allow-intent,CSP。仍然没有运气。
  2. 我们无法控制Android代码(除非我们编写自定义插件)。这个本机代码会解决这个问题吗?
MyWebviewSettings.setJavaScriptCanOpenWindowsAutomatically(true);
MyWebviewSettings.setJavaScriptEnabled(true);

myWebView.getSettings().setJavaScriptEnabled(true);
myWebView.getSettings().setAllowFileAccessFromFileURLs(true);
myWebView.getSettings().setAllowUniversalAccessFromFileURLs(true);
android cordova ionic-framework hybrid-mobile-app ng-file-upload
1个回答
0
投票

我们解决了这个错误,在下面添加了Lollipop(和更高版本)处理程序中缺少的2行代码。

@TargetApi(Build.VERSION_CODES.LOLLIPOP)
@Override
public boolean onShowFileChooser(WebView webView, final ValueCallback<Uri[]> filePathsCallback, final WebChromeClient.FileChooserParams fileChooserParams) {
    Intent intent = fileChooserParams.createIntent();
    // FIX HERE vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv @@
    intent.addCategory(Intent.CATEGORY_OPENABLE); 
    intent.setType("*/*");
    // FIX HERE ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@

您的cordova项目中的此处理程序位于:src/org/apache/cordova/engine/SystemWebChromeClient.java

希望cordova-android的贡献者将自己修复这个reported issue,以便我们可以删除我们的补丁。

© www.soinside.com 2019 - 2024. All rights reserved.