我正在使用Ionic v1与$cordovaFile和cordova email plugin创建文件,然后将其附加到新电子邮件中。我在任何设备上都有适用于iOS的工作解决方案,但我遇到了Android的一个奇怪问题。
当尝试在Android(dataDirectory等)上附加在任何内部存储位置创建的文件时,我收到“拒绝附件的权限”。但是,当我将文件保存到外部存储时,附件已成功添加。
我已经使用Android外部存储发布了我的应用程序,但不幸的是,当今一些最受欢迎的设备没有外部存储设备。
有谁知道解决方案?我已经考虑过变通方法,例如将文件上传到文件托管服务,并在电子邮件中包含下载链接。我会使用$cordovaFileTransfer,但我不知道内部存储中是否存在权限错误。如果可能的话,我想使用真正的电子邮件附件。谢谢!
答案 0 :(得分:3)
我认为您的问题与许可相关。
我已经为文件附件实现了这个以获得文件附件的权限尝试它希望这对您有所帮助。试试这个插件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);
}
}
答案 1 :(得分:3)
由于问题主要与Permission Issue
有关,因此在尝试我的第二个解决方案之前,请尝试将此密钥包含在config.xml
<preference name="AndroidPersistentFileLocation" value="Compatibility" />
从Source开始说明:
该插件的早期版本会选择该位置 启动时的临时和永久文件,取决于设备 声称SD卡(或等效的存储分区)是 安装。如果安装了SD卡,或者是大型内部存储器 分区是可用的(例如在Nexus设备上)然后是 持久性文件将存储在该空间的根目录中。这意味着 所有Cordova应用程序都可以看到所有可用的文件 卡。
如果SD卡不可用,则以前的版本将存储 / data / data /下的数据,将每个应用程序隔离开来 另外,但仍可能导致用户之间共享数据。
现在可以选择是否在内部存储文件 文件存储位置,或使用先前的逻辑,具有首选项 在应用程序的config.xml文件中。为此,请添加其中一个 config.xml的两行:
<preference name="AndroidPersistentFileLocation" value="Internal" />
<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);
}
因此,您可以通过这种方式发送附件