Отказано в доступе к Android при сохранении файла из не-пользовательского интерфейса - PullRequest
4 голосов
/ 19 сентября 2011

У меня проблемы с загрузкой изображения из нового потока и сохранением его в файл.

на некоторых устройствах оно работает безупречно

на других, таких как HTC INCERDIBLE,Я получаю исключение

Мне удалось выяснить, что это в этой строке:

InputStream is=new URL(url).openStream();

это полный дамп стека

import java.io.InputStream;

Bitmap bitmap=null;
InputStream is=new URL(url).openStream();
OutputStream os = new FileOutputStream(f);
Utils.CopyStream(is, os);
os.close();

D/dalvikvm( 1930): GC_EXPLICIT freed 26K, 47% free 3642K/6855K, external 0K/0K, paused 90ms
W/System.err( 2669): java.io.FileNotFoundException: /mnt/sdcard/com.example.testing1/remote-image-cache/74110ca30e217cfdcc78a98f814de093c217bc07.hdr (Permission denied)
W/System.err( 2669):    at org.apache.harmony.luni.platform.OSFileSystem.open(Native Method)
W/System.err( 2669):    at dalvik.system.BlockGuard$WrappedFileSystem.open(BlockGuard.java:232)
W/System.err( 2669):    at java.io.FileOutputStream.<init>(FileOutputStream.java:94)
W/System.err( 2669):    at java.io.FileOutputStream.<init>(FileOutputStream.java:66)
W/System.err( 2669):    at java.io.FileWriter.<init>(FileWriter.java:42)
W/System.err( 2669):    at org.appcelerator.titanium.util.TiResponseCache.put(TiResponseCache.java:359)
W/System.err( 2669):    at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.maybeCache(HttpURLConnectionImpl.java:331)
W/System.err( 2669):    at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.retrieveResponse(HttpURLConnectionImpl.java:1043)
W/System.err( 2669):    at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:512)
W/System.err( 2669):    at java.net.URL.openStream(URL.java:645)
W/System.err( 2669):    at ti.testing.ImageLoader.getBitmap(ImageLoader.java:163)
W/System.err( 2669):    at ti.testing.ImageLoader.access$100(ImageLoader.java:29)
W/System.err( 2669):    at ti.testing.ImageLoader$PhotosLoader.run(ImageLoader.java:256)

Мой файл manifest.xml содержит много разрешений:

</application>

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.VIBRATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>

вот как я получаю путь к файлу

   if (android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED))
        cacheDir=new File(android.os.Environment.getExternalStorageDirectory(),"LazyList");
    else
        cacheDir=context.getCacheDir();

Я не понимаюэто ... Идеи?

РЕДАКТИРОВАТЬ

Я пытался изменить:

cacheDir=new File("/mnt/","emmc"); 

, но теперь я получаю:

W/System.err( 404): java.io.FileNotFoundException: /mnt/emmc/cp_1216407347.jpeg 
(No such file or directory)

Iпопытался изменить cacheDir = новый файл ("/ mnt /", "emmc");но теперь я получаю W / System.err (404): java.io.FileNotFoundException: /mnt/emmc/cp_1216407347.jpeg (нет такого файла или каталога)

...