Appcelerator的:一个特定视图的文件权限原因被拒绝的消息

问题描述:

TargetSDK 23的分享截图,钛SDK 5.4.0Appcelerator的:一个特定视图的文件权限原因被拒绝的消息

权限设置:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

我拿一个视图的截图通过写它到一个文件。这工作,因为我可以将此文件添加到imageview并查看图像。

var blob = masterView.views[currentSavedPage].toImage(); 
    var file = Titanium.Filesystem.getFile(Titanium.Filesystem.externalStorageDirectory, "myNewImage.jpg"); 
    file.write(blob); 

当我尝试与其他文本共享图像时,其他应用程序(Facebook,WhatsApp,...)无法访问图像。

intent = Ti.Android.createIntent({ 
      action : Ti.Android.ACTION_SEND, 
      type : "image/jpeg" 
     }); 
     intent.putExtra(Ti.Android.EXTRA_TEXT, text); 
     intent.putExtra(Ti.Android.EXTRA_SUBJECT, subject); 
     intent.putExtraUri(Ti.Android.EXTRA_STREAM, file.nativePath); 
     share = Ti.Android.createIntentChooser(intent, 'Bild teilen'); 

我只有一个权限被拒绝为错误,不知道如何解决这个问题。这与较低的SDK版本一起工作。

fb4a.RequestLoggingListener: java.io.FileNotFoundException: /data/user/0/de.myapp.id/app_appdata/myNewImage.jpg: open failed: EACCES (Permission denied) 
ExifInterface: java.io.FileNotFoundException: /data/user/0/de.myapp.id/app_appdata/myNewImage.jpg: open failed: EACCES (Permission denied) 
BitmapFactory: Unable to decode stream: java.io.FileNotFoundException: /data/user/0/de.myapp.id/app_appdata/myNewImage.jpg: open failed: EACCES (Permission denied) 

解决方案:

if (!Ti.Filesystem.hasStoragePermissions()) { 
    Ti.Filesystem.requestStoragePermissions(function(result) { 
    if (result.success) { 
     openShareIntent(); 
    } else { 
     alert('Permissions denied.'); 
    } 
    }); 
} else { 
    openShareIntent(); 
} 

您需要为Android 6.0及更高版本实现运行时权限。由于它没有权限,即使在manifest或tiapp.xml中定义。提供运行时权限并且不应该给出权限错误。

+0

非常感谢 –

如果它不是已经做了:

尝试到您的设置 - >应用程序 - > YourApp; 然后单击权限并授权访问存储。

但是你应该直接从应用程序询问权限。 官方文档的例子很简单:https://developer.android.com/training/permissions/requesting.html

+1

查看https://github.com/appcelerator-developer-relations/appc-sample-ti510/blob/master/app/controllers/permissions.js以获取如何在Titanium中获得这些权限的完整示例。但要测试它,您可以按照上面的建议更改应用程序信息中的设置 – miga