Android 6.0 Berechtigungen und Montage OBB
Ich habe ein problem mit den Berechtigungen auf Android 6.0 und höher.
Dem Spiel ich bin auf die WRITE_EXTERNAL_STORAGE-Berechtigung. Auf Android 6.0 und höher die Warnung, die fragt, einem Benutzer zu erlauben, es musste angezeigt werden.
Habe ich eine Anfrage bekommen, um loszuwerden, diese Warnung, was bedeutet, das Spiel nicht verwenden können WRITE_EXTERNAL_STORAGE mehr.
Technisch ist das Spiel nicht Lesen und schreiben des externen Speichers und überall sofort. Alle speichert und die Cache-Dateien sind gespeichert in der Anwendung-spezifischen Verzeichnis (/storage/emulated/0/Android/data/com.Unternehmen.Artikelname)
Aber, das Spiel hat zu Lesen (und manchmal auch download) die OBB-Datei gespeichert, die in /storage/emulated/0/Android/obb/com.Unternehmen.Artikelname Verzeichnis.
Das Spiel verfügt über einen Zugang zu diesem Verzeichnis, auch ohne WRITE_EXTERNAL_STORAGE oder READ_EXTERNAL_STORAGE auf Geräte:
- Motorola Nexus 6
- LG Nexus 5
Aber es scheint Sie nicht haben, na die Zugriff auf dieses Verzeichnis auf:
- Samsung Galaxy S5, S6 und S7
- Nvidia Shield tablet
Hab ich überprüft es auch die Alpha-Tests, um zu simulieren, downloaden das Spiel aus dem store.
Wenn die Berechtigung zur Speicherung gegeben ist (über App-Einstellungen), dann läuft alles einwandfrei.
Wie die OBB ist montiert?
Die Unreal Engine 4, die ich verwende, ist die Verwendung der C-open () - Funktion behandeln Sie die OBB Datei:
int32 Handle = open(LocalPath, O_RDONLY);
Wo LocalPath ist der komplette Pfad zu der obb Datei: /storage/emulated/0/Android/obb/com.Unternehmen.Artikelname/main.10003.com.Unternehmen.productname.obb
Die Fragen:
- Macht das Spiel benötigen Sie eine LESE - /SCHREIB _EXTERNAL_STORAGE, um zu Lesen und herunterzuladen OBB Datei?
- Wenn ja, wie kann ich möglicherweise loszuwerden, die Warnung, die fragt den Benutzer nach Berechtigungen.
- Wenn Nein, warum dann Samsung Galaxy S-Serie solche Probleme?
received a request to get rid of this alert
. Dumme Anfrage. Sagen Sie Ihnen! Lassen Sie Sie gehen Sie zu Einstellungen Ihrer app zu swich die Erlaubnis auf.- Wie sind Sie mit der Montage auf der OBB. und was sind Sie vorbei UE4 als
LocalPath
? - Auch, welche version(en) von Android ausgeführt werden, auf diesen verschiedenen Geräten?
- All diesen Geräten läuft auf Android 6.0.1. Der "LocalPath" ist ein const char*, der auf /storage/emulated/0/Android/obb/com.Unternehmen.Artikelname/main.10003.com.Unternehmen.productname.obb Genau, es ist eine Kombination der getExternalStorageDirectory() + "/Android/obb/" + PackageName Wenn Sie Zugang zu UE4 github können Sie sich den source-code github.com/EpicGames/UnrealEngine/blob/release/Engine/Source/... (MountOBB-Funktion)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ok, es scheint das Problem aufgeführt war woanders, aber ich konnte Sie nicht finden, weil ich nicht wusste, war es das genaue Problem...
https://code.google.com/p/android/issues/detail?id=197287
Den API23 für einige Grund-Satz der Benutzer von den OBB zu root, nicht der richtige Benutzer und die app hat keinen Zugriff darauf.
Nach dem Neustart des Gerätes funktioniert alles wunderbar.
Zu diesem Zeitpunkt gibt es keine klare Abhilfe für dieses.
Danke @Larry für die Bereitstellung aller notwendigen und hilfreichen Informationen 🙂
Sind Sie herzlich eingeladen zu überprüfen, ob Ihre Anwendung vom store hat writting Berechtigung.
Dank an @Larry für den Hinweis zur richtigen Lösung.
Für diejenigen, die sich Fragen, warum AOSP APK-Expansion-Support-library funktioniert nicht ohne Berechtigung, hier ist der geänderte
APKExpansionSupport.java
Bietet hier eine Antwort basierend auf den oben genannten Kommentar-thread. Das problem ist die Art und Weise, dass
LocalPath
bereitgestellt wird. In Android, die Pfade sind nicht konsistent zwischen den verschiedenen Herstellern, und Sie sollten machen Sie keine Annahmen über Speicher-Pfade.Also eher als diese (nur Beispiel-code):
Müssen Sie etwas tun, wie dieses:
Dadurch wird sichergestellt, dass Ihr code wird die korrekte OBB Lage für Ihre app auf den primären externen Speicher für das Gerät. Sie können dann speichern Sie die OBB dort und später, wenn Ihre app wird UE4 begann er Recht, die Datei.
Einer app den Speicherort auf den primären externen Speicher für OBB (und andere Dateien) erfordert keine Berechtigungen zum Lesen und schreiben app. Wenn der Pfad auf die externe Speicher wird nicht erzeugt durch die oben genannten Methoden, dann die
WRITE_EXTERNAL_STORAGE
Berechtigung wird benötigt, um das schreiben von Daten.EACCES 13 /* Permission denied */
Es ist auch eine Sache... ich das Spiel installieren, indem Sie apk-und obb in das erstellte Verzeichnis in Android/obb und die APK installieren. Wenn ich Obb im root-Speicher und kopieren Sie es dann über inside Android-Datei-Manager, um das richtige Verzeichnis und dann installieren... dann funktioniert es und hat Zugriff auf...adb
oder den play store, so dass kein spezieller Lagerort notwendig. In der Regel Ihre obb-Datei(en) heruntergeladen werden von der app und platziert ins obb Verzeichnis oder können Sie hosten auf Google Play und ziehen Sie Sie nach unten auf diese Weise. Das framework muss das Ding schafft, dass die obb-Verzeichnis, also die APK zuerst installiert werden, damit die Berechtigungen erhalten richtig eingestellt. Wenn Sie manuell erstellen Sie das Verzeichnis (in der adb shell?) dann versucht, es zu benutzen, das wird zu Problemen führen.getObbDir()
Methode. Wenn Sie die Konstante Zeichenfolge, die es wird nicht auf einigen Geräten als mount-Punkte zu unterscheiden.