2017-05-15 1 views
0

Für eine vorhandene Datei im internen Speicher des Telefons, deren Pfad ist /system/data/recf/pic.jpg, Konstruieren von InputStream mit OpenInputStream() -Methode löst FileNotFoundException.Kann Datei nicht lesen mit ContentResolver.openInputStream (Uri)

Dies ist, was ich bin

doing-
ContentResolver cr = context.getContentResolver(); 
InputStream inputStream = null; 
Uri filename = Uri.parse("file:///system/data/recf/pic.jpg"); 
inputStream = cr.openInputStream(filename); 

aber es ist ein FileNotFoundException werfen. Ich habe überprüft, dass die Datei existiert. Stuck für eine lange Zeit, bitte helfen. Vielen Dank.

+0

auf welcher os Version testen Sie ?. Überprüfen Sie die FileProvider-Dokumentation – Raghunandan

+0

OS-Version ist Android 6.0.1. Fehlermeldung zeigt, ist dies - java.io.FileNotFoundException: /system/data/recf/pic.jpg: öffnen fehlgeschlagen: ENOENT (keine solche Datei oder Verzeichnis) – kshubham07

+0

Lesen Sie https://developer.android.com/ Referenz/android/support/v4/content/FileProvider.html. – Raghunandan

Antwort

0

Der interne Speicher des Geräts (Telefonspeicher) wird in Bezug auf Android immer noch als externer Speicher betrachtet. "Externer Speicher" bezieht sich möglicherweise auf Wechselspeicher wie SD-Karte oder nicht entfernbaren internen Speicher des Telefons.

"Interner Speicher" bezieht sich auf einen privaten Bereich Ihrer App, der für niemanden, einschließlich des Benutzers, freigegeben ist.

Daher wurde die Berechtigung zum Lesen und Schreiben in External Storage benötigt. Auf Android M + war eine Echtzeitberechtigung erforderlich.

0

Ich kann sehen Sie

mit triple vorwärts slashe
Uri filename = Uri.parse("file:///system/data/recf/pic.jpg"); 

und Sie vorbei Datei eine hart codierte String für Pfad Parsen. Dies könnte das Problem sein. Zuerst müssen Sie sicherstellen, dass der Pfad korrekt ist. Sie können dafür das Dateiobjekt verwenden, um zu verifizieren, dass es tatsächlich eine Datei mit dem angegebenen Pfad gibt. Sie können den folgenden Code zum Überprüfen verwenden.

File file = new File("Your path"); 
if(file.exists()) { 
    // if this is true that means file exists in actual then 
    //make uri and get the stream as you are already doing 
} 

Höchstwahrscheinlich gehört dieses Problem zum Pfad. Hoffe, meine Antwort hilft dir.