2017-07-19 4 views
0

TargetSDK 23, Titanium SDK 5.4.0Appcelerator: Share Screenshot von einer bestimmten Ansicht als Datei Ursache Zugriff verweigert Nachricht

Berechtigungen gesetzt:

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

Ich nehme einen Screenshot einer Ansicht durch das Schreiben zu einer Datei. Das hat funktioniert, weil ich diese Datei zu einer Bildansicht hinzufügen und das Bild sehen kann.

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

Als ich versuche, das Bild mit zusätzlichem Text zu teilen, das andere App (Facebook, WhatsApp, ...) kann das Bild nicht zugreifen.

Ich habe nur eine Berechtigung als Fehler verweigert und weiß nicht, wie das zu beheben ist. Dies funktionierte mit einer niedrigeren SDK-Version.

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) 

Lösung:

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

Antwort

1

Sie müssen Laufzeitberechtigungen für Android 6.0 und höher implementieren. Da es die Berechtigung nicht besitzt, obwohl sie im Manifest oder in tiapp.xml definiert ist. Stellen Sie eine Laufzeitberechtigung bereit und es sollten keine Berechtigungsfehler auftreten.

+0

Vielen Dank –

1

Wenn es nicht bereits getan:

Versuchen Sie, Ihre Einstellungen-> Anwendungen-> YourApp zu gehen; Klicken Sie dann auf die Berechtigung und autorisieren Sie den Zugriff auf den Speicher.

Aber Sie sollten die Erlaubnis direkt von der App fragen. Das Beispiel des offiziellen Dokuments ist einfach: https://developer.android.com/training/permissions/requesting.html

+1

In https://github.com/appcelerator-developer-relations/appc-sample-ti510/blob/master/app/controllers/permissions.js finden Sie ein vollständiges Beispiel, wie Sie diese Berechtigung in Titanium erhalten . Aber um es zu testen, können Sie die Einstellungen in der App wie oben empfohlen ändern – miga

Verwandte Themen