Скопируйте из MainActivity.java метод setWindow() и добавьте его в класс AddContactActivity.java. В методе create() вызовите метод setWindow().
AddContactActivity.java
publicclassAddContactActivityextendsAppCompatActivity { @OverrideprotectedvoidonCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);setContentView(R.layout.activity_add_contact);setWindow(); }privatevoidsetWindow() {// Метод устанавливает StatusBar в цвет фонаWindow window =this.getWindow();window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);window.setStatusBarColor(getColor(R.color.activity_background));View decor =getWindow().getDecorView();decor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR); }}
Получите ссылки на изображение контакта, поля ввода и кнопки. Объект ImageView будет меняться при получении снимка из камеры, поэтому его необходимо сделать полем класса. Ссылки на остальные элементы UI можно сделать локальными в рамках метода onCreate().
Сразу реализуем сценарий, когда пользователь нажимает кнопку "Cancel" или кнопку "Назад" на телефоне. Мы помним, что в этом случае необходимо установить результат как RESULT_CANCELED.
Сохраняем пришедшее изображение в файл, меняем изображение контакта в окне и сохраняем путь к файлу. Для хранения пути к файлу создайте поле класса типа Uri.
AddContactActivity.java
publicclassAddContactActivityextendsAppCompatActivity {privatestaticfinalint IMAGE_CAPTURE_REQUEST_CODE =7777;privateImageView mContactImage;privateUri mContactImageUri; @OverrideprotectedvoidonActivityResult(int requestCode,int resultCode, @NullableIntent data) { super.onActivityResult(requestCode, resultCode, data);if (requestCode == IMAGE_CAPTURE_REQUEST_CODE && resultCode == RESULT_OK && data !=null) {Bundle extras =data.getExtras();Bitmap imageBitmap = (Bitmap) extras.get("data");// Меняем ImageView с изображением контактаmContactImage.setImageBitmap(imageBitmap);String filename ="contact_"+System.currentTimeMillis() +".png"; File outputFile = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), filename);
FileOutputStream fileOutputStream =null;try { fileOutputStream =newFileOutputStream(outputFile);imageBitmap.compress(Bitmap.CompressFormat.PNG,100, fileOutputStream);// Сохраняем путь к файлу в формате Uri mContactImageUri =Uri.fromFile(outputFile);fileOutputStream.flush();fileOutputStream.close(); } catch (IOException e) {e.printStackTrace(); } } }}
Теперь нам осталось написать обработчик для кнопки "Add". При нажатии на кнопку мы проверяем, получено ли изображение контакта, после чего упаковываем содержимое полей ввода и путь к файлу в Intent и устанавливаем результат работы окна.
Для проверки работоспособности функционала переопределим в окне MainActivity.java метод onActivityResult() и добавим вывод на экран данных, полученных из AddContactActivity.java
Ниже приведен листинг класса AddContactActivity.java
AddContactActivity.java
publicclassAddContactActivityextendsAppCompatActivity {privateImageView mContactImage;privateUri mContactImageUri;privatestaticfinalint IMAGE_CAPTURE_REQUEST_CODE =7777; @OverrideprotectedvoidonCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);setContentView(R.layout.activity_add_contact);setWindow(); mContactImage =findViewById(R.id.profile_image);EditText nameEditText =findViewById(R.id.name_et);EditText EmailEditText =findViewById(R.id.email_et);EditText PhoneEditText =findViewById(R.id.phone_et);Button addContactButton =findViewById(R.id.button_add);addContactButton.setOnClickListener(v -> {if (mContactImageUri ==null) {Toast.makeText(this,"Contact image not set!",Toast.LENGTH_SHORT).show();return; }String name =nameEditText.getText().toString();String email =EmailEditText.getText().toString();String phone =PhoneEditText.getText().toString();Intent i =newIntent();i.putExtra(Intent.EXTRA_USER, name);i.putExtra(Intent.EXTRA_EMAIL, email);i.putExtra(Intent.EXTRA_PHONE_NUMBER, phone);i.putExtra(Intent.EXTRA_ORIGINATING_URI,mContactImageUri.toString());setResult(RESULT_OK, i);finish(); });Button takePhotoButton =findViewById(R.id.button_camera);takePhotoButton.setOnClickListener(v -> {Intent takePictureIntent =newIntent(MediaStore.ACTION_IMAGE_CAPTURE);try {startActivityForResult(takePictureIntent, IMAGE_CAPTURE_REQUEST_CODE); } catch (ActivityNotFoundException e) {Toast.makeText(this,"Error while trying to open camera app",Toast.LENGTH_SHORT).show(); } });Button cancelButton =findViewById(R.id.button_cancel);cancelButton.setOnClickListener(v ->onBackPressed()); } @OverrideprotectedvoidonActivityResult(int requestCode,int resultCode, @NullableIntent data) { super.onActivityResult(requestCode, resultCode, data);if (requestCode == IMAGE_CAPTURE_REQUEST_CODE && resultCode == RESULT_OK && data !=null) {Bundle extras =data.getExtras();Bitmap imageBitmap = (Bitmap) extras.get("data");// Меняем ImageView с изображением контактаmContactImage.setImageBitmap(imageBitmap);String filename ="contact_"+System.currentTimeMillis() +".png"; File outputFile = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), filename);
FileOutputStream fileOutputStream =null;try { fileOutputStream =newFileOutputStream(outputFile);imageBitmap.compress(Bitmap.CompressFormat.PNG,100, fileOutputStream);// Сохраняем путь к файлу в формате Uri mContactImageUri =Uri.fromFile(outputFile);fileOutputStream.flush();fileOutputStream.close(); } catch (IOException e) {e.printStackTrace(); } } } @OverridepublicvoidonBackPressed() { super.onBackPressed();setResult(RESULT_CANCELED); }privatevoidsetWindow() {// Метод устанавливает StatusBar в цвет фонаWindow window =this.getWindow();window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);window.setStatusBarColor(getColor(R.color.activity_background));View decor =getWindow().getDecorView();decor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR); }}