Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 140, средняя оценка - 4.71
Infinity3000
1057 / 576 / 24
Регистрация: 03.12.2009
Сообщений: 1,255
#1

Включить программно LED (фонарик) - Android

02.01.2013, 17:42. Просмотров 18443. Ответов 13
Метки нет (Все метки)

Здравствуйте!

Подскажите каким образом возможно включить программно фонарик.

Есть код

Java
1
2
3
4
5
Camera cam = Camera.open();     
Parameters p = cam.getParameters();
p.setFlashMode(Parameters.FLASH_MODE_TORCH);
cam.setParameters(p);
cam.startPreview();
На форумах пишут что рабочий! Но проблема в том что Eclipse ругается

Java
1
Camera cam = Camera.open();
пишет у Camera нет метода open(), ну и еще на пару ошибок (см. вложение);

Использую API 7+

В чем может быть проблема? ну или Ваш вариант включение фонарика)
Спасибо
Миниатюры
Включить программно LED (фонарик)  
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Infinity3000
1057 / 576 / 24
Регистрация: 03.12.2009
Сообщений: 1,255
02.01.2013, 18:19  [ТС]     Включить программно LED (фонарик) #2
Все разобрался!

Нужно было добавить в импорт

Java
1
import android.hardware.Camera;
У меня жу было

Java
1
import android.graphics.Camera
А два эти импорта не хотели вместе уживаться)) Сорри кого отвлек)
matvey.sofyin
2 / 2 / 0
Регистрация: 29.07.2012
Сообщений: 6
11.09.2013, 00:37     Включить программно LED (фонарик) #3
Подскажите, пожалуйста, при запуске приложения на телефоне HTC Desire S после нажатия на кнопку "ОК" вылаезает ошибка "Приложение ... неожиданно остановилось. Повторите попытку".

Ошибка вылезает при исполнении строчки
Java
1
Camera cam = Camera.Open();
проверил отладочной печатью.
В чем может быть проблема? Как решать? Хочу сделать фонарик, который не будет гаснуть при выключении экрана.

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
package ru.axtrace.myapplication211;
 
import android.app.Activity;
import android.hardware.Camera;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
 
 
 
public class MainActivity extends Activity {
 
 
    TextView tvOut;
    Button btnOk;
    Button btnCancel;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        // найдем View-элементы
        tvOut = (TextView) findViewById(R.id.tvOut);
        btnOk = (Button) findViewById(R.id.btnOk);
        btnCancel = (Button) findViewById(R.id.btnCancel);
 
 
        View.OnClickListener oclBtnOk = new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Camera cam = Camera.Open();
                Camera.Parameters p = cam.getParameters();
                p.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
                cam.setParameters(p);
                cam.startPreview();
                tvOut.setText("5");
            }
        };
 
        // присвоим обработчик кнопке OK (btnOk)
        btnOk.setOnClickListener(oclBtnOk);
 
 
        View.OnClickListener oclBtnCancel = new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Camera cam = Camera.open();
                Camera.Parameters p = cam.getParameters();
                p.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
                cam.setParameters(p);
                cam.startPreview();
            }
        };
 
        btnCancel.setOnClickListener(oclBtnCancel);
    }
 
 
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
 
}
Grafity
59 / 4 / 1
Регистрация: 31.07.2013
Сообщений: 42
11.09.2013, 16:35     Включить программно LED (фонарик) #4
В манифесте разрешение на камеру прописано?
matvey.sofyin
2 / 2 / 0
Регистрация: 29.07.2012
Сообщений: 6
11.09.2013, 22:45     Включить программно LED (фонарик) #5
Цитата Сообщение от Grafity Посмотреть сообщение
В манифесте разрешение на камеру прописано?
да.
XML
1
2
3
4
<uses-permission android:name="android.permission.CAMERA" />
    <uses-feature
            android:name="android.hardware.camera.flash"
            android:required="true" />
verylazy
Заблокирован
11.09.2013, 22:54     Включить программно LED (фонарик) #6
Camera cam = Camera.Open();
Camera cam = Camera.open();
как вообще IDE пропустило open с большой буквы?
matvey.sofyin
2 / 2 / 0
Регистрация: 29.07.2012
Сообщений: 6
12.09.2013, 00:02     Включить программно LED (фонарик) #7
Цитата Сообщение от verylazy Посмотреть сообщение
Camera cam = Camera.Open();
Camera cam = Camera.open();
как вообще IDE пропустило open с большой буквы?
это я постил, случайно удалил o, перезаписал сам уже в посте с большой. В коде у меня с маленькой. Это роли не играет.

Прописал в манифесте разрешение, вспышка включается на первом .Open, но при повторном нажатии на кнопку "ОК" или нажатии на "Cancel" вылатает ошибка. Видимо, надо проверять статус

