【问题标题】:Ionic Android Internal Shared MemoryIonic Android 内部共享内存
【发布时间】:2018-02-15 08:23:26
【问题描述】:

我将Ionic v1$cordovaFilecordova email plugin 一起使用来创建文件,然后将其附加到新电子邮件中。我在任何设备上都有适用于 iOS 的有效解决方案,但我在 Android 上遇到了一个奇怪的问题。

当尝试附加在 Android 上的任何内部存储位置(dataDirectory 等)中创建的文件时,我收到“附件权限被拒绝”。但是,当我将文件保存到外部存储时,附件已成功添加。

我已使用 Android 外部存储发布了我的应用程序,但遗憾的是,当今一些最流行的设备没有外部存储。

有人知道解决办法吗?我已经考虑过解决方法,例如将文件上传到文件托管服务,并在电子邮件中包含下载链接。我会使用$cordovaFileTransfer,但我不知道内部存储是否会出现权限错误。如果可能,我想使用真正的电子邮件附件。谢谢!

【问题讨论】:

  • 尝试添加cordova plugin file插件,它的作用是创建一个目录并能够选择文件,所以尝试使用这个保存您的电子邮件txt文件。请分享您的代码如何生成和发送电子邮件
  • 检查这个问题,Here 只能访问内部存储。
  • 检查这个问题。 Here 只能访问内部存储。

标签: android ionic-framework cordova-plugins ionic-native


【解决方案1】:

我认为您的问题与权限有关。 我已经为文件附件实现了此功能,以授予文件附件权限,请尝试希望这对您有所帮助。试试这个插件cordova.plugins.permissions

 function checkPermission() {
            var permissions = cordova.plugins.permissions;
            permissions.hasPermission(permissions.READ_EXTERNAL_STORAGE, checkPermissionCallback, null);
        }

function checkPermissionCallback(status) {
            $localStorage.StoragePermission = status.hasPermission;
            if (!status.hasPermission) {
                var permissions = cordova.plugins.permissions;
                permissions.requestPermission(permissions.READ_EXTERNAL_STORAGE, null, null);                
            }
        }

【讨论】:

    【解决方案2】:

    由于问题主要与 Permission Issue 有关,在尝试我的第二个解决方案之前,请尝试将此密钥包含在您的 config.xml

    <preference name="AndroidPersistentFileLocation" value="Compatibility" />
    

    Source 声明:

    以前版本的插件会选择 启动时的临时文件和持久文件,取决于设备是否 声称 SD 卡(或等效的存储分区)是 安装。如果安装了 SD 卡,或者如果有大型内部存储器 分区可用(例如在 Nexus 设备上),然后 持久文件将存储在该空间的根目录中。这意味着 所有 Cordova 应用程序都可以看到所有可用的文件 卡。

    如果 SD 卡不可用,则之前的版本将存储 /data/data/ 下的数据,它将应用程序与每个应用程序隔离开来 其他,但仍可能导致用户之间共享数据。

    现在可以选择是否将文件存储在内部 文件存储位置,或者使用前面的逻辑,有偏好 在应用程序的 config.xml 文件中。为此,请添加其中之一 config.xml 的两行:

    &lt;preference name="AndroidPersistentFileLocation" value="Internal" /&gt;

    <preference name="AndroidPersistentFileLocation" value="Compatibility" />

    解决方案 2:

    您可以在base64 中发送文件内容,尝试在您的ionic-app 中集成angular-base64 并尝试以base64 格式发送电子邮件,示例代码如下:

    $scope.tosendEmail= function(subject, message, file_content){
        var file = null;
        if(file_content != undefined){
            file = "base64:contact.vcf//"+$base64.encode(file_content);
        }
    
        var email_obj = {
          subject: subject,
          body: message,
          isHtml:false,
          attachments:file
        };
    
        cordova.plugins.email.open(email_obj);
    }
    

    这样就可以发送附件了

    【讨论】:

    • 我无法测试这个问题收到的任何一个解决方案,因为我不在我的开发计算机上,但我会用赏金奖励这个解决方案。它提供了一个额外的解决方案,以防权限更新不起作用。一旦我可以测试,我会支持这两种解决方案(包括 Pritish)并标记正确答案。
    猜你喜欢
    • 2011-10-27
    • 1970-01-01
    • 1970-01-01
    • 2014-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-27
    • 2010-11-25
    相关资源
    最近更新 更多