2016-01-15 2 views
1

Я не был уверен, как это сказать, но в терминах iOS, если я загружаю изображение и сохраняю его в каталоге документов, он сохраняет его в Контейнерах приложений, который не виден другим приложениям и камере и т. д.Android, сохраняющий изображения в «App Container»

Способ, которым я располагаюсь в Android в настоящее время, все эти изображения видны в Проводнике и галерее.

Мне было интересно, как я мог бы сохранить эти изображения аналогично iOS и скрывать их в собственном контейнере приложений.

Есть ли способ создать папку с контекстом.MODE_PRIVATE или что-то подобное?

Это то, что у меня есть сейчас, делает ли это трюк?

public static Boolean saveToInternalStorage(Context context, Bitmap bitmap, String filename) { 
     ContextWrapper cw = new ContextWrapper(context); 

     //Path to /data/data/yourapp/app_data/imageDir 
     File directory = cw.getDir("imageDir", Context.MODE_PRIVATE); 

     //Create imageDir 
     File mypath = new File(directory, filename); 

     FileOutputStream fos = null; 
     try { 
      fos = new FileOutputStream(mypath); 

      //Use the compress method on the BitMap object to write image to the OutputStream 
      if (bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos)) { 
       return true; 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } finally { 
      try { 
       if (fos != null) { 
        fos.close(); 
       } 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 

     return false; 
    } 

    public static Bitmap loadImageFromStorage(Context context, String filename) { 
     ContextWrapper cw = new ContextWrapper(context); 

     //Path to /data/data/yourapp/app_data/imageDir 
     File directory = cw.getDir("imageDir", Context.MODE_PRIVATE); 

     try { 
      File f = new File(directory, filename); 
      Bitmap b = BitmapFactory.decodeStream(new FileInputStream(f)); 


      return b; 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } 

     return null; 
    } 
+2

Я думаю, что '' getFilesDir() '] (http://developer.android.com/reference/android/content/Context.html#getFilesDir()) должен работать следующим образом в' MODE_PRIVATE'. Он принимает путь 'data/data/com.package.name/files /', и если устройство не внедрено, это невозможно увидеть сохраненный файл. См. Документацию [Использование внутренней памяти] (http://developer.android.com/guide/topics/data/data-storage.html#filesInternal). Я ответил [на соответствующий ответ] (http://stackoverflow.com/a/34751705/2668136), который может дать вам больше информации. – Fllo

ответ

3

мне было интересно, как я мог бы сохранить эти изображения в аналогии с прошивкой и их скрытыми в Apps собственный контейнер.

Написать их getFilesDir(), getCacheDir(), или в другом месте на internal storage.

Это то, что у меня есть сейчас, делает ли это трюк?

ContextWrapper бесполезен. Если вы загружаете изображение, я не знаю, почему у вас есть Bitmap, который вы пытаетесь записать на хранение. — скачать прямо на хранение.

Но, что касается сохранения изображений, закрытых для вашего приложения, getDir() также указывает на места во внутреннем хранилище.

+0

Как сохранить изображения непосредственно на хранение? –

+1

@BobbyW: Um, загрузите их, предположительно, используя HTTP-клиентский API ('HttpUrlConnection', OkHttp и т. Д.). – CommonsWare

+0

Хорошо, спасибо за помощь. Ценить это. –

4

Прочитано article. Это поможет ..

Вы можете сохранить файлы непосредственно на внутренней памяти устройства. По умолчанию файлы, сохраненные во внутреннем хранилище, являются приватными для вашего приложения, а другие приложения не могут получить к ним доступ (а также не могут). Когда пользователь удаляет ваше приложение, эти файлы удаляются.

Смежные вопросы