Добавлено через 1 час 4 минуты
собственно, вопрос, как это проверить или что сделать? не знаю
verylazy
Заблокирован
12.09.2013, 09:34     Включить программно LED (фонарик) #8
можно так, наверное
Java
1
2
3
if (camera == null) {
            camera = Camera.open();
        }
http://developer.android.com/referen...#open%28int%29
Creates a new Camera object to access a particular hardware camera. If the same camera is opened by other applications, this will throw a RuntimeException.

You must call release() when you are done using the camera, otherwise it will remain locked and be unavailable to other applications.
я вообще бы сделал вкл/выкл на одной кнопке
Tailor
3 / 3 / 0
Регистрация: 11.04.2012
Сообщений: 44
10.02.2014, 20:30     Включить программно LED (фонарик) #9
Добрый день, написал на скорую руку код для двух кнопок, вкл. и выкл.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//---------------Фонарик вкл------------------
    public void Flashlight_on(View v) throws IOException{
        //cam.unlock();
        cam.reconnect();
        p.setFlashMode(Parameters.FLASH_MODE_TORCH);
        cam.setParameters(p);
        cam.startPreview();     
    }
    
    //---------------Фонарик выкл------------------
    public void Flashlight_off(View v){
        cam.stopPreview();
        cam.release();
    }
Установил на телефон приложение, все дела. Нажимаю вкл. - фонарик включается. нажимаю Выкл. - выключается - супер. А когда нажимаю опять вкл, то приложение выдает ошибку в духе "ошибка в приложении". Скорее всего нужно удалить/добавить одну две-строчки, подскажите плжста!
Bringoff
СуперМодулятор
132 / 131 / 15
Регистрация: 03.11.2012
Сообщений: 974
11.02.2014, 10:13     Включить программно LED (фонарик) #10
Вот наваял на коленке пример: не знаю, чем вы там занимаетесь, но все работает, как надо - по крайней мере, у меня
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
import android.app.Activity;
import android.hardware.Camera;
import android.os.Bundle;
import android.widget.CompoundButton;
import android.widget.Switch;
 
public class FlashActivity extends Activity {
 
    private Switch mSwitch;
    private Camera camera;
 
    /**
     * Called when the activity is first created.
     */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
 
        mSwitch = (Switch) findViewById(R.id.switch_light);
        mSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (camera == null) {
                    camera = Camera.open();
                }
                Camera.Parameters parameters = camera.getParameters();
                if (!isChecked) {
                    parameters.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
                } else {
                    parameters.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
                }
                camera.setParameters(parameters);
                camera.startPreview();
            }
        });
    }
 
    @Override
    public void onDestroy() {
        camera.release();
        super.onDestroy();
    }
}
При сворачивании и выключении экрана продолжает гореть (теоретически, если не хватит памяти, оно выключится, но при выключенном экране вряд ли может произойти переполнение ОЗУ)). По кнопке назад выключается.
Единственное, это при горящем фонарике не выйдет запустить камеру. Стандартный miui-шный фонарь и камера спокойно взаимодействуют
Ах да, Switch работает с API 14+, но это не главное
xaxol_xaxol
6 / 6 / 0
Регистрация: 25.02.2012
Сообщений: 55
12.09.2014, 09:13     Включить программно LED (фонарик) #11
выложите кто нибудь исходник для Android Studio, пожалуйста
Bringoff
СуперМодулятор
132 / 131 / 15
Регистрация: 03.11.2012
Сообщений: 974
12.09.2014, 15:16     Включить программно LED (фонарик) #12
Цитата Сообщение от xaxol_xaxol Посмотреть сообщение
выложите кто нибудь исходник для Android Studio
А это как? Вам типа готовый проект в архиве нужен? Ну извините, таким заниматься никто не будет.
xaxol_xaxol
6 / 6 / 0
Регистрация: 25.02.2012
Сообщений: 55
12.09.2014, 16:09     Включить программно LED (фонарик) #13
тогда объясните пожалуйста как это сделать на Android studio, если можно поподробнее, что кидаем на форму и что куда пишем
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.09.2014, 18:10     Включить программно LED (фонарик)
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
Bringoff
СуперМодулятор
132 / 131 / 15
Регистрация: 03.11.2012
Сообщений: 974
12.09.2014, 18:10     Включить программно LED (фонарик) #14
Цитата Сообщение от xaxol_xaxol Посмотреть сообщение
что кидаем на форму и что куда пишем
Delphi головного мозга - это страшно (по себе знаю )... xaxol_xaxol, нет, уж лучше проект полный кину. Проект из Intellij Idea 14, но вроде структура идентичная, должно открыться.
Вложения
Тип файла: 7z Flashlight.7z (176.5 Кб, 136 просмотров)
Yandex
Объявления
12.09.2014, 18:10     Включить программно LED (фонарик)
Ответ Создать тему
Опции темы

Текущее время: 07:19. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru