Создание нескольких фотографий в ОС 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>
На это все