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

时间:2019-03-20 13:19:04

标签: android cordova ionic-framework hybrid-mobile-app ng-file-upload

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

它可以在iOS上运行,但不能在此issue on their Github中报告的Android上运行。

由于存在以下解决方案,因此旧问题已解决:

我该如何解决?根本不发送HTTP请求。


其他信息:

  1. Logs found in LogCat

php artisan route:list 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 }->事实并非如此

  1. 这似乎不是权限问题: 当我使用The error is telling you that the device has no applications installed that are able to handle that particular implicit intent.代替ng-file-upload指令的上传按钮时,(科尔多瓦)Android应用程序正常工作。

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

<input type="file" />
  1. 我将config.xml中的所有内容都列入了cordova的白名单:访问,allow-navigation,allow-intent,CSP。还是没有运气。

  2. 我们无法控制Android代码(除非我们编写自定义插件)。此本地代码是否可以解决问题?

        <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 个答案:

答案 0 :(得分:0)

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

@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,以便我们可以删除补丁。