Создание нескольких фотографий в ОС Android и сохранение их
Большинство мануалов в интернете описывают как запустить Intent с намерением вызова камеры, получить результат в onActivityResult и в дальнейшем сохранить фото, либо просто получить его Uri. Если нужно сделать несколько фото и получить результат, в основном предлагается сделать свою реализацию с SurfaceView + Camera. В этой заметке опишется более простой способ – получения сделанных снимков через вызов Intent камеры. Отличие от стандартного вызова заключается в том, что после создания снимка, приложение не возвращает результат, а позволяет делать еще снимки.
CameraEventReceiver.NEED_LISTEN = true; Intent intent = new Intent( MediaStore.INTENT_ACTION_STILL_IMAGE_CAMERA); PhotoFragment.this.startActivity(intent);
Мы можем вызвать этот Intent через кнопку.
Слушатель, который отслеживает все добавления фото в MediaStore стандартным приложением.
public class CameraEventReceiver extends BroadcastReceiver { public static boolean NEED_LISTEN = false; @Override public void onReceive(Context context, Intent intent) { if(NEED_LISTEN){ if(intent!=null){ Uri currenturi = intent.getData(); String pathPhoto = getPath(context,currenturi); File sourceFile = new File(pathPhoto); File f = new File(Environment.getExternalStorageDirectory()+File.separator+"OwnFolder", sourceFile.getName()); /** * Here we can save photos in our storage or do with it whatever we like /* } } } public static String getPath(Context context, Uri uri){ String[] projection = { MediaStore.Images.Media.DATA }; Cursor cursor = context.getContentResolver().query(uri, projection, null, null, null); if (cursor == null) return null; int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); cursor.moveToFirst(); String s=cursor.getString(column_index); cursor.close(); return s; } } }
В заключение не забываем добавить наш слушатель в манифест:
<receiver android:name=".receiver.CameraEventReceiver" android:enabled="true"> <intent-filter> <action android:name="com.android.camera.NEW_PICTURE"/> <action android:name="android.hardware.action.NEW_PICTURE" /> <data android:mimeType="image/*"/> </intent-filter> </receiver>
На это все