android - Cordova 应用程序在尝试访问相机时崩溃

标签 android cordova cordova-plugins ngcordova

我有一个 Cordova 应用程序(在 Android 上运行),我已经实现了 Cordova 相机插件,我有一个简单的“单击”事件,该事件调用以下代码,然后弹出消息:

“允许 MyHQAPP 访问您设备上的照片、媒体和文件吗?”

我点击“允许”,应用程序立即关闭?我检查了ADB错误日志,可以看到下面的错误

任何人都可以提出问题是什么 - 请注意我正在使用 ngCordova 插件来实现相机功能 http://ngcordova.com/docs/plugins/camera/

08-07 11:33:19.712 14954 15032 E PluginManager: Uncaught exception from plugin
08-07 11:33:19.712 14954 15032 E PluginManager: android.os.FileUriExposedException: file:///storage/emulated/0/Android/data/com.mytechnologies.myapp_2017/cache/.Pic.jpg exposed beyond app through ClipData.Item.getUri()
08-07 11:33:19.712 14954 15032 E PluginManager:         at android.os.StrictMode.onFileUriExposed(StrictMode.java:1799)
08-07 11:33:19.712 14954 15032 E PluginManager:         at android.net.Uri.checkFileUriExposed(Uri.java:2346)
08-07 11:33:19.712 14954 15032 E PluginManager:         at android.content.ClipData.prepareToLeaveProcess(ClipData.java:845)
08-07 11:33:19.712 14954 15032 E PluginManager:         at android.content.Intent.prepareToLeaveProcess(Intent.java:8941)
08-07 11:33:19.712 14954 15032 E PluginManager:         at android.content.Intent.prepareToLeaveProcess(Intent.java:8926)
08-07 11:33:19.712 14954 15032 E PluginManager:         at android.app.Instrumentation.execStartActivity(Instrumentation.java:1690)
08-07 11:33:19.712 14954 15032 E PluginManager:         at android.app.Activity.startActivityForResult(Activity.java:4291)
08-07 11:33:19.712 14954 15032 E PluginManager:         at org.apache.cordova.CordovaActivity.startActivityForResult(CordovaActivity.java:342)
08-07 11:33:19.712 14954 15032 E PluginManager:         at android.app.Activity.startActivityForResult(Activity.java:4249)
08-07 11:33:19.712 14954 15032 E PluginManager:         at org.apache.cordova.CordovaInterfaceImpl.startActivityForResult(CordovaInterfaceImpl.java:66)
08-07 11:33:19.712 14954 15032 E PluginManager:         at org.apache.cordova.camera.CameraLauncher.takePicture(CameraLauncher.java:259)
08-07 11:33:19.712 14954 15032 E PluginManager:         at org.apache.cordova.camera.CameraLauncher.callTakePicture(CameraLauncher.java:233)
08-07 11:33:19.712 14954 15032 E PluginManager:         at org.apache.cordova.camera.CameraLauncher.execute(CameraLauncher.java:168)
08-07 11:33:19.712 14954 15032 E PluginManager:         at org.apache.cordova.CordovaPlugin.execute(CordovaPlugin.java:98) 
08-07 11:33:19.712 14954 15032 E PluginManager:         at org.apache.cordova.PluginManager.exec(PluginManager.java:132)
08-07 11:33:19.712 14954 15032 E PluginManager:         at org.apache.cordova.CordovaBridge.jsExec(CordovaBridge.java:57)
08-07 11:33:19.712 14954 15032 E PluginManager:         at org.apache.cordova.engine.SystemExposedJsApi.exec(SystemExposedJsApi.java:41)
08-07 11:33:19.712 14954 15032 E PluginManager:         at org.chromium.base.SystemMessageHandler.nativeDoRunLoopOnce(Native Method)
08-07 11:33:19.712 14954 15032 E PluginManager:         at org.chromium.base.SystemMessageHandler.handleMessage(SystemMessageHandler.java:7)
08-07 11:33:19.712 14954 15032 E PluginManager:         at android.os.Handler.dispatchMessage(Handler.java:102)
08-07 11:33:19.712 14954 15032 E PluginManager:         at android.os.Looper.loop(Looper.java:154)
08-07 11:33:19.712 14954 15032 E PluginManager:         at android.os.HandlerThread.run(HandlerThread.java:61)
08-07 11:33:21.836 13427 13427 E SimcardDataModel: provide unsupported slot id 0

在我的 js Controller 中

$scope.uploadFromCamera = function () {
    console.log('Upload from Camera');

    var options = {
        quality: 75,
        destinationType: Camera.DestinationType.DATA_URL,
        sourceType: Camera.PictureSourceType.CAMERA,
        allowEdit: true,
        encodingType: Camera.EncodingType.JPEG,
        targetWidth: 300,
        targetHeight: 300,
        popoverOptions: CameraPopoverOptions,
        saveToPhotoAlbum: false
    };

    $cordovaCamera.getPicture(options).then(function (imageData) {
        $scope.imgURI = "data:image/jpeg;base64," + imageData;
        console.log($scope.imgURI);
        console.log($scope);
    }, function (err) {
        // An error occured. Show a message to the user
    });
}

// Cordova 信息 节点版本:v6.10.3 Cordova 版本:6.0.0

Config.xml 文件:

<?xml version='1.0' encoding='utf-8'?>
<widget id="com.mytechnologies.fakename_2017" versionCode='20002' version="2.0.2" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
  <name>MyAPP</name>
  <description>
    A sample Apache Cordova application that responds to the deviceready event.
  </description>
  <author email="<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="d8bcbdae98bbb7aabcb7aeb9f6b9a8b9bbb0bdf6b7aabf" rel="noreferrer noopener nofollow">[email protected]</a>" href="http://cordova.io">
    Apache Cordova Team
  </author>
  <content src="index.html" />
  <plugin name="cordova-plugin-whitelist" spec="1" />
  <access origin="*" />
  <allow-intent href="http://*/*" />
  <allow-intent href="https://*/*" />
  <allow-intent href="tel:*" />
  <allow-intent href="sms:*" />
  <allow-intent href="mailto:*" />
  <allow-intent href="geo:*" />
  <platform name="android">
    <allow-intent href="market:*" />
  </platform>
  <platform name="ios">
    <allow-intent href="itms:*" />
    <allow-intent href="itms-apps:*" />
  </platform>
  <engine name="android" spec="~5.2.2" />
  <icon src="res/icon.png" />
</widget>

插件:

Cordova 插件相机, Cordova 插件兼容, Cordova 插件白名单

cordova-plugin-camera 2.1.1“相机” cordova-plugin-whitelist 1.3.0“白名单”

最佳答案

尝试将cordova-plugin-camera的版本更改为2.4.1

关于android - Cordova 应用程序在尝试访问相机时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45545141/

相关文章:

java - setPreferencesFromResource 与 addPreferencesFromResource

cordova - 有没有办法混淆整个 Cordova/Phonegap 项目?

ios - 如果应用程序位于 iOS 应用程序的前台,Cordova 插件 Firebase 不会收到推送通知

android - 失去对文本项目输入的关注后, ionic 项目选择在 android 上闪烁

Android viewpager动态添加 fragment

android - 在 AChartEngine 时间图中启用滚动

android - 无法使用 Android Studio 将模块依赖项添加到 Cordova 项目的 CordovaLib

javascript - 从文件 :///to content://(xapk/obb) on Android Cordova 移动内容后 Canvas.toDataURL() 会导致纯黑色

angularjs - 如何在 iOS 中使用 Cordova 文件传输插件下载文件

android - 这个语音识别错误在我的 flutter 应用程序中意味着什么?