2016-09-20 7 views
2

Я пытаюсь сделать снимок и сохранить его во внутреннем хранилище, поэтому таким образом, только мое приложение будет иметь доступ к изображениям , как я могу это сделать? Я стараюсь много вещей без успеха, даже официальная документация от Google сломана, вот мой фактический код, который экономит на общедоступном каталоге:Сделайте снимок и сохраните его на внутренней памяти

@Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_pictures); 

     imageView = (ImageView)findViewById(R.id.imageView); 
     fabNewPicture = (FloatingActionButton)findViewById(R.id.fab_new_picture); 
     fabNewPicture.setOnClickListener(new View.OnClickListener() 
     { 
      @Override 
      public void onClick(View v) { 
       takePicture(v); 
      } 
     }); 

     if(ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) 
     { 
      ActivityCompat.requestPermissions(this, new String[] { Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE }, 0); 
     } 
    } 

    private void takePicture(View v) 
    { 
     Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
     file = Uri.fromFile(getOutputMediaFile()); 
     i.putExtra(MediaStore.EXTRA_OUTPUT, file); 

     startActivityForResult(i, 100); 
    } 

    private static File getOutputMediaFile() 
    { 
     File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(
       Environment.DIRECTORY_PICTURES), "FotoAula"); 

     if (!mediaStorageDir.exists()){ 
      if (!mediaStorageDir.mkdirs()){ 
       return null; 
      } 
     } 

     String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); 
     return new File(mediaStorageDir.getPath() + File.separator + 
       "IMG_"+ timeStamp + ".jpg"); 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (requestCode == 100) { 
      if (resultCode == RESULT_OK) { 
       imageView.setImageURI(file); 
      } 
     } 
    } 

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

Как я могу это сделать?

Спасибо!

+0

Это ответ, который может вам ответить: http://stackoverflow.com/questions/22574350/how-to-keep-images-private-to-the-app-and-not- просмотр в галерее –

+0

вы можете сделать две вещи. 1. Сохраните ваши изображения с помощью префикса периода (.). Это скроет ваши изображения из галереи. 2nd-refer to this https://developer.android.com/guide/topics/data/data-storage.html#filesInternal use openFileOutput (FILENAME, Context.MODE_PRIVATE); и сохраните изображение. – RajSharma

+0

The. префикс был бы скорее похож на обходной путь? Или его действительно beign используется в такой ситуации? – user3159043

ответ

2

Если вы сохраняете свою фотографию на SD-карте или внешнем хранилище, любое приложение может получить к ней доступ. Попробуйте получить частный каталог и сохранить свою фотографию там.

Примите от here

Чтобы создать и написать личное файл на внутреннюю память:

1-Call openFileOutput() с именем файла и режима работы. Это возвращает FileOutputStream.

2-Напишите в файл с write().

3-Закрыть поток с close().

Например:

String FILENAME = "hello_file"; 
String string = "hello world!"; 

FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_PRIVATE); 
fos.write(string.getBytes()); 
fos.close(); 

Read «Использование внутренней памяти» на: Link

+0

Im пытается сделать это, но Im изо всех сил пытается заставить его работать, так как я не понимаю, что концепция фотосъемки так много – user3159043

+0

Ваше приложение не нуждается в съемке, изображение снимается с приложения камеры в вашем устройстве в ответ на намерение отправьте своим приложением. Вам нужно прочитать изображение и скопировать на внутреннее хранилище. Прочтите эту статью: https://developer.android.com/training/camera/photobasics.html –

-2

Частное внутреннее хранилище не существует. При сохранении изображения попробуйте удалить суффикс. Тогда это не изображение для другого приложения.

+0

Но я могу сохранить картину таким образом? Как я могу показать его без суффикса? Добавляя его только тогда, когда я показываю? Что относительно хранения, которое удаляется, когда пользователь удаляет приложение? Это не внутреннее? – user3159043

+0

Это байты, а не суффикс, определяющий содержимое файла. Картинка всегда представляет собой изображение даже без суффикса. Вы можете, безусловно, показать изображение без суффикса в своем приложении. –

+0

Если вы решите сохранить его на SDCard, тогда фотографии будут удалены после удаления. –

0

вы можете создать файл .nomedia в папку, где вы сохраняете свои фотографии, а затем медиа-сканеры в других приложения будут игнорировать вашу папку