Как сохранить удаленный файл JPG во внутренней памяти телефона / sdcard? - PullRequest
0 голосов
/ 22 марта 2012

Мне нужно добавить новую функциональность в мое приложение. Я должен хранить много изображений JPG из Интернета в телефоне.

Если в телефоне есть sdcard, файлы JPG должны храниться на sdcard. В противном случае они должны храниться во внутренней памяти, только если на телефоне есть место для этого.

Тогда я должен сделать следующее:

  1. Проверьте, есть ли у телефона SDCARD. Если есть, SDCARD dir - это судьба, если нет, ВНУТРЕННЯЯ ПАМЯТЬ - это судьба.
  2. Проверьте, есть ли в телефоне место для хранения фотографий.
  3. Если есть место, сохраните фотографии в каталоге под названием /Magazine/

Я знаю, как получить файл JPG из Интернета и как преобразовать его в BITMAP, но это единственное, что я знаю, я не знаю, как сохранить его как JPG, и я не знаю других вещей.

public static Bitmap getRemoteBitmap(String url) {      
    Bitmap bm=null;
    HttpClient httpclient = new DefaultHttpClient(); 
    HttpResponse response; 
    try { 
         ((AbstractHttpClient) httpclient).getCredentialsProvider().setCredentials(
                new org.apache.http.auth.AuthScope(null,-1), 
                new org.apache.http.auth.UsernamePasswordCredentials(MagazineStatus._username, MagazineStatus._password)); 

        response = httpclient.execute(new HttpGet(url)); 
        StatusLine statusLine = response.getStatusLine(); 
        if(statusLine.getStatusCode() == HttpStatus.SC_OK) { 
            try {                   
                HttpEntity entity = response.getEntity();
                InputStream content = entity.getContent();
                bm=BitmapFactory.decodeStream(content );
            }catch(Exception ex) {Log.e("DBF Error",ex.toString());}                 
        }else { 
            response.getEntity().getContent().close(); 
            throw new IOException(statusLine.getReasonPhrase()); 
        } 
    }catch(ClientProtocolException cpe) {Log.e("ClientProtocolException @ at FPT",cpe.toString());} catch(Exception ex) {Log.e("Exception at FETCHPROJECTASK",ex.toString());} 
    return bm;
}

Я ищу в Google, как делать то, что мне нужно, но я не могу найти какую-либо четкую информацию, я предпочитаю спросить вас, как сделать это наилучшим, оптимальным способом.

1021 * БЛАГОДАРЯ *

Ответы [ 2 ]

1 голос
/ 22 марта 2012

Таким образом, возвращаемое значение вышеуказанного метода дает вам растровое изображение из Интернета.

Используйте приведенный ниже код, чтобы сохранить его в формате JPG на SDCard.

try {
    bm.compress(Bitmap.CompressFormat.JPEG, 100, new FileOutputStream(new File("/sdcard/Magazine/Image001.jpg")));
    // bm is your decoded bitmap from internet
} catch (FileNotFoundException e) {             
    e.printStackTrace()
}

Надеюсь, это поможет вам.

0 голосов
/ 22 марта 2012

Чтобы проверить, существует ли SDCard:

if (android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)) {

Log.i("tag", "SDCard is mounted");

}

Чтобы узнать размер памяти телефона:

Получите свободное место на внутренней памяти

File path = Environment.getDataDirectory();
StatFs stat = new StatFs(path.getPath());
long blockSize = stat.getBlockSize();
long availableBlocks = stat.getAvailableBlocks();
return Formatter.formatFileSize(this, availableBlocks * blockSize);

чтобы добавить имя вашей папки, просто получите context.getFilesDir() и объедините с именем вашей папки

...