Huawei Nova 8 – обзор фотовозможностей смартфона –

ustanovit i otkryt prilozhenie yandeks s alisoj na android Каталог

Android camera2 api от чайника

Huawei Nova 8 - обзор фотовозможностей смартфона -

Не так давно я возился со своей роботележкой, пытаясь водрузить на нее ANDROID смартфон. Моей, то есть его задачей, было сделать тележку эволюционно продвинутой. Чтобы она, так сказать, чувствовала мир его сенсорами, смотрела его глазом (камерой), слышала микрофоном и ругалась по громкой связи. Ресурсов AVR, понятное дело, на это уже не хватало и поэтому бывший на телеге микроконтроллер переехал на уровень ниже, куда-то в район спинного мозга управлять моторчиками и разными безусловными рефлексами.

Но странное дело, когда я начал писать приложение для смартфона, нехорошая IDE ANDROID STUDIO стала постоянно зачеркивать мой код и называть его устаревшим.

camera = Camera.open();

Особенно, как вы видите, в тех частях, где я пытался работать с камерой. Это было очень обидно, потому что я прочитал в интернете и усвоил множество уроков работы с андроидом и камерой здесь, здесь, здесь и даже здесь. Там ничего не зачеркивалось. И называлось заурядно Camera API. Все там было просто и логично. Но Google упрямо толкал меня к какому-то Сamera2 API.

Я туда посмотрел и просто опупел от количества разных коллбэков, билдеров, хэндлеров и луперов на каждую строчку демонстрационного кода. Было совершенно непонятно с какой стороны к этому подступиться, если ты обычный любитель, а не android developer. Причем в сети даже на сегодня статей на тему Сamera2 API чуть, хотя вышло это обновление вроде как, аж четыре года назад. Но всё что я нашел, это статью в Хакере в 2022, пост в трех частях от украинских братьев того же года, двойной пост на Хабре в 2022 и статью Understanding Camera2 от японского мегагика Томоаки Имаи. И это я ещё имею в виду какую-то структурированную и оформленную информацию, а не раскиданные в интернете обрывки кода типа, «смотрите, как я могу» и простыни в стиле, «посмотрите код плиз, у меня ничего не работает».

А теперь, если вам всё ещё интересно зачем мне потребовалось пилить свой пост на эту тему
уже в 2022, то добро пожаловать под кат.

Собственно статья из Хакера мне понравилась тем, что дала хотя бы обзорное понимание того, на кой черт внедрили новую парадигму работы с камерой. Также стало понятно для чего нужны некоторые новые методы, которых не было в предыдущем API. Но написать работающую программу по этой статье было совершенно невозможно, поскольку авторы, видимо, как настоящие хакеры, приводили только лишь заглавия методов, ну может быть, ещё там пару строчек дополнительного кода. Но этого мне категорически не хватало.

Пост на Хабре был хорош, не спорю и я даже понял несколько первых абзацев, но на этом дело и встало, поскольку автор поста побеждал камеру при помощи RxJava2, что автоматически исключало меня из числа дальнейших читателей. Мне бы с ООП нормально разобраться, а тут какое-то реактивное программирование.

Статья японца была ещё лучше, пусть он и писал не на своем родном языке. Но Kotlin я тоже не знаю, хотя я, конечно, порадовался за отечественных разработчиков и оценил краткость его синтаксиса, в отличии от той JAVA-вермишели, которая была на странице разработчиков Google (кстати, с этой страницей, тоже было ясно, что мне там ясно мало чего).

Последней статьей, которая принесла мне практическую пользу, был пост из трех частей от братской Украины. Я даже что-то там запустил и что-то там увидел. Но к сожалению, к третьей части автор статьи очень сильно устал и начал также выдавать код обрывками, которые никак не складывались у меня в рабочее целое. Тем более, что в конце концов автор совсем расстроился, потому что у него получилось изображение не той цветовой палитры на которую он рассчитывал.

Huawei Nova 8 - обзор фотовозможностей смартфона -

Дескать, это от того, что версия Lollipop 5.0, а там баг. Надо вот обновить до Lollipop 5.1 и тогда всё будет хорошо. Но как-то пока не до этого. А ещё вредные хохлы пристегнули к статье JAVA SCRIPT, и при копировании кода мне в текст программы насыпалось дикое количество мусора. Ребята, ну нельзя же так… Пришлось специальный плагин в Firefox инсталлировать.

Поэтому мне пришлось подхватить упавшее знамя и довести дело до конца, что конечно, потребовало титанических умственных усилий. И поскольку как-то жалко было удовлетворяться всего лишь осознанием того, что рабочий результат получен, то мне захотелось поделиться им с такими же чайниками любителями. Причем, это далеко не конец истории. Мне всё ещё надо научиться передавать живое видео с камеры андроида на компьютер (роботележка должна развиваться, это закон эволюции) и не кусками, как я слепил, а плавненько. А там встают такие Монбланы препятствий в виде медиакодеков и прочего, что просто жесть жестянская.

Но с другой стороны, все дело может окончится полным разочарованием. И не потому что не удастся подняться на Монблан.

А потому, что сейчас производители смартфонов разрабатывают совершенно новые подходы к камеростроению.
С месяц назад в сеть просочился слух о смартфонах Nokia с пятью основными камерами. Как к этому относиться? Интересный и многообещающий слух или очередная странная штука? Каким бы уникальным ни выглядел такой дизайн, Nokia уж точно не сможет стать пионером в области внедрения непривычного количества объективов и сенсоров в компактные устройства. Фотоаппарат Light L16 уже в 2022 году оснастили 16-ю объективами, и у компании, очевидно, имеется в работе новый прототип. Выше можно увидеть, как это потенциально может выглядеть.

После того, как в Huawei P20 Pro появилась тройная камера, переход к смартфону с пятью камерами уже не звучит так комично, как это могло бы быть еще пару лет назад. Впрочем, остается главный вопрос – а какой в этом смысл?
Что делать с таким количеством объективов?

Первое, что приходит на ум, это разнообразие типов сенсоров камер, доступных на современном рынке смартфонов, и возможность добавить еще. Зачем выбирать между широкоугольной, телефото, портретной с боке или монохромной съемкой, если можно получить все это в одном устройстве?

Будучи теоретически возможным, такой дизайн будет достаточно неуклюжим в использовании. ПО придется переключаться между режимами автоматически или предлагать сложный набор опций пользователю. Более того, разработка такого дизайна стоила бы очень дорого при всех сомнительных преимуществах такого решения. Каждая камера функционировала бы большей частью независимо, а покупатели вряд ли использовали бы какое-то большое число режимов. И непонятно, сколько они были бы готовы заплатить за такую функциональность. Так что камеры с несколькими модулями должны уметь больше, чтобы привлечь пользователя.

Huawei P20 Pro уже предлагает свою версию того, как несколько модулей камеры могут работать вместе, чтоб давать интересный результат. Речь о таких технологиях от Huawei, как Monochrome и Hybrid Zoom. Первая улучшает динамический диапазон стандартных кадров, объединяя данные обычного RGB и светочувствительного черно-белого сенсора. А Hybrid Zoom обещает и того больше: он объединяет данные с нескольких камер, чтобы повысить разрешение снимка для более качественного зума. В результате, в P20 Pro 8 MП сенсор телефото-объектива дает возможность снимать в разрешении 10 MП на 3x и 5x зуме.
Выше разрешение — больше гибкости

Первая камера Light L16 работала сходным образом, используя перископические зеркала, чтобы уместить модули камеры в компактный корпус. Камера брала данные с нескольких модулей на 28, 70 и 150 мм, в зависимости от уровня зума. В конечном итоге получался большой снимок на 52 МП, сделанный с 10 немного отличающихся ракурсов, доступных на уровне увеличения до 5x. Концепция новой модели, разработанной для смартфонов, работает с 5-9 объективами. Такой модуль камеры способен делать большие 64-мегапиксельные снимки.

Эта идея множественных снимков также добавляет преимуществ при съемке в условиях плохого освещения и в HDR за счет нескольких диафрагм. Высококачественный эффект глубины кадра также оказывается доступным благодаря одновременно программной эмуляции и использованию нескольких фокусных расстояний.

Light L16 принес разочарование, однако сама идея оказалась многообещающей. И следующее поколение с успехом может оказаться чем-то стоящим. Компания утверждает, что в конце года будет анонсирован смартфон, где будет установлено их новейшее решение с несколькими объективами.

Такую же идею можно проследить, обратившись к опыту Nokia в области внедрения нескольких камер, учитывая старую историю с инвестициями в Pelican Imaging в 2022 году. В отличие от Light, сенсор тут гораздо меньше. И даже при этом технология обещает очень похожие преимущества, в том числе программную смену фокуса, замера глубины и повышения размера итогового изображения. К сожалению, Tessera выкупила компанию в 2022, но сама идея могла и не покинуть умы инженеров Nokia.

Zeiss, нынешний партнер Nokia по фоточасти, имеет патент на переключаемый зум, но мы не слышали от них больше ничего о дизайне с несколькими объективами. Возможно, более многообещающим выглядит другой партнер Nokia, FIH Mobile. Эта компания принадлежит Foxconn, выпускает телефоны Nokia и также инвестировала в Light в 2022, дав ей лицензию на использование технологии.

И если вы думаете, что у утечки от Nokia и прототипа от Light есть нечто общее, это не совпадение. Связывает эти две компании Foxconn. Так будет ли смартфон от Nokia первым, где используется технология от Light?
Так это и есть будущее?

