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

На это все

Leave a Reply

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.