2015-07-30 12 views
8

Jak wskazuje tytuł, mam problem z zapisaniem plików w pamięci zewnętrznej. Moje urządzenie do debugowania to Nexus 5. Chodzi o to, że jestem w stanie dokładnie odczytać pliki z urządzenia (próbowałem z tymi w folderze pobierania), ale nie mogę ich zapisać. Mam świadomość, że muszę to zrobić, gdy urządzenie nie jest podłączone do komputera. Ale to też nie działa.Zapisywanie plików w pamięci zewnętrznej w przypadku awarii systemu Android

W rzeczywistości próbowałem odczytać stan karty SD przed jej zapisaniem (co oczywiście nie zadziałało). Stan pokazał się jako "zamontowany", gdy urządzenie było podłączone do mojego komputera, lub nie. I porównałem stan do Environment.MEDIA_MOUNTED_READ_ONLY i Environment.MEDIA_MOUNTED bez powodzenia. Moje urządzenie nie znajduje się w żadnym z tych stanów.

Jedna rzecz, którą musisz wiedzieć, to to, że mój telefon nie ma zewnętrznej karty SD, ponieważ jest to telefon wewnętrzny. Powoduje to, że moje urządzenie ma katalog "/ storage/emulated/0/..." dla zewnętrznej pamięci masowej.

Muszę też podkreślić, że wdrożyliśmy następujące tagi w moim Android manifeście:

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

Nie mam żadnej wskazówki co do tego, co może się dziać. Kolejną rzeczą, która może pomóc, jest to, że próbowałem zarządzać plikami z winrar (dla Androida) i byłem w stanie usunąć pliki z urządzeniem podłączonym do mojego komputera, jak również bez jego połączenia. Więc nie wiem co robić.

Kod, którego używam do napisania pliku, jest następujący. Należy pamiętać, że powinien przeczytać plik obrazu (co robi), przekształcić go w ciąg, przekonwertować go z powrotem do obrazu, a następnie zapisać go do folderu Downloads:

File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).getAbsolutePath() + "/base_image.jpg"); 
// Reading a Image file from file system 
FileInputStream imageInFile = new FileInputStream(file); 
byte imageData[] = new byte[(int) file.length()]; 
imageInFile.read(imageData); 

// Converting Image byte array into Base64 String 
String imageDataString = encodeImage(imageData); 

// Converting a Base64 String into Image byte array 
byte[] imageByteArray = decodeImage(imageDataString); 

File newFile = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), "converted_image.jpg"); 

//Write a image byte array into file system 
FileOutputStream imageOutFile = new FileOutputStream(newFile); 

imageOutFile.write(imageByteArray); 

imageInFile.close(); 
imageOutFile.close(); 

Co należy zrobić?

+0

Czy jesteś pewien, że plik zostanie zapisany w pliku? – Raghunandan

+0

Tworzę nowy plik. Lub przynajmniej to właśnie próbuję. Otrzymuję wyjątek File Not Found, próbując go utworzyć i błąd EACCES (Odmowa uprawnień). To jest mój główny problem tutaj. czy robię coś źle? – blastervla

Odpowiedz

4

Po prostu napraw ANDROID.PERMISSION.WRITE_EXTERNAL_STORAGE na android.permission.WRITE_EXTERNAL_STORAGE w swoim uses-permission.

Znalazłem ten problem, UPPERCASE w pozwoleniu nie jest przydatne.

+1

Nie mogę ci wystarczająco podziękować za twoją odpowiedź. To przeszkadza mi od wielu dni. Dziękuje bardzo!! – blastervla

3

FileOutputStream NIE tworzy automatycznie pliku, jeśli nie istnieje.

Musisz więc sprawdzić i utworzyć, jeśli twój plik nie istnieje.

if(!newFile.exists()) { 
    newFile.createNewFile(); 
} 

Mam nadzieję, że ta pomoc!

+0

Dziękujemy za szybką reakcję. Próbowałem, ale teraz rzuca mi następujący wyjątek: "java.io.IOException: open failed: EACCES (Odmowa uprawnień)", kiedy nazywam "newFile.createNewFile();" metoda. Jakieś pomysły na to, co może się wydarzyć? – blastervla

+1

Także przed wywołaniem funkcji createFile() wywołaj ten plik 'newFile.getParentFile(). Mkdirs()'. P.s. Przepraszam, jeśli to źle trafiłem, idę z mojej głowy :) – vedi0boy

+0

Dobrze, oczywiście nie dałeś twojej aplikacji odpowiednich uprawnień, mogę zobaczyć gdzie w manifeście, że dodałeś uprawnienia. Edycja: Usunięto ostatnie stwierdzenie, było błędne. – vedi0boy

Powiązane problemy