Сверхбольшое разрешение — не новая концепция.В 2022 году в Oppo Find 7 использовался сходный принцип, а Hybrid Zoom от Huawei позволил технологии работать с несколькими камерами. Исторически главной проблемой технологии были высокие требования производительности, качество алгоритма и энергопотребление. Но на стороне современных смартфонов более мощные процессоры обработки сигнала, энергоэффективные DSP чипы и даже улучшенные способности нейронных сетей, что постепенно снижает значимость проблемы.

Высокая детализация, возможности оптического зума и настраиваемый эффект боке возглавляют список требований к камере современного смартфона, и достичь успеха в этом могут помочь технологии нескольких камер. Вместо выполнения разных функций отдельными камерами будущее мобильной фотографии — за комбинированием нескольких камер для обеспечения более продвинутых и гибких возможностей.

По поводу технологии Light еще остаются вопросы, в особенности насчет склеивания изображений с разным фокусным расстоянием. Нам остается только ждать — увидим, что изменится к лучшему во втором поколении технологии.

Huawei Nova 8 - обзор фотовозможностей смартфона -

Непросто будет настроить такой агрегат из камер ручками в программе. Быть может, круг замкнётся и для того чтобы сделать снимок, нам снова придется писать явный intent, с содержанием, типа, “камера, сделай пожалуйста снимок сама как умеешь, но красиво, и верни мне его в моё activity”.

Но пока времени, хоть и немного нам ещё осталось. Поэтому приступим немедля.

Зачем всё это было нужно Гуглу

Вроде, как всё дело в безопасной и правильной многопоточности (а ещё стало можно делать напрямую всякие эффекты и фильтры ). Вот если в ванильной JAVA вам в случае необходимости надо везде грамотно распихивать мьютексы, синхронайзы и семафоры, то здесь Гугль берет почти всё на себя. Вам надо только прописать в тексте программы коллбэки, которые будут вызываться в случае необходимости. То есть, например, вы подаете запрос на включение камеры:

mCameraManager.openCamera()

Но это не команда, это просьба. Сразу приступить к работе с камерой вы не можете. Во-первых ей надо время на включение, во-вторых у андроида и так полно важных дел, и ваше пожелание ставится в немаленькую очередь. Но зато нам не надо ждать открытия камеры в цикле в главном потоке, вешая всё приложение (все же помнят, что можно делать в UI-потоке, а что нет). Поэтому, мы отправляем свое пожелание и пока занимаемся своими делами, открываем вьюшки, пишем «hello world», настраиваем обработчики кнопок и тому подобное.

Тем временем, через какие-то десятки и сотни миллисекунд у операционной системы, наконец, доходят руки и до камеры и она её инициализирует. А как только камера готова, срабатывает тот самый коллбэк (если конечно вы заранее его прописали)

 private CameraDevice.StateCallback mCameraCallback = new CameraDevice.StateCallback() {

            @Override
            public void onOpened(CameraDevice camera) {
               
    mCameraDevice = camera;
          
                createCameraPreviewSession();
…..
            }

То есть, камера теперь открыта и может что-то там делать: выводить изображение с камеры на вьюшку, пересылать его дальше для сохранения и так далее.

В итоге, вся работа с камерой, по сути, сводится к прописыванию всевозможных коллбэков. Но в своём благородном стремлении разработчики Гугля слегка перегнули палку и как правильно заметил японский товарищ:

Одна из причин почему Camera2 приводит в недоумение, это то насколько много коллбэков надо использовать, чтобы сделать один снимок.

Но и этого мало. Полная схема работы камеры имеет вот такой устрашающий вид

Huawei Nova 8 - обзор фотовозможностей смартфона -

Но к счастью, для начала её можно свести к намного более привлекательной картинке

Huawei Nova 8 - обзор фотовозможностей смартфона -

Хоть там всё и по английски, но как говорится, понятно без слов. Для начала нам хватит такой конструкции. Откроем камеру, выведем изображение на экран смартфона, сделаем снимок и как только он будет готов (снова коллбэки), сработает слушатель этого события и запишет картинку в файл.

Приступаем к творению кода

Создадим новый проект в IDE Android Studio, выберем минимальную версию SDK 22, чтобы избежать зеленых картинок и заказываем empty Activity (а еще лучше взять 23 версию, а то с permissions траблы могут возникнуть). Для начала хватит. Даже разрешений в манифесте пока делать не нужно.

Работу начнём с создания экземпляра класса CameraManager. Это менеджер системного сервиса, который позволяет отыскать доступные камеры, получить их характеристики нужные вам для работы и задать для камер настройки съемки.

А характеристики мы посмотрим следующие:

идентификатор камеры ( 0, 1, 2 ….)
направление куда камера направлена (вперед, назад)
разрешение камеры в пихелях

Сначала мы получаем список камер в виде строкового массива, а затем выводим в цикле требуемые характеристики и пишем их в лог.

package com.example.camera;
import android.content.Context;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;

import android.graphics.ImageFormat;
import android.hardware.camera2.CameraAccessException;
import android.hardware.camera2.CameraCharacteristics;
import android.hardware.camera2.CameraManager;
import android.hardware.camera2.params.StreamConfigurationMap;
import android.os.Build;
import android.os.Bundle;
import android.util.Log;
import android.util.Size;

public class MainActivity extends AppCompatActivity {

    public static final String LOG_TAG = "myLogs";
    String[] myCameras = null;
    private CameraManager mCameraManager    = null;


    @RequiresApi(api = Build.VERSION_CODES.M)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mCameraManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
        try{
            // Получение списка камер с устройства

            myCameras = new String[mCameraManager.getCameraIdList().length];

            // выводим информацию по камере
            for (String cameraID : mCameraManager.getCameraIdList()) {
                Log.i(LOG_TAG, "cameraID: " cameraID);
                int id = Integer.parseInt(cameraID);

           // Получениe характеристик камеры
                CameraCharacteristics cc = mCameraManager.getCameraCharacteristics(cameraID);
           // Получения списка выходного формата, который поддерживает камера
                StreamConfigurationMap configurationMap =
                        cc.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP);

          //  Определение какая камера куда смотрит
                int Faceing = cc.get(CameraCharacteristics.LENS_FACING);

                if (Faceing ==  CameraCharacteristics.LENS_FACING_FRONT)
                {
                    Log.i(LOG_TAG,"Camera with ID: " cameraID    "  is FRONT CAMERA  ");
                }

                if (Faceing ==  CameraCharacteristics.LENS_FACING_BACK)
                {
                    Log.i(LOG_TAG,"Camera with: ID " cameraID    " is BACK CAMERA  ");
                }


         // Получения списка разрешений которые поддерживаются для формата jpeg
                Size[] sizesJPEG = configurationMap.getOutputSizes(ImageFormat.JPEG);

                if (sizesJPEG != null) {
                    for (Size item:sizesJPEG) {
                        Log.i(LOG_TAG, "w:" item.getWidth() " h:" item.getHeight());
                    }
                }  else {
                    Log.i(LOG_TAG, "camera don`t support JPEG");
                }
            }
        }
        catch(CameraAccessException e){
            Log.e(LOG_TAG, e.getMessage());
            e.printStackTrace();
        }
    }
}

Нам эта информация, в принципе, особо и не нужна, любой чайник ещё по предыдущему API и так знает, что камеры имеют идентификаторы от нуля и далее, что разрешением 1920 на 1080 никого не удивишь, а форматом JPEG тем более. По сути, эти данные нужны уже «взрослому» приложению готовому для продакшена и которое на их основе сделает менюшки выбора для пользователя и так далее. В нашем же простейшем случае, в общем, и так все понятно. Но раз все статьи начинают с этого, то и мы начнём.

Убедившись, что фронтальная камера имеет идентификатор номер «1», а задняя «0» (они почему-то заданы в формате String), а также, что разрешение 1920 х 1080 и сохранение файла JPG нам доступны, продолжим наступление.

Получаем нужные permissions

Первоначально нам надо озаботится рядом разрешений. Для этого в манифесте придется прописать следующее:

    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

Первое понятно для камеры, второе для записи картинки в файл (и это не внешняя карта памяти, как могло бы показаться из значения слова EXTERNAL, а вполне себе родная память смартфона)

Но Android тоже заботится о нас, поэтому, начиная с версии Lollipop разрешений прописанных в манифесте будет уже недостаточно. Ныне требуется, чтобы пользователь ручками одобрил своё согласие на открытие камеры и запись данных в память.

Для этого, в самом простом случае, требуется добавить вот это:


 protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
……...

        if (checkSelfPermission(Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED
                ||
                (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED)
        )
        {
            requestPermissions(new String[]{Manifest.permission.CAMERA,Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
        }
…..

Почему же в самом простом? Потому что такие вещи делать в UI – потоке, как известно не надо. Во-первых вешается поток, пока юзер своими корявыми пальцами тыкает в экран, во-вторых, если дальше у вас инициализация камеры, то приложение, вообще может упасть. В данном демонстрационном случае всё нормально, но вообще предписано и для этого случая использовать нужный коллбэк типа:


 @Override

    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {

        if (requestCode == MY_REQUEST_CODE_FOR_CAMERA) {
            if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {

             startCameraActivity(); // запускаем активность с камерой (ну или фрагмент)
        }
      }
    }

Хотя я вот раньше не зная всего этого, запускал нужную Activity через AsyncTask, а ещё раньше просто лепил новый Thread как в Java.

Готовим камеру

Для удобства вынесем всё что связано с камерами в отдельный класс по совету умных людей и создадим класс CameraService. Там мы разместим инициализацию камер и затем пропишем все коллбэки, которые потребуются.

…..

  CameraService[] myCameras = null;

    private CameraManager mCameraManager    = null;
    private final int CAMERA1   = 0;
    private final int CAMERA2   = 1;

  protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

…..

}

   public class CameraService {
        private String mCameraID;
        private CameraDevice mCameraDevice = null;
        private CameraCaptureSession mCaptureSession;

        public CameraService(CameraManager cameraManager, String cameraID) {

            mCameraManager = cameraManager;
            mCameraID = cameraID;
        }

   public boolean isOpen() {

            if (mCameraDevice == null) {
                return false;
            } else {
                return true;
            }
        }


   public void openCamera() {
            try {
                if (checkSelfPermission(Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED) {

                mCameraManager.openCamera(mCameraID,mCameraCallback,null);
                }
            }
           catch (CameraAccessException e) {
                Log.i(LOG_TAG,e.getMessage());
            }
        }


 public void closeCamera() {

            if (mCameraDevice != null) {
                mCameraDevice.close();
                mCameraDevice = null;
            }
        }
}

В главном потоке создаем экземпляр mCameraManager и с его помощью заполним массив объектов myCameras. В данном случае их всего два — фронтальная и селфи камеры.

     mCameraManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
        try{

            // Получение списка камер с устройства

            myCameras = new CameraService[mCameraManager.getCameraIdList().length];

            for (String cameraID : mCameraManager.getCameraIdList()) {
                Log.i(LOG_TAG, "cameraID: " cameraID);
                int id = Integer.parseInt(cameraID);

                // создаем обработчик для камеры
                myCameras[id] = new CameraService(mCameraManager,cameraID);
            }
        }
        catch(CameraAccessException e){
            Log.e(LOG_TAG, e.getMessage());
            e.printStackTrace();
        }

В методе public void openCamera() можно видеть строчку:

 mCameraManager.openCamera(mCameraID,mCameraCallback,null);

именно отсюда ведет дорожка к первому коллбэку состояния камеры

CameraDevice. StateCallback.

Он сообщит нам открыта ли камера, закрыта или может быть вообще ничего там нет и выдаст ошибку. Пропишем его в методах класса CameraService.

   private CameraDevice.StateCallback mCameraCallback = new CameraDevice.StateCallback() {

            @Override
            public void onOpened(CameraDevice camera) {
                mCameraDevice = camera;
                Log.i(LOG_TAG, "Open camera  with id:" mCameraDevice.getId());

                createCameraPreviewSession();
            }

            @Override
            public void onDisconnected(CameraDevice camera) {
                mCameraDevice.close();

                Log.i(LOG_TAG, "disconnect camera  with id:" mCameraDevice.getId());
                mCameraDevice = null;
            }

            @Override
            public void onError(CameraDevice camera, int error) {
                Log.i(LOG_TAG, "error! camera id:" camera.getId() " error:" error);
            }
        };

Соответственно, если камера доступна для работы (сработал метод public void onOpened(CameraDevice camera) {}), то мы именно там пишем дальнейшие наши действия, например, вызов метода createCameraPreviewSession(). Он поможет вывести нам на вьюшку изображение с камеры и работать с ним далее.

CreateCameraPreviewSession

Здесь мы пытаемся вывести изображение (поток данных) на текстуру mImageView, которая уже определена в макете. Можно даже определить с каким именно разрешением в пихелях.

       private void createCameraPreviewSession() {

            SurfaceTexture texture = mImageView.getSurfaceTexture();
   // texture.setDefaultBufferSize(1920,1080);
            Surface surface = new Surface(texture);

            try {
                final CaptureRequest.Builder builder =
                        mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);

                builder.addTarget(surface);
                mCameraDevice.createCaptureSession(Arrays.asList(surface),
                        new CameraCaptureSession.StateCallback() {

                            @Override
                            public void onConfigured(CameraCaptureSession session) {
                                mCaptureSession = session;
                                try {
                                    mCaptureSession.setRepeatingRequest(builder.build(),null,null);
                                } catch (CameraAccessException e) {
                                    e.printStackTrace();
                                }
                            }

                            @Override
                            public void onConfigureFailed(CameraCaptureSession session) { }}, null );
            } catch (CameraAccessException e) {
                e.printStackTrace();
            }
        }

И вот когда эта самая сессия готова, вызывается вышеупомянутый коллбэк и мы начинаем по выражению гуглоделов: «displaying the camera preview». Здесь же желающие могут настроить параметры автофокуса и вспышки, но мы пока обойдемся параметрами по умолчанию.

Творим макет

Теперь нам надо, так сказать, набросать красок на холст и создать гениальную картину в стиле

Huawei Nova 8 - обзор фотовозможностей смартфона -

Процесс это достаточно тривиальный и каждый может здесь развернуться как хочет. Но писать названия кнопок прямо в макете тоже моветон и так в рабочих версиях делать не надо.

Соответственно в самой Activity мы создаем listeners, то есть слушателей для кнопок и вьюшки.

    private Button mButtonOpenCamera1 = null;
    private Button mButtonOpenCamera2 = null;
    private Button mButtonToMakeShot = null;
    private TextureView mImageView = null;

    @RequiresApi(api = Build.VERSION_CODES.M)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

……...

        mButtonOpenCamera1 =  findViewById(R.id.button1);
        mButtonOpenCamera2 =  findViewById(R.id.button2);
        mButtonToMakeShot =findViewById(R.id.button3);
        mImageView = findViewById(R.id.textureView);

        mButtonOpenCamera1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (myCameras[CAMERA2].isOpen()) myCameras[CAMERA2].closeCamera();
                if (myCameras[CAMERA1] != null) {
                    if (!myCameras[CAMERA1].isOpen()) myCameras[CAMERA1].openCamera();
                }
            }
        });

        mButtonOpenCamera2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (myCameras[CAMERA1].isOpen()) myCameras[CAMERA1].closeCamera();
                if (myCameras[CAMERA2] != null) {
                    if (!myCameras[CAMERA2].isOpen()) myCameras[CAMERA2].openCamera();
                }
            }
        });


        mButtonToMakeShot.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v)
            {

             // тут пока пусто

            }
        });


……..

Назначения кнопок понятны из названий, третью кнопку мы пока оставим для будущего снимка.

И если теперь свести все кусочки кода вместе то

получится следующее:
package com.example.camera;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.content.ContextCompat;
import android.Manifest;
import android.content.Context;
import android.content.pm.PackageManager;
import android.graphics.SurfaceTexture;
import android.hardware.camera2.CameraAccessException;
import android.hardware.camera2.CameraCaptureSession;
import android.hardware.camera2.CameraDevice;
import android.hardware.camera2.CameraManager;
import android.hardware.camera2.CaptureRequest;
import android.os.Build;
import android.os.Bundle;
import android.util.Log;
import android.view.Surface;
import android.view.TextureView;
import android.view.View;
import android.widget.Button;

import java.util.Arrays;

public class MainActivity extends AppCompatActivity {


    public static final String LOG_TAG = "myLogs";


    CameraService[] myCameras = null;

    private CameraManager mCameraManager    = null;
    private final int CAMERA1   = 0;
    private final int CAMERA2   = 1;
    private Button mButtonOpenCamera1 = null;
    private Button mButtonOpenCamera2 = null;
    private Button mButtonToMakeShot = null;
    private TextureView mImageView = null;


    @RequiresApi(api = Build.VERSION_CODES.M)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        Log.d(LOG_TAG, "Запрашиваем разрешение");
        if (checkSelfPermission(Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED
                ||
                (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED)
        )
        {
            requestPermissions(new String[]{Manifest.permission.CAMERA,Manifest.permission.WRITE_EXTERNAL_STORAGE},1);
        }


        mButtonOpenCamera1 =  findViewById(R.id.button1);
        mButtonOpenCamera2 =  findViewById(R.id.button2);
        mButtonToMakeShot =findViewById(R.id.button3);
        mImageView = findViewById(R.id.textureView);

        mButtonOpenCamera1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (myCameras[CAMERA2].isOpen()) {myCameras[CAMERA2].closeCamera();}
                if (myCameras[CAMERA1] != null) {
                    if (!myCameras[CAMERA1].isOpen()) myCameras[CAMERA1].openCamera();
                }
            }
        });

        mButtonOpenCamera2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (myCameras[CAMERA1].isOpen()) {myCameras[CAMERA1].closeCamera();}
                if (myCameras[CAMERA2] != null) {
                    if (!myCameras[CAMERA2].isOpen()) myCameras[CAMERA2].openCamera();
                }
            }
        });


        mButtonToMakeShot.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v)
            {


            //    if (myCameras[CAMERA1].isOpen()) myCameras[CAMERA1].makePhoto();
           //     if (myCameras[CAMERA2].isOpen()) myCameras[CAMERA2].makePhoto();

            }
        });


        mCameraManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
        try{
            // Получение списка камер с устройства


            myCameras = new CameraService[mCameraManager.getCameraIdList().length];



            for (String cameraID : mCameraManager.getCameraIdList()) {
                Log.i(LOG_TAG, "cameraID: " cameraID);
                int id = Integer.parseInt(cameraID);


                // создаем обработчик для камеры
                myCameras[id] = new CameraService(mCameraManager,cameraID);




            }
        }
        catch(CameraAccessException e){
            Log.e(LOG_TAG, e.getMessage());
            e.printStackTrace();
        }

    }


    public class CameraService {


        private String mCameraID;
        private CameraDevice mCameraDevice = null;
        private CameraCaptureSession mCaptureSession;

        public CameraService(CameraManager cameraManager, String cameraID) {

            mCameraManager = cameraManager;
            mCameraID = cameraID;

        }

        private CameraDevice.StateCallback mCameraCallback = new CameraDevice.StateCallback() {

            @Override
            public void onOpened(CameraDevice camera) {
                mCameraDevice = camera;
                Log.i(LOG_TAG, "Open camera  with id:" mCameraDevice.getId());

                createCameraPreviewSession();
            }

            @Override
            public void onDisconnected(CameraDevice camera) {
                mCameraDevice.close();

                Log.i(LOG_TAG, "disconnect camera  with id:" mCameraDevice.getId());
                mCameraDevice = null;
            }

            @Override
            public void onError(CameraDevice camera, int error) {
                Log.i(LOG_TAG, "error! camera id:" camera.getId() " error:" error);
            }
        };


        private void createCameraPreviewSession() {



            SurfaceTexture texture = mImageView.getSurfaceTexture();

           texture.setDefaultBufferSize(1920,1080);
            Surface surface = new Surface(texture);

            try {
                final CaptureRequest.Builder builder =
                        mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);

                builder.addTarget(surface);




                mCameraDevice.createCaptureSession(Arrays.asList(surface),
                        new CameraCaptureSession.StateCallback() {

                            @Override
                            public void onConfigured(CameraCaptureSession session) {
                                mCaptureSession = session;
                                try {
                                    mCaptureSession.setRepeatingRequest(builder.build(),null,null);
                                } catch (CameraAccessException e) {
                                    e.printStackTrace();
                                }
                            }

                            @Override
                            public void onConfigureFailed(CameraCaptureSession session) { }}, null );
            } catch (CameraAccessException e) {
                e.printStackTrace();
            }

        }




        public boolean isOpen() {
            if (mCameraDevice == null) {
                return false;
            } else {
                return true;
            }
        }

        public void openCamera() {
            try {

                if (checkSelfPermission(Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED) {


                    mCameraManager.openCamera(mCameraID,mCameraCallback,null);

                }



            } catch (CameraAccessException e) {
                Log.i(LOG_TAG,e.getMessage());

            }
        }

        public void closeCamera() {

            if (mCameraDevice != null) {
                mCameraDevice.close();
                mCameraDevice = null;
            }
        }



    }


    @Override
    public void onPause() {
        if(myCameras[CAMERA1].isOpen()){myCameras[CAMERA1].closeCamera();}
        if(myCameras[CAMERA2].isOpen()){myCameras[CAMERA2].closeCamera();}
        super.onPause();
    }


}

