Создание нескольких фотографий в ОС Android и сохранение их

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

 

На это все

Tags:

Leave a Reply

Please disable your adblocker or whitelist this site!