2015-10-19 5 views
0

У меня есть этот код, чтобы сделать снимок и сохранить картинку в /data/data/..., но после снимка я получаю Image saved to: /media/external/images/media/a_number. Я проверил каталог /data/data/..., а файла изображения там нет.Сделайте снимок и сохраните его/данные/данные

protected void onCreate(Bundle savedInstanceState) { 
    context = this; 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    File fileUri = new File(context.getFilesDir(), "INSTALLATION.jpg"); 

    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 


    intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); // set the image file name 


    // start the image capture Intent 
    startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE); 
    //... 
} 


protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE) { 
     if (resultCode == RESULT_OK) { 

      // Image captured and saved to fileUri specified in the Intent 
      Toast.makeText(this, "Image saved to:\n" + data.getData(), Toast.LENGTH_LONG).show(); 

     } else if (resultCode == RESULT_CANCELED) { 
      // User cancelled the image capture 
     } else { 
      // Image capture failed, advise user 
     } 
    } 
} 
+0

Это выглядит л Если вы делаете это правильно. Я думаю, что каталог, возвращаемый getFilesDir, зависит от устройства. Что вы используете? – elevine

+0

У меня тоже такая же проблема: Причина в том, что приложение не может писать в частную область приложения. Я бы предложил использовать внешнюю частную область приложения, которая является общедоступной и доступной для чтения, т.е./storage/emulated/0/Android/<имя вашего пакета>/files/ – dex

ответ

1

Сторонние приложения для камеры не имеют права на запись в вашу часть internal storage.

Вы можете попробовать написать ContentProvider, который поддерживает потоковое API и поддерживает запись на внутреннюю память, а затем использовать content://Uri для ACTION_IMAGE_CAPTURE. Я не пробовал это, поэтому я не знаю, как хорошо это работает, и я подозреваю, что многие приложения для камеры не ожидают там Uri.

В противном случае, ваши варианты:

  • Дайте сторонние приложения камера расположение на external storage, а затем скопировать файл самостоятельно на внутренней памяти или

  • Не используйте ACTION_IMAGE_CAPTURE, но вместо того, чтобы использовать Camera и/или camera2 API, чтобы сделать снимок непосредственно в приложении

+0

Пожалуйста, объясните это «Не используйте ACTION_IMAGE_CAPTURE, но вместо этого используйте камеру и/или API камеры2, чтобы сделать снимок прямо в вашем приложении ». – dex

+0

@dex: http://developer.android.com/guide/topics/media/camera.html – CommonsWare

+0

@comonsWare Спасибо большое :) – dex

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