Грузим, запускаем, работает!

Вообще, если вам этого мало, то сам процесс съемки можно значительно разнообразить. Наш японец Томоаки показывает и объясняет как, приведя красивую схему.

Huawei Nova 8 - обзор фотовозможностей смартфона -

Сначала камере надо навести фокус. Обычно это не вызывает проблем, но иногда требует нескольких попыток, которые тоже реализуются через коллбэк

CameraCaptureSession.StateCallback().

Затем камера переходит в режим предварительной съемки PRECAPTURE. На этой стадии камера вычисляет экспозицию, баланс белого и светосилу (когда-то в детстве я знал что это, но теперь эти знания утрачены). Иногда коллбэк может вернуть требование CONTROL_AE_STATE_FLASH_REQUIRED, что означает «хорошо бы включить вспышку». Её можно кстати включить автоматически — setAutoFlash(mPreviewRequestBuilder).

Когда все нужные параметры для съемки определены, то коллбэк возвращает состояние CONTROL_AE_STATE_CONVERGED сигнализирующее нам о том, что камера готова сделать снимок.

На странице гуглоидов, всё это есть уже в примерах, и если у вас хватит терпения пробиться через эти минные поля и проволочные заграждения, то честь тогда вам и хвала.

Делаем снимок и сохраняем картинку в файл

Вот как раз с этого места у меня начались проблемы. Нет, судя по блок-схеме приведенной выше (не японской, а предыдущей) всё как бы не очень сложно. Дожидаемся, когда камера захватит изображение. После обработки классом CamerCaptureSession оно будет доступно в виде объекта Surface, который в свою очередь можно обработать с помощью класса ImageReader.

Правда на то, чтобы создать объект ImageReader опять же надо время. Дожидаемся этого времени мы в очередном слушателе под названием OnImageAvailableListener. И наконец, с помощью инстанса последнего класса ImageSaver сохраняем изображение в файл и естественно делаем это тоже асинхронно, потому как ImageSaver он у нас Runnable.

Проблема была в том, что я никуда не мог пристроить этот ImageReader, поскольку коллбэк CameraCaptureSession.StateCallback() уже был занят под трансляцию видео на вьюшку смартфона. А если я делал новую сессию то Android предсказуемо ругался и крашил приложение. В итоге (не спрашивайте меня как) я сумел скрестить коня и трепетную лань в одном методе createCameraPreviewSession(), который раньше выводил изображение с камеры только на вьюшку.

Вот этот кусок кода до:


private void createCameraPreviewSession() {

            SurfaceTexture texture = mImageView.getSurfaceTexture();
            Surface surface = new Surface(texture);

            try {
                final CaptureRequest.Builder builder =
                        mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);

                builder.addTarget(surface);

                mCameraDevice.createCaptureSession(Arrays.asList(surface),
                        new CameraCaptureSession.StateCallback() …….

А вот он после:

 private ImageReader mImageReader;

 private void createCameraPreviewSession() {

            mImageReader = ImageReader.newInstance(1920,1080,ImageFormat.JPEG,1);
            mImageReader.setOnImageAvailableListener(mOnImageAvailableListener, null);

            SurfaceTexture texture = mImageView.getSurfaceTexture();
            Surface surface = new Surface(texture);

            try {
                final CaptureRequest.Builder builder =
                        mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);

                builder.addTarget(surface);

                mCameraDevice.createCaptureSession(Arrays.asList(surface, mImageReader.getSurface()),
                        new CameraCaptureSession.StateCallback() ……

Разница, если не считать определения инстанса ImageReader вверху, почти неуловима. Всего-то добавили к surface, через запятую mImageReader.getSurface() и всё. Но пока до этого дойдешь…

С этого момента дела пошли веселее и можно было задействовать третью экранную кнопку «Сделать Снимок». При ее нажатии вызывается метод makePhoto() (ну кто бы мог подумать):

 mButtonToMakeShot.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v)
            {
                if (myCameras[CAMERA1].isOpen()) myCameras[CAMERA1].makePhoto();
                if (myCameras[CAMERA2].isOpen()) myCameras[CAMERA2].makePhoto();
            }
        });

……

     public class CameraService {
     public void makePhoto (){
            try {

                // This is the CaptureRequest.Builder that we use to take a picture.
                final CaptureRequest.Builder captureBuilder =
                        mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_STILL_CAPTURE);
                captureBuilder.addTarget(mImageReader.getSurface());
                CameraCaptureSession.CaptureCallback CaptureCallback = new CameraCaptureSession.CaptureCallback() {

                    @Override
                    public void onCaptureCompleted(@NonNull CameraCaptureSession session,
                                                   @NonNull CaptureRequest request,
                                                   @NonNull TotalCaptureResult result) {
                      }
                };

                   mCaptureSession.stopRepeating();
                   mCaptureSession.abortCaptures();
                   mCaptureSession.capture(captureBuilder.build(), CaptureCallback, null);
            }
            catch (CameraAccessException e) {
                e.printStackTrace();
            }
      }

А сразу за ним прописываем слушатель OnImageAvailableListener:

   private final ImageReader.OnImageAvailableListener mOnImageAvailableListener
                = new ImageReader.OnImageAvailableListener() {

            @Override
            public void onImageAvailable(ImageReader reader) {

                { Toast.makeText(MainActivity.this,"фотка доступна для сохранения", Toast.LENGTH_SHORT).show();}
           }
        };

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

А для этого нам потребуется сам файл:

public class CameraService {

private File mFile = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM), "test1.jpg");;

А также специальный объект класса ImageSaver, который быстренько перекачает данные с картинки в байтовый буфер, а оттуда уже в бинарный файл.

Этот класс статический да ещё и Runnable. Поэтому мы его размещаем в самой MainActivity:

 private static class ImageSaver implements Runnable {

        private final File mFile;

        ImageSaver(Image image, File file) {
            mImage = image;
            mFile = file;
        }

        @Override
        public void run() {
            ByteBuffer buffer = mImage.getPlanes()[0].getBuffer();
            byte[] bytes = new byte[buffer.remaining()];
            buffer.get(bytes);
            FileOutputStream output = null;
            try {
                output = new FileOutputStream(mFile);
                output.write(bytes);
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                mImage.close();
                if (null != output) {
                    try {
                        output.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }

А чтобы он сработал, пропишем в слушателе OnImageAvailableListener дополнительно:

mBackgroundHandler.post(new ImageSaver(reader.acquireNextImage(), mFile));

WAIT! OH, SHIT!!

Что ещё за mBackgroundHandler??? Всё же прекрасно работало и без него.

Но на самом деле правильный вопрос — а как оно вообще работало без него? Потому что, как прописано в примерах Гугля BackgroundHandler обеспечивает работу BackgroundThread, который в свою очередь является потоком работающим в фоновом режиме и собственно отвечающим за деятельность камеры. И на самом деле мы должны еще в самом начале нашей Activity прописать:

   private HandlerThread mBackgroundThread;
   private Handler mBackgroundHandler = null;

    private void startBackgroundThread() {
        mBackgroundThread = new HandlerThread("CameraBackground");
        mBackgroundThread.start();
        mBackgroundHandler = new Handler(mBackgroundThread.getLooper());
    }

    private void stopBackgroundThread() {
        mBackgroundThread.quitSafely();
        try {
            mBackgroundThread.join();
            mBackgroundThread = null;
            mBackgroundHandler = null;
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

Мало этого, еще надо добавить запуск и остановку BackgroundThread еще и сюда:

  public void onPause() {
    super.onPause();
        stopBackgroundThread();
   }

    @Override
    public void onResume() {
        super.onResume();
        startBackgroundThread();
    }

Что же касается mBackgroundHandler, то его надо добавить во все наши коллбэки, которые требуют handler и куда мы, не парясь, писали вместо этого null.

Самое интригующее, что этот фоновый поток мы сами НЕ запускаем при открытии приложения, как легко видеть из текста программы. То есть он запускается неявно и без нашей помощи. Зато мы должны его сами останавливать и запускать в режимах onPause() и onResume(). Какое-то здесь противоречие получается.

Но зато теперь картинка успешно сохраняется в файл. В этом легко убедиться запустив приложение. Как говорится, венец трудов превыше всех наград.

Huawei Nova 8 - обзор фотовозможностей смартфона -

Правда картинка почему-то лежит на боку, но решить эту проблему задача уже будущих поколений.

Полный листинг программы
package com.example.camera;
import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.content.ContextCompat;
import android.Manifest;
import android.content.Context;
import android.content.pm.PackageManager;
import android.graphics.ImageFormat;
import android.graphics.SurfaceTexture;
import android.hardware.camera2.CameraAccessException;
import android.hardware.camera2.CameraCaptureSession;
import android.hardware.camera2.CameraDevice;
import android.hardware.camera2.CameraManager;
import android.hardware.camera2.CaptureRequest;
import android.hardware.camera2.TotalCaptureResult;
import android.media.Image;
import android.media.ImageReader;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.HandlerThread;
import android.util.Log;
import android.view.Surface;
import android.view.TextureView;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.util.Arrays;

public class MainActivity extends AppCompatActivity {


    public static final String LOG_TAG = "myLogs";


    CameraService[] myCameras = null;

    private CameraManager mCameraManager    = null;
    private final int CAMERA1   = 0;
    private final int CAMERA2   = 1;

    private Button mButtonOpenCamera1 = null;
    private Button mButtonOpenCamera2 = null;
    private Button mButtonToMakeShot = null;
    private TextureView mImageView = null;
    private HandlerThread mBackgroundThread;
    private Handler mBackgroundHandler = null;



    private void startBackgroundThread() {
        mBackgroundThread = new HandlerThread("CameraBackground");
        mBackgroundThread.start();
        mBackgroundHandler = new Handler(mBackgroundThread.getLooper());
    }

    private void stopBackgroundThread() {
        mBackgroundThread.quitSafely();
        try {
            mBackgroundThread.join();
            mBackgroundThread = null;
            mBackgroundHandler = null;
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }




    @RequiresApi(api = Build.VERSION_CODES.M)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        Log.d(LOG_TAG, "Запрашиваем разрешение");
        if (checkSelfPermission(Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED
                ||
                (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED)
        )
        {
            requestPermissions(new String[]{Manifest.permission.CAMERA,Manifest.permission.WRITE_EXTERNAL_STORAGE},1);
        }


        mButtonOpenCamera1 =  findViewById(R.id.button1);
        mButtonOpenCamera2 =  findViewById(R.id.button2);
        mButtonToMakeShot =findViewById(R.id.button3);
        mImageView = findViewById(R.id.textureView);

        mButtonOpenCamera1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (myCameras[CAMERA2].isOpen()) {myCameras[CAMERA2].closeCamera();}
                if (myCameras[CAMERA1] != null) {
                    if (!myCameras[CAMERA1].isOpen()) myCameras[CAMERA1].openCamera();
                }
            }
        });

        mButtonOpenCamera2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (myCameras[CAMERA1].isOpen()) {myCameras[CAMERA1].closeCamera();}
                if (myCameras[CAMERA2] != null) {
                    if (!myCameras[CAMERA2].isOpen()) myCameras[CAMERA2].openCamera();
                }
            }
        });


        mButtonToMakeShot.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v)
            {




                if (myCameras[CAMERA1].isOpen()) myCameras[CAMERA1].makePhoto();
                if (myCameras[CAMERA2].isOpen()) myCameras[CAMERA2].makePhoto();

            }
        });


        mCameraManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
        try{
            // Получение списка камер с устройства


            myCameras = new CameraService[mCameraManager.getCameraIdList().length];



            for (String cameraID : mCameraManager.getCameraIdList()) {
                Log.i(LOG_TAG, "cameraID: " cameraID);
                int id = Integer.parseInt(cameraID);


                // создаем обработчик для камеры
                myCameras[id] = new CameraService(mCameraManager,cameraID);




            }
        }
        catch(CameraAccessException e){
            Log.e(LOG_TAG, e.getMessage());
            e.printStackTrace();
        }


    }


    public class CameraService {

        private File mFile = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM), "test1.jpg");;
        private String mCameraID;
        private CameraDevice mCameraDevice = null;
        private CameraCaptureSession mCaptureSession;
        private ImageReader mImageReader;




        public CameraService(CameraManager cameraManager, String cameraID) {

            mCameraManager = cameraManager;
            mCameraID = cameraID;

        }

        public void makePhoto (){





            try {
                // This is the CaptureRequest.Builder that we use to take a picture.
                final CaptureRequest.Builder captureBuilder =
                        mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_STILL_CAPTURE);
                captureBuilder.addTarget(mImageReader.getSurface());
                CameraCaptureSession.CaptureCallback CaptureCallback = new CameraCaptureSession.CaptureCallback() {

                    @Override
                    public void onCaptureCompleted(@NonNull CameraCaptureSession session,
                                                   @NonNull CaptureRequest request,
                                                   @NonNull TotalCaptureResult result) {


                    }
                };

                mCaptureSession.stopRepeating();
                mCaptureSession.abortCaptures();
                mCaptureSession.capture(captureBuilder.build(), CaptureCallback, mBackgroundHandler);
            }
            catch (CameraAccessException e) {
                e.printStackTrace();


            }




        }


        private final ImageReader.OnImageAvailableListener mOnImageAvailableListener
                = new ImageReader.OnImageAvailableListener() {

            @Override
            public void onImageAvailable(ImageReader reader) {

                mBackgroundHandler.post(new ImageSaver(reader.acquireNextImage(), mFile));


            }

        };


        private CameraDevice.StateCallback mCameraCallback = new CameraDevice.StateCallback() {

            @Override
            public void onOpened(CameraDevice camera) {
                mCameraDevice = camera;
                Log.i(LOG_TAG, "Open camera  with id:" mCameraDevice.getId());

                createCameraPreviewSession();
            }

            @Override
            public void onDisconnected(CameraDevice camera) {
                mCameraDevice.close();

                Log.i(LOG_TAG, "disconnect camera  with id:" mCameraDevice.getId());
                mCameraDevice = null;
            }

            @Override
            public void onError(CameraDevice camera, int error) {
                Log.i(LOG_TAG, "error! camera id:" camera.getId() " error:" error);
            }
        };


        private void createCameraPreviewSession() {

            mImageReader = ImageReader.newInstance(1920,1080, ImageFormat.JPEG,1);
            mImageReader.setOnImageAvailableListener(mOnImageAvailableListener, null);

            SurfaceTexture texture = mImageView.getSurfaceTexture();

           texture.setDefaultBufferSize(1920,1080);
            Surface surface = new Surface(texture);

            try {
                final CaptureRequest.Builder builder =
                        mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);

                builder.addTarget(surface);




                mCameraDevice.createCaptureSession(Arrays.asList(surface,mImageReader.getSurface()),
                        new CameraCaptureSession.StateCallback() {

                            @Override
                            public void onConfigured(CameraCaptureSession session) {
                                mCaptureSession = session;
                                try {
                                    mCaptureSession.setRepeatingRequest(builder.build(),null,mBackgroundHandler);
                                } catch (CameraAccessException e) {
                                    e.printStackTrace();
                                }
                            }

                            @Override
                            public void onConfigureFailed(CameraCaptureSession session) { }}, mBackgroundHandler);
            } catch (CameraAccessException e) {
                e.printStackTrace();
            }

        }




        public boolean isOpen() {
            if (mCameraDevice == null) {
                return false;
            } else {
                return true;
            }
        }

        public void openCamera() {
            try {

                if (checkSelfPermission(Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED) {


                    mCameraManager.openCamera(mCameraID,mCameraCallback,mBackgroundHandler);

                }



            } catch (CameraAccessException e) {
                Log.i(LOG_TAG,e.getMessage());

            }
        }

        public void closeCamera() {

            if (mCameraDevice != null) {
                mCameraDevice.close();
                mCameraDevice = null;
            }
        }



    }


    @Override
    public void onPause() {
        if(myCameras[CAMERA1].isOpen()){myCameras[CAMERA1].closeCamera();}
        if(myCameras[CAMERA2].isOpen()){myCameras[CAMERA2].closeCamera();}
        stopBackgroundThread();
        super.onPause();
    }

    @Override
    public void onResume() {
        super.onResume();
        startBackgroundThread();


    }


    private static class ImageSaver implements Runnable {

        /**
         * The JPEG image
         */
        private final Image mImage;
        /**
         * The file we save the image into.
         */
        private final File mFile;

        ImageSaver(Image image, File file) {
            mImage = image;
            mFile = file;
        }

        @Override
        public void run() {
            ByteBuffer buffer = mImage.getPlanes()[0].getBuffer();
            byte[] bytes = new byte[buffer.remaining()];
            buffer.get(bytes);
            FileOutputStream output = null;
            try {
                output = new FileOutputStream(mFile);
                output.write(bytes);
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                mImage.close();
                if (null != output) {
                    try {
                        output.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
}

Галерея huawei nova 8

Как перезагрузить телефон huawei, если он завис и не выключается | перезагрузка без кнопки включения – huawei devices


Автор:Михаил

26-07-2021

21
час. 53
мин.

Сообщение:

Огромное спасибо! Помог первый способ!


Автор:Андрей

09-03-2021

23
час. 09
мин.

Сообщение:

Все класс , помог и первый способ , полезная инфа


Автор:Артём

17-02-2021

22
час. 43
мин.

Сообщение:

Помогло кнопка питания 10С.HUAWEI Y7


Автор:Григорий

01-02-2021

17
час. 13
мин.

Сообщение:

Помогло, спасибо большое.


Автор:Андрей

27-12-2020

22
час. 51
мин.

Сообщение:

Супер, перезавантажив у5 и запустився. Дякую.


Автор:Надежда

16-11-2020

20
час. 24
мин.

Сообщение:

10секунд на кнопке включения


Автор:Надежда

16-11-2020

20
час. 21
мин.

Сообщение:

Спасибо-спасибо-спасибо!!! для моего HUAWEI VNS-L21 хватило 10 секунд!


Автор:Муслимхон

13-09-2020

17
час. 10
мин.

Сообщение:

У меня не работают кнопка включения. Что надо делать? У меня Huawei y5 2021. Пожалуйста помогите!!!!


Автор:александра

16-08-2020

22
час. 24
мин.

Сообщение:

16 08 2020 22 22 HUAWEI Y3 помог первый способ спасибо


Автор:Марк

12-07-2020

14
час. 04
мин.

Сообщение:

у мене не один варант отвэта не памог у меня HUAWEI P 30 PRO


Автор:Елена

26-05-2020

13
час. 44
мин.

Сообщение:

Спасибо. Первый способ помог на хонор 8А(вообще ни на что не реагировал просто чёрный экран был)


Автор:Ксения

22-05-2020

11
час. 06
мин.

Сообщение:

Хонор 7с. Помогло нажатие кнопки “питание” в теч 10 сек


Автор:Галина

19-05-2020

23
час. 40
мин.

Сообщение:

Спасибо огромное! Помогло долгое удерживание кнопки питания. Перезагрузился и все в порядке). Уже половину дня сижу без телефона – ни на что не реагировал.HUAWEY Y6. Батарея не съемная.


Автор:Кирилл

16-05-2020

14
час. 29
мин.

Сообщение:

Спасибо за это


Автор:Вероника

18-04-2020

21
час. 15
мин.

Сообщение:

Спасибо большое помог 1 способ.


Автор:наталия

11-04-2020

12
час. 08
мин.

Сообщение:

Помогло нажатие 15 сек. Спасибо!


Автор:Виктор

03-04-2020

07
час. 30
мин.

Сообщение:

Ознакомился. Помогло нажатие 15 сек. HUAWEY Y5 был полный стопор – отпустил. Спасибо!


Автор:Lisenok

08-03-2020

10
час. 55
мин.

Сообщение:

Ни чего не помогло. Хонор 6х выключается и тут же включается. Даже при нажатии всех клавиш.


Автор:Николай

23-01-2020

19
час. 35
мин.

Сообщение:

Нажал кнопку отключение и держал секунд 15, отключиться. Спасибо за подсказку.


Автор:Регина Бедина

19-01-2020

17
час. 52
мин.

Сообщение:

Хонор 7а. Кнопка перезагрузки👍


Автор:Александр

29-12-2021

19
час. 58
мин.

Сообщение:

Хонор 7а кнопка питания. Спасибо.


Автор:Елена

13-12-2021

12
час. 34
мин.

Сообщение:

Большое спасибо,помог 2 й способ.Уже расстроилась,но все гениальное просто.


Автор:Кунсулу

24-11-2021

11
час. 10
мин.

Сообщение:

Благодарю. Помог 1й способ. На 10й секунде телефон ожил.


Автор:Наталья

23-11-2021

17
час. 40
мин.

Сообщение:

Всё гениальное просто!))) Huawei Y5 “отвис”!!! Стоило дольше обычного подержать нажатой кнопку питания))) Спасибо, ребята!)


Автор:Лена

23-11-2021

04
час. 45
мин.

Сообщение:

Huawei p30 pro . помог второй способ.


Автор:Макс

27-10-2021

14
час. 15
мин.

Сообщение:

Спасибо. Y7 помог пепвый способ, секунд тридцать пришлось держать.


Автор:Михаил

08-10-2021

17
час. 37
мин.

Сообщение:

Завис хуавэй после перезагрузки продолжил лагать,что делать??


Автор:Nata

07-10-2021

15
час. 37
мин.

Сообщение:

Спасибо огромное. Очеееень помогло.


Автор:Зоя

10-09-2021

14
час. 30
мин.

Сообщение:

Хуавей 6 первый способ помог перезагрузить и теперь я могу дозвониться и принять звонки. А то звонки не осуществляется и кнопка выключения не функционировала. Теперь все работает нормально


Автор:Людмила

06-09-2021

12
час. 40
мин.

Сообщение:

Спасибо!Мне помогло 15-ти секундное удержание кнопки питания,телефон перезагрузился.Не знала,что можно так долго удерживать кнопку. Модель HUAWEI MT7-L09


Автор:Флера

29-08-2021

14
час. 22
мин.

Сообщение:

Спасибо за помощь, всё получилось, зделала всё как написано и хуавей заработал


Автор:Дмитрий

23-08-2021

07
час. 09
мин.

Сообщение:

огромное спасибо за информацию, все помогло. получился второй вариан)))) ура


Автор:Михаил

01-08-2021

12
час. 51
мин.

Сообщение:

Помог 1 способ советую смотреть тут завис хонор 7с ставлю 5 звезд


Автор:Олег

23-07-2021

16
час. 57
мин.

Сообщение:

Автор:Гость 09-07-2021 13 час. 41 мин. Сообщение: Здравствуйте! Огромное спасибо! как мне повезло что я увидела ваш сайт! помогло кнопка выключение и , на – не помог! Первый раз такое с телефоном случилось. Что за атака на Хонор!? политика мне ни один из способов не помог


Автор:Оксана

18-07-2021

16
час. 28
мин.

Сообщение:

Доброго времени суток!huawei p9 lite 2021 года не выходит из меню recowery после неудачного обновления системы,пробовала предложенные способы перезагрузки-возвращается в меню снова и снова,батарея не съёмная. Нужен совет. Спасибо заранее.


Автор:Александр

13-07-2021

12
час. 03
мин.

Сообщение:

Пробывал способ пит- , Выводит меню перезагрузки потверждаю, грузит, но все равно на исходное возвращается


Автор:Ирина

10-07-2021

13
час. 25
мин.

Сообщение:

Здравствуйте! Огромное спасибо за информацию. У меня Huawei Lait20 вырубился, я думала это все… Помогла вторая комбинация действтий.


Автор:Гость

09-07-2021

13
час. 41
мин.

Сообщение:

Здравствуйте! Огромное спасибо! как мне повезло что я увидела ваш сайт! помогло кнопка выключение и , на – не помог! Первый раз такое с телефоном случилось. Что за атака на Хонор!?


Автор:Ярослав

06-07-2021

15
час. 06
мин.

Сообщение:

Ничего не помогло


Автор:Валерия

02-07-2021

23
час. 29
мин.

Сообщение:

Помог первый способ, HUAWEI Mate 20 lite. Спасибо


Автор:Дарья

02-07-2021

11
час. 04
мин.

Сообщение:

Хонор 10!сначало долго глючил а на третий день вообще выключился! Из выше указаных способов вообще ничего не помогло! Не знаю что теперь с ним делать!


Автор:Оксана

01-07-2021

18
час. 29
мин.

Сообщение:

Помог первый способ Huawei Honor 7 очень выручили


Автор:Валерия

25-06-2021

18
час. 27
мин.

Сообщение:

Помог первый способ, HUAWEI Mate 20 lite. Спасибо


Автор:Elena Kozhukhar

28-05-2021

13
час. 05
мин.

Сообщение:

Спасибо! Выручили! ♥


Автор:Наталья

26-05-2021

18
час. 00
мин.

Сообщение:

Кнопки не помогли, вынимание акка да. на андроиде самсунг удержание питания всегда работает


Автор:Лариса

16-05-2021

08
час. 03
мин.

Сообщение:

Нашла этот сайт после двух таких зависаний, через полгода пользования появилось, модель Y6 хуавей, с каждой установкой обновлений телефон работает все хуже, после зависаний много раз вытаскивала симку, не помогало, удерживала кнопку питания по 10-20 сек, не помогало, в этот раз с психу просто нажала и очень долго дежала, вот тогда и включился, после этого и нашла ваш сайт, незнаю что будет дальше, мягко говоря разочаровалась в телефоне.


Автор:влад

12-05-2021

20
час. 36
мин.

Сообщение:

вы топ


Автор:Юля

12-05-2021

12
час. 55
мин.

Сообщение:

Спасибо большое. Первый способ помог.


Автор:Юрий

05-05-2021

15
час. 56
мин.

Сообщение:

Пробовал жать кнопки согласно рекомендации, результата ноль


Автор:Юрий

05-05-2021

15
час. 54
мин.

Сообщение:

Телефон повис во время зарядки через 5 дней использования. Экран при включении еле синий, входящие вызовы идут. Модел HUAWEI Y6 2021


Автор:Юля

01-05-2021

12
час. 29
мин.

Сообщение:

Дуже дякую, допоміг перший спосіб, кнопку виключення тримала, але не 15 секунд. Модель телефона Huawei Y5 (2021)


Автор:Зарина

16-04-2021

