С Новым годом! Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
0 / 0 / 1
Регистрация: 15.12.2019
Сообщений: 107

Android Studio. Как дать приложению возможность использовать фронтальную вспышку?

15.12.2019, 20:05. Показов 1821. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
На устройстве имеется 2 вспышки - основная и фронтальная (на передней части телефона)
Уже написал приложение "фонарик", которое при нажатии кнопки включает основной фонарик. Мне нужно, чтобы так же можно было на вторую кнопку включать фронтальный. Как это можно реализовать? Для фронтального фонаря есть какие-то специальные разрешения?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.12.2019, 20:05
Ответы с готовыми решениями:

Как подключить к приложению уже готовую базу данных в Android Studio?
Здравствуйте. Есть готовая модель базы данных, созданная в ERwin Data Modeler, и сгенерированная в Access. Как в Android Studio в...

Как дать своему приложению привилегии Root?
Нужно записать данные в файл, который имеет права доступа RW-R--R--, соответственно нужен рут. Следующий код не пишет в файл, получаю...

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

3
93 / 66 / 27
Регистрация: 23.06.2019
Сообщений: 477
15.12.2019, 22:39
https://stackoverflow.com/ques... h-of-phone
0
0 / 0 / 1
Регистрация: 15.12.2019
Сообщений: 107
19.02.2020, 18:20  [ТС]
Вообщем, уже сколько времени прошло, а у меня так и не получилось реализовать эту идею.
Что я делаю не так?

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
import android.os.Bundle;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.pm.PackageManager;
import android.hardware.Camera;
import android.hardware.camera2.CameraAccessException;
import android.hardware.camera2.CameraCharacteristics;
import android.hardware.camera2.CameraManager;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
 
public class MainActivity extends AppCompatActivity {
 
    Button btn;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        CameraManager cameraManager = (CameraManager)getSystemService(CAMERA_SERVICE);
        try {
            if (hasFlashForFrontCamera(cameraManager)) {
            }
 
        } catch (CameraAccessException e) {
            e.printStackTrace();
        }
 
        boolean hasFlashForFrontCamera(CameraManager cManager) throws CameraAccessException {
            for(final String cameraId : cManager.getCameraIdList()){
                CameraCharacteristics characteristics = cManager.getCameraCharacteristics(cameraId);
                int cOrientation = characteristics.get(CameraCharacteristics.LENS_FACING);
                if(cOrientation == CameraCharacteristics.LENS_FACING_FRONT) {
                    return characteristics.get(CameraCharacteristics.FLASH_INFO_AVAILABLE);
                }
            }
            return false;
        }
 
        btn = (Button)findViewById(R.id.button);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                cameraManager.setTorchMode(frontCameraId, true);
            }
        });
 
    }
}
0
0 / 0 / 1
Регистрация: 15.12.2019
Сообщений: 107
19.02.2020, 18:40  [ТС]
Верхняя часть кода - обычный фонарик, ниже я попытался подключить еще и фронтальный, но почему-то не определяется frontCameraId

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.pm.PackageManager;
import android.hardware.Camera;
import android.hardware.camera2.CameraAccessException;
import android.hardware.camera2.CameraCharacteristics;
import android.hardware.camera2.CameraManager;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import androidx.appcompat.app.AppCompatActivity;
 
public class MainActivity extends AppCompatActivity {
 
    Button button1 = null;
    Button btn;
 
    private Camera camera = null;
    private boolean isFlashOn;
    private boolean hasFlash;
    Camera.Parameters params;
 
    public void errorDialog(){
 
        AlertDialog dialog = new AlertDialog.Builder(MainActivity.this).create();
        dialog.setTitle("Error!");
        dialog.setMessage("Your device not support flashlight!");
        dialog.setButton("OK", new DialogInterface.OnClickListener(){
            public void onClick(DialogInterface dialog, int which){
             finish();
            }
        });
 
        dialog.show();
        return;
 
    }
 
    private void getCamera(){
 
        if(camera == null){
            try{
                camera = Camera.open();
                params = camera.getParameters();
            }catch (RuntimeException e){
                e.printStackTrace();
            }
        }
 
    }
 
    private void turnOn(){
        if(!isFlashOn){
            if(camera == null || params == null){
                return;
            }
            params = camera.getParameters();
            params.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
            camera.setParameters(params);
            camera.startPreview();
            isFlashOn = true;
 
        }
    }
 
    private void turnOff(){
        if(isFlashOn){
            if(camera == null || params == null){
                return;
            }
            params = camera.getParameters();
            params.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
            camera.setParameters(params);
            camera.stopPreview();
            isFlashOn = false;
 
        }
    }
 
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        button1 = (Button)findViewById(R.id.button1);
        btn = (Button)findViewById(R.id.koo);
 
        hasFlash = getApplicationContext().getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH);
 
        if(!hasFlash){
 
            errorDialog();
 
        }
 
        getCamera();
 
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(isFlashOn){
                    turnOff();
                }else{
                    turnOn();
                }
            }
        });
 
    }
 
    //попытка фронтальной вспышки, вот тут и есть проблема, frontCameraId ошибка "Cannot resolve symbol frontCameraId"
    CameraManager cameraManager = (CameraManager)getSystemService(CAMERA_SERVICE);
    {
        try {
            if (hasFlashForFrontCamera(cameraManager)) {
                cameraManager.setTorchMode(frontCameraId, true);
            }
 
        } catch (CameraAccessException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
 
    //проверка наличия фронатльной вспышки
    boolean hasFlashForFrontCamera(CameraManager cManager) throws CameraAccessException {
        for(final String cameraId : cManager.getCameraIdList()){
            CameraCharacteristics characteristics = cManager.getCameraCharacteristics(cameraId);
            int cOrientation = characteristics.get(CameraCharacteristics.LENS_FACING);
            if(cOrientation == CameraCharacteristics.LENS_FACING_FRONT) {
                return characteristics.get(CameraCharacteristics.FLASH_INFO_AVAILABLE);
            }
        }
        return false;
    }
 
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.02.2020, 18:40
Помогаю со студенческими работами здесь

Как выполнить событие в FormClosing и только потом дать закрыться приложению?
Здравствуйте!Как выполнить какое либо действие в событии FormClosing до его стандартного закрытия? Т.е. допустим при клике на крестик мне...

Как в MS SQL 2014 убрать возможность у серверной роли sysadmin возможность использовать shutdown ?
Как в MS SQL 2014 express убрать возможность у серверной роли sysadmin возможность использовать shutdown? Ситуация такая: Я создал...

Как ускорить вычисления/дать больше ресурсов скомпилированному приложению в Borland C++ Builder
Уважаемые форумчане, В своей научной работе еще давно начал использовать Borland C++ Builder 6. Дело в том, что понадобилось выполнить...

Есть ли возможность быстро и легко настроить B4A? Или сразу перейти на Android Studio?
Не люблю софт который не может сразу работать после инсталляции. Мне лень указывать javac.exe, android.jar, ADV. И что там еще нужно в B4A?...

Как дать возможность узнать о своей программе?
Представим себе что написали на наш взгляд довольно таки полезную программу а как сделать так чтобы о ней узнали?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru