2017-07-19 39 views
0

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(); 
} 

回答

1

您需要爲Android 6.0及更高版本實現運行時權限。由於它沒有權限,即使在manifest或tiapp.xml中定義。提供運行時權限並且不應該給出權限錯誤。

+0

非常感謝 –

1

如果它不是已經做了:

嘗試到您的設置 - >應用程序 - > 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