11
час. 55
мин.

Сообщение:

спасибо большое!!!


Автор:Ангелина

14-04-2021

15
час. 40
мин.

Сообщение:

Не могла включить телефон, после прочтения совета удалось включить удерживая обе кнопки! Спасибо!


Автор:Татьяна

11-04-2021

07
час. 08
мин.

Сообщение:

Благодарю, ваш совет на длительное удерживание нажатия двух кнопок помог решить вопрос


Автор:Любовь

29-03-2021

19
час. 40
мин.

Сообщение:

большое спасибо, одновременное нажатие кнопок оживило телефон Хонор 7 с


Автор:Ольга

27-03-2021

20
час. 27
мин.

Сообщение:

Спасибо большое, помогло длительное удержание кнопки питания, забыла про это. У меня Honor 8 Lite.


Автор:wojaka

22-03-2021

15
час. 32
мин.

Сообщение:

Помогло кратковременное подключение к компу.


Автор:Евгения

21-03-2021

15
час. 10
мин.

Сообщение:

Спасибо большое за совет, 10 секунд подержала кнопку вкл/выкл


Автор:Евгения

28-02-2021

15
час. 50
мин.

Сообщение:

Телефон висит в голубок экране((( Попробовала все комбинации клавиш для включения и перезагрузки… моргнет и снова висит в голубом экране ((( У кого-нибудь такое было?


Автор:Вероника

27-02-2021

23
час. 13
мин.

Сообщение:

Спасибо, помогло У меня хонер 7а про


Автор:Эдуард

16-02-2021

09
час. 58
мин.

Сообщение:

Спасибо за совет помогло


Автор:Татьяна

15-02-2021

17
час. 36
мин.

Сообщение:

Огромное спасибо! Вы меня спасли!


Автор:Слава

05-02-2021

16
час. 37
мин.

Сообщение:

Спасибо, у меня телефон хонор 5 икс, поддержал кнопку питания и всё прошло


Автор:Анна

31-01-2021

12
час. 44
мин.

Сообщение:

Планшет хайвей т1-701у не реагировал тачскрин, перезагрузила долгим нажатием на вкл. Секунд 20-30, все заработало


Автор:olga

05-01-2021

00
час. 17
мин.

Сообщение:

нажать и держать кнопку выкл 15 сек идеально сработало!!! Спасибо за совет!


Автор:Мария

04-01-2021

12
час. 58
мин.

Сообщение:

Спасибо. Помог второй вариант. Телефон завис от игры


Автор:Наталья Щукина

03-01-2021

19
час. 47
мин.

Сообщение:

Вышеуказанные способы не помогали, завис так, что не реагировал ни на какие кнопки. Сделала следующее:вытащила сим карты и флешку (боковой слот), при этом телефон проснулся и предложил перезагрузиться, так как в настройках было сохранение информации на флешку. Флешку вытащили, телефон предлагает сохранять на внутреннюю память, а для этого перезагрузиться. Я, естественно, соглашаюсь. Телефон Honor7.


Автор:таша

28-12-2021

09
час. 35
мин.

Сообщение:

Спасибо,огромное,Ваша статья помогла,думала уже выкидывать телефон


Автор:Галина

10-12-2021

13
час. 32
мин.

Сообщение:

Спасибо большое не знала что делать очень помог способ удерживать кнопку питания и уменьшить звук


Автор:Елена

15-11-2021

08
час. 58
мин.

Сообщение:

Первый! Спасибо за помощь!


Автор:Лили

11-11-2021

14
час. 50
мин.

Сообщение:

Спасибо большое! я нажала кнопки все сразую и мой любимый и хороший смартфон выключился.наконец.и потом перезагрузился сам,большое вам спасибо!!!


Автор:Natalia

07-11-2021

15
час. 07
мин.

Сообщение:

Огромное спасибо! Долгое нажатие кнопки “питание” помогло!


Автор:Игорь

30-10-2021

23
час. 20
мин.

Сообщение:

Жал питание,перезагрузка с 11 секунды.Благодарю помогло!


Автор:Юлия

17-10-2021

17
час. 51
мин.

Сообщение:

Большое спасибо. Вы очень помогли. С уважением, Юлия


Автор:Ivan Ukhabin

14-10-2021

08
час. 04
мин.

Сообщение:

ничего не помогло. Телефон запищал и я его выключил подождал чуть чуть решил включить а он не включается. Что не делал заряжал как вышеуказанное делал ничего не выходит. Помогите если знаете как решить у меня Honor 6a


Автор:Евгений

11-10-2021

18
час. 36
мин.

Сообщение:

Помог первый способ. Надо дольше держать кнопку ” питание ”


Автор:Игорь

06-10-2021

08
час. 51
мин.

Сообщение:

Огромное вам спасибо!!!Так бы не знаю, что делал


Автор:Станислав

26-09-2021

21
час. 37
мин.

Сообщение:

Если не помогли никакие вышеуказанные способы, то заворачиваете смартфон в герметичный полиэтиленовый мешочек и ложите в морозильную камеру холодильника. При замерзании апрарат выключается. Затем не вытаскивая из мешочка (во избежание образования конденсата в смартфоне) нагреваете смартфон до комнатной температуры и включаете. Аппарат ожил!


Автор:Екатерина

29-08-2021

07
час. 05
мин.

Сообщение:

Спасибо первый способ помог


Автор:Анжелика

25-08-2021

15
час. 48
мин.

Сообщение:

Здравствуйте! Скажите, что мне нужно сделать, чтобы устранить системную неполадку в Honor 6C.


Автор:Натали

16-08-2021

19
час. 19
мин.

Сообщение:

Спосибо большое !помогло.удерживала кнопку питания.


Автор:Тамара

09-08-2021

15
час. 37
мин.

Сообщение:

Спасибо, первый способ помог!


Автор:Роман

04-08-2021

08
час. 26
мин.

Сообщение:

Honor7a первый способ помог. Спасибо!


Автор:Вилли

02-08-2021

05
час. 57
мин.

Сообщение:

Спасибо, первый способ помог. Хонор 8 лайт.


Автор:Анатолий

30-07-2021

13
час. 15
мин.

Сообщение:

Спасибо! Хуавей р9 завис. Подержал кнопку включения 15 секунд и оля-ля..)) все работает! Спасибище!!!


Автор:Света

28-07-2021

14
час. 31
мин.

Сообщение:

Р8 просто подольше держать кнопку


Автор:Милена

19-07-2021

16
час. 12
мин.

Сообщение:

питание 2 кнопки громкости. везде ерунду пишут, а у вас работает без сервиса))


Автор:Катерина

17-07-2021

19
час. 56
мин.

Сообщение:

спасибо огромное за совет, помогло, вроде среагировал и перезагрузился))))


Автор:D.f

15-07-2021

09
час. 42
мин.

Сообщение:

Помог один способ. Подержать 15 сек кнопку питания. Телефон перезагрузился и стал реагировать.


Автор:Екатерина

12-07-2021

10
час. 17
мин.

Сообщение:

Здравствуйте! спасибо, огромное за Ваш совет. у меня сегодня завис мой Honor 8. я уже и не знала, что делать. С телефонами. со съёмными батареями было проще-снял батарею и всё заработало. Хорошо, что сразу нашла Ваш сайт и Ваши советы. Помогло одновременное нажатие на кнопку громкости и питания. Спасибо, человеческое!)


Автор:михаил нечепаев

11-07-2021

21
час. 59
мин.

Сообщение:

андроид хуавейй модель cro-l22 второй способ помог


Автор:Morgan

11-07-2021

19
час. 57
мин.

Сообщение:

первый способ!


Автор:Вика

10-07-2021

14
час. 03
мин.

Сообщение:

Первый способ помог хонор 6А


Автор:анна

02-07-2021

11
час. 56
мин.

Сообщение:

Спасибо большое за информацию


Автор:Юлия

21-06-2021

07
час. 55
мин.

Сообщение:

Здравствуйте. А почему он вообще зависает? Какова изначальная причина? Телефону пол года. И может ли такое являться заводским браком? Спасибо


Автор:Андрей

18-06-2021

14
час. 23
мин.

Сообщение:

Огромное спасибо, для honor 5x помог первый способ, поддержали кнопку секунд 12-13 и он перезагрузился.


Автор:Наталья

15-06-2021

09
час. 05
мин.

Сообщение:

Помог второй способ, Хуавей а5


Автор:Влада Неупокоева

13-06-2021

18
час. 55
мин.

Сообщение:

помог первый способ,модель телефона хуавей Y7


Автор:Мила

25-05-2021

18
час. 59
мин.

Сообщение:

спасибо большое! Помог второй способ!!!


Автор:КоляН

23-05-2021

16
час. 07
мин.

Сообщение:

Спасибо первый способ помог


Автор:Юлия

21-05-2021

21
час. 40
мин.

Сообщение:

Нам помог первый способ, спасибо большое!!!


Автор:Кузека

21-05-2021

14
час. 47
мин.

Сообщение:

Хуавей, помог первый способ 15 сек держать на кнопку вкл выкл., перезагрузился, работает. Спасибо


Автор:Валерий

19-05-2021

17
час. 41
мин.

Сообщение:

Хорошо, спасибо. А далее что, перепрошивать? Ведь “фокус” повторяется..


Автор:Александр

16-05-2021

15
час. 04
мин.

Сообщение:

Спасибо, помогло. Красавчики


Автор:Анна

16-05-2021

10
час. 58
мин.

Сообщение:

Спасибище огромное


Автор:Елена

14-05-2021

14
час. 00
мин.

Сообщение:

Добрый день. У меня такая проблема. После ночи, когда включаю планшет, вай фай включается но не подключается к моему. И потом на экране я не могу его выключить. Он просто не реагирует на выключение. Только после того как я выключаю планшет, он включается и потом подключается к вайфаю. Что это может быть?


Автор:Марк

13-05-2021

11
час. 05
мин.

Сообщение:

Первый способ помог! Honor 8 4/64


Автор:Юрий

12-05-2021

10
час. 17
мин.

Сообщение:

Перший способ ! Спасибо!Y 6 pro


Автор:Артур

08-05-2021

22
час. 02
мин.

Сообщение:

Величезна подяка. Перший спосіб подіяв. Ви врятували мою психіку. ))


Автор:Карина

27-04-2021

23
час. 01
мин.

Сообщение:

Honor 6a просто резко завис, помог первый способ, подержала где-то пол минутки. Спасибо)


Автор:Елена

22-04-2021

17
час. 00
мин.

Сообщение:

СПасибо, получилось)


Автор:Дарья

20-04-2021

08
час. 38
мин.

Сообщение:

Всё перепробовала нечего не помогает!SOS!


Автор:Виктор

16-04-2021

13
час. 17
мин.

Сообщение:

ОГРОМНЕЙШЕЕ СПАСИБО! Первый способ СПАСИТЕЛЬНЫЙ!УВАЖЕНИЕ МАСТЕРАМ!


Автор:Оля

13-04-2021

00
час. 24
мин.

Сообщение:

Огромное при огромное спасибо, помог первый способ, прямо камень с души упал)))))))


Автор:руслана

11-04-2021

23
час. 33
мин.

Сообщение:

очень большое спасиба,чтобы я без вас делала,у меня чуть сердце не остоновилось от волнования..люблю вас


Автор:Настя

07-04-2021

15
час. 33
мин.

Сообщение:

Спасибо! Первый способ помог


Автор:Татьяна

03-04-2021

21
час. 40
мин.

Сообщение:

Супер!!! Спасибо большое! Первый способ помог!!!


Автор:анастасия

31-03-2021

11
час. 09
мин.

Сообщение:

Cпасибо огромное!Очень помог 1 способ.Телефон лежал вечера и не выключался.


Автор:Анна

30-03-2021

10
час. 35
мин.

Сообщение:

30-03-2021 Спасибо. Первый способ помог.


Автор:Станислав

24-03-2021

10
час. 47
мин.

Сообщение:

первый способ помог. огромное спасибо за совет. очень благоарен


Автор:Наталья

23-03-2021

20
час. 25
мин.

Сообщение:

Ваш совет помог, подержала кнопку включения и отключения телефона секунд 15-20 и он отключился.до этого часа 3 не выключался.Спасибо.


Автор:Наталья

18-03-2021

03
час. 45
мин.

Сообщение:

Спасибо большое! Первый способ помог


Автор:Анастасия

15-03-2021

16
час. 50
мин.

Сообщение:

Спасибо большое! Мне помог 1 способ.


Автор:Vera

13-03-2021

20
час. 22
мин.

Сообщение:

Спасибо за инфо,мне помагло


Автор:Bogdan Barsky

11-03-2021

01
час. 01
мин.

Сообщение:

СПАСИБО ВАМ БОЛЬШОЕ 1 СПОСОБ ПОМОГ!


Автор:Сергей

09-03-2021

08
час. 43
мин.

Сообщение:

перезагрузил A6 кнопками ВКЛ ПОВЫШЕНИЕ ГРОМКОСТИ.но у меня вопрос-отчего зависает?тлфн практически новый.неделя с салона.глюк-белый экран.может кто знает?


Автор:Игорь Петрович

08-03-2021

11
час. 00
мин.

Сообщение:

после зависания телефона hauwei 2021г. длительное удержание кнопки отключения помогло- тел. перезагрузился. Спасибо!


Автор:Лілія Чарівна

05-03-2021

16
час. 19
мин.

Сообщение:

Дуже дякую за допомогою! )


Автор:ксения

27-02-2021

18
час. 03
мин.

Сообщение:

помог 1способ .honor 6A


Автор:светлана

19-02-2021

21
час. 29
мин.

Сообщение:

телефон отключился. но теперь он не включается. на зарядку не реагирует не как.


Автор:Евгения

17-02-2021

12
час. 31
мин.

Сообщение:

Спасибо большое! Помог второй способ. Телефон хуавей.


Автор:Андрей

12-02-2021

11
час. 15
мин.

Сообщение:

Телефон Honor 8 lite примитивные способы не помогают телефон включается и зависает на логотипе Хонор и все пробовал снимать батарею не помогло, что делать?


Автор:сергей

09-02-2021

18
час. 04
мин.

Сообщение:

На морозе сел телефон и перестал реагировать на зарядку. При перезагрузке сразу выключался. Помог способ № 2 (питание и уменьшение звука). Держал до тех пор пока не пошла зарядка. телефон Honor 8


Автор:Лиза

28-01-2021

11
час. 17
мин.

Сообщение:

Спасибо. помог 1 способ для телефона honor 6A.


Автор:Виктория

26-01-2021

23
час. 37
мин.

Сообщение:

Мне помог первый способ! СПАСИБО БОЛЬШУЩЕЕ!!!


Автор:ольга

22-01-2021

21
час. 48
мин.

Сообщение:

ХУАВЕЙ НОВА 2 ЗАВИС НА КАМЕРЕ, ПЕРЕЗАГРУЗИЛСЯ ЧЕРЕЗ 15 СЕК ПОСЛЕ УДЕРЖАНИЯ КНОПКИ “ПИТАНИЕ”


Автор:Сергей

14-01-2021

18
час. 08
мин.

Сообщение:

Хуавей MediaPad T 1 8.0 перезапустился после 9 секунд


Автор:александр

14-01-2021

13
час. 31
мин.

Сообщение:

хонор-9 ожил через 9секунд


Автор:Алекс

13-01-2021

19
час. 20
мин.

Сообщение:

Спасибо, первый вариант помог секунд через 7. Планшет MediaPad T3


Автор:Юрий

12-01-2021

17
час. 21
мин.

Сообщение:

Спасибо за помощь.Помог первый вариант-секунд через 6-8. Просто и супер.


Автор:Неля

11-01-2021

00
час. 24
мин.

Сообщение:

Здравствуйте! Что делать если смартфон не реагирует на команды после перезагрузки и выключения то же самое?


Автор:Александр

08-01-2021

18
час. 42
мин.

Сообщение:

Спасибо, первый вариант помог, а я чуть было не понес к мастерам.


Автор:ильдар

07-01-2021

17
час. 54
мин.

Сообщение:

Спасибо большое ,помог первый вариант.


Автор:Павел

04-01-2021

17
час. 42
мин.

Сообщение:

хонор 4с pro Помог 1 способ.


Автор:Анастасия

01-01-2021

16
час. 59
мин.

Сообщение:

огромное спасибо, нам помог первый способ. удерживали секунд 10.но потом дали минуту отдохнуть и спокойно включили.


Автор:Анатолій

30-12-2021

13
час. 41
мин.

Сообщение:

Добрий день мени непидходять два способа. Хард резет тож непомога. Поможить будь ласка.


Автор:Алексей

27-12-2021

18
час. 26
мин.

Сообщение:

Да, помогли рекомендации с сайта.Спасибо.Хуавей Y3 2021 не реагировал ни на что.Батарея не съемная. Помогло длительное нажатие кнопки питания , секунд 15-20.


Автор:Оксана

24-12-2021

04
час. 17
мин.

Сообщение:

Огромное спасибо за помощь,помогла вторая комбинация,и все данные сохранены!)))))))


Автор:Екатерина

19-12-2021

23
час. 39
мин.

Сообщение:

Спасибо вам, первый способ помог оживить телефон!


Автор:Светлана

16-12-2021

10
час. 43
мин.

Сообщение:

Спасибо первый вариант помог!)))


Автор:Дане

13-12-2021

21
час. 37
мин.

Сообщение:

Все помогает. Проблема в том что все время зависет. Даже месяца нет как купили.обидно. что можно сделать?


Автор:Alena

11-12-2021

18
час. 00
мин.

Сообщение:

Огромное спасибо, я этот способ уже использовала, в прошлый раз помог способ 2, а в этот раз сначала держала соответственно 1 варианту, но держала мало, сейчас прочла вновь статью и держала дольше – помогло)))))))))))))


Автор:Ирина

10-12-2021

20
час. 37
мин.

Сообщение:

Ребята, огромное спасибо. Ведь просто не знала что делать долгое время. Помог способ № 2!!! Молодцы!!!


Автор:Ольга

27-11-2021

17
час. 28
мин.

Сообщение:

Спасибо второй способ помог


Автор:Катя

23-11-2021

00
час. 51
мин.

Сообщение:

Спасибо!Помог первый способ (Хуавей Р8)


Автор:Елена

22-11-2021

20
час. 01
мин.

Сообщение:

Спасибо огромное, получилось перезагрузить


Автор:Елена

10-10-2021

09
час. 03
мин.

Сообщение:

Огромное Вам спасибо за помощь! Все получилось! Помог первый способ.


Автор:Алексей

01-10-2021

21
час. 07
мин.

Сообщение:

всё получилось с первым способом, спасибо


Автор:руслан

01-10-2021

15
час. 31
мин.

Сообщение:

Ребят спасибо огромное, у меня заел планшет поддержал кнопку питания около 20-и секунд и он включился, вы лучшие!!!!


Автор:Николай

15-09-2021

17
час. 16
мин.

Сообщение:

у меня hyawel y3 мне поиог первый способ спасибо

Оцените статью
Huawei Devices
Добавить комментарий