Создайте многоразовую камеру и галереюAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Создайте многоразовую камеру и галерею

Сообщение Anonymous »


Я хочу создать класс для управления камерой и галереей, который я смогу использовать с разными фрагментами.

import androidx.appcompat.app.AppCompatActivity; импортировать androidx.activity.result.ActivityResultLauncher; импортировать androidx.activity.result.contract.ActivityResultContracts; импортировать android.app.Activity; импортировать android.content.Context; импортировать android.content.Intent; импортировать android.graphics.Bitmap; импортировать android.os.Environment; импортировать android.provider.MediaStore; импортировать java.io.FileOutputStream; импортировать java.io.IOException; импортировать java.io.OutputStream; импортировать java.text.SimpleDateFormat; импортировать java.util.Date; импортировать java.util.Locale; публичный класс GalleryAndCamera { частная деятельность; частный ActivityResultLauncher takePictureLauncher; частный ActivityResultLauncher PickImageLauncher; частный ImageCaptureListener imageCaptureListener; public GalleryAndCamera (активность AppCompatActivity) { this.activity = активность; takePictureLauncher = Activity.registerForActivityResult( новый ActivityResultContracts.StartActivityForResult(), результат -> { if (result.getResultCode() == Activity.RESULT_OK) { Данные намерения = result.getData(); если (данные!= ноль) { Растровое фото = (Растровое изображение) data.getExtras().get("data"); saveImageToGallery(photo, Activity.getApplicationContext()); imageCaptureListener.onImageCaptured(фото); } } else if (result.getResultCode() == Activity.RESULT_CANCELED) { } } ); PickImageLauncher = Activity.registerForActivityResult( новый ActivityResultContracts.StartActivityForResult(), результат -> { if (result.getResultCode() == Activity.RESULT_OK) { Данные намерения = result.getData(); если (данные!= ноль) { } } else if (result.getResultCode() == Activity.RESULT_CANCELED) { } } ); } общественная недействительность takePicture() { Намерение cameraIntent = новое намерение (MediaStore.ACTION_IMAGE_CAPTURE); takePictureLauncher.launch(cameraIntent); } общественный недействительный PickImage () { Намерение галереиIntent = новое намерение (Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI); PickImageLauncher.launch(galleryIntent); } public void setImageCaptureListener (прослушиватель ImageCaptureListener) { this.imageCaptureListener = прослушиватель; } } публичный класс Myfragment расширяет Fragment и реализует ImageCaptureListener{ @Override public View onCreateView(@NonNull LayoutInflater инфлятор, контейнер @Nullable ViewGroup, @Nullable Bundle saveInstanceState) { привязка = FragmentMyfragmentBinding.inflate(инфлятор, контейнер, ложь); Просмотр представления =binding.getRoot(); GalleryAndCamera GalleryAndCamera = новая GalleryAndCamera((AppCompatActivity) requireActivity()); привязка.idBtnWDCamera.setOnClickListener(новый View.OnClickListener() { @Override public void onClick (Просмотр) { Helper.clickSound(getContext()); Обработчик изображения(); } }); } проблема: ФАТАЛЬНОЕ ИСКЛЮЧЕНИЕ: основное Процесс: com.hepszolg.birdcontrol, PID: 11293 java.lang.IllegalStateException: LifecycleOwner com.myproject.MainActivity@288c540 пытается зарегистрироваться, хотя текущее состояние ВОЗОБНОВЛЕНО. Владельцы жизненного цикла должны вызвать регистр перед их ЗАПУСКОМ.
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»