2015-05-17 2 views
1

Я использую активность системы, чтобы получить изображение с камеры.Android: Как получить изображения с камеры без сохранения файла?

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
startActivityForResult(intent, REQUEST); 

Когда пользователь принимает фото Я использую эту функцию обратного вызова

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if (requestCode == REQUEST && resultCode == RESULT_OK) { 
      Bitmap bp = (Bitmap) data.getExtras().get("data"); 
      /* 
      * DO SOMETHING WITH IMAGE ... 
      */ 
      getContentResolver().delete(data.getData(), null, null); 
     } 
    } 
} 

Последняя строка удаляет файл, сохраненный в системе. Это работает, но можно ли использовать массовое хранение (с соответствующими uses-permission)? Я хотел бы получить изображение из ОЗУ, обработать его, а затем вернуть метод, оставляющий все в сборщик мусора. Я бы не хотел, чтобы фотография была видна из галереи, в то время как обработка.

ответ

2

Как получить изображения с камеры без сохранения файла?

Используйте API-интерфейс камеры напрямую (android.hardware.Camera, android.hardware.camera2.*).

Прямо сейчас, вы делегируете работу камеры стороннему приложению. Есть сотни предустановленных приложений для камеры на ~ 1,5 миллиардах Android-устройств, а в Play Store и в других местах доступны сотни (возможно, тысячи). Пользователь может использовать любой из них для обработки вашего звонка startActivityForResult(). То, что делают эти приложения, в значительной степени зависит от них. Если они хотят сохранить изображение на диск в дополнение к возврату миниатюры "data", это их выбор, а не ваш.

+0

Я вижу, спасибо. Тогда мой последний шанс - сделать пользовательскую камеру внутри моего приложения, используя API – user3290180

+0

Пожалуйста, какой из них для моей цели? – user3290180

+1

@ user3290180: 'android.hardware.camera2. *' Доступен только на Android 5.0 и выше. Если ваш 'minSdkVersion' равен 21 или выше, используйте его. В противном случае вам нужно будет использовать 'android.hardware.Camera'. – CommonsWare

0

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

+0

Не требуется uri, система генерирует uri с меткой времени и сохраняет файл. Я бы избегал этого. – user3290180

+0

, если я удалю последнюю строку и перейду в галерею, я вижу то же изображение, что и в приложении – user3290180

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