Работа камеры при заблокированном телефоне

Ответить
master-blaster
Сообщения: 3
Зарегистрирован: 09 ноя 2013, 14:43
Контактная информация:

Работа камеры при заблокированном телефоне

Сообщение master-blaster » 09 ноя 2013, 14:53

Включаю фонарик из виджета:

Код: Выделить всё

Camera.Parameters p = cam.getParameters();
p.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
cam.setParameters(p);
cam.startPreview();
через некоторое время телефон автоматически блокируется, экран выключается и фонарик тоже выключается.
Как сделать чтобы фонарик оставался работать даже с выключенным экраном после блокировки телефона?

Пробовал вынести работу с камерой в отдельный сервис, но это не помогло.

Есть программы у которых такое получается.

Аватара пользователя
trew
Сообщения: 450
Зарегистрирован: 28 сен 2013, 17:34

Re: Работа камеры при заблокированном телефоне

Сообщение trew » 09 ноя 2013, 15:04

Пробовал вынести работу с камерой в отдельный сервис, но это не помогло.
Можно подробней?
Телефон блокируется, фонарик выключается. Вы разблокируете телефон, и заходите в Настройки -Приложения - Сервисы-
Ваш сервис запущенный висит и работает. Так?
Когда выкладываете код на форум - код оформляйте. Редактор - поищите слова Geshi Syntax -Java. (или xml)
Свои сообщения можно редактировать - кнопка edit.

master-blaster
Сообщения: 3
Зарегистрирован: 09 ноя 2013, 14:43
Контактная информация:

Re: Работа камеры при заблокированном телефоне

Сообщение master-blaster » 09 ноя 2013, 18:15

Да, так. Сервис не убивается, onDestroy не выполняется


Вот больше кода:

Код: Выделить всё

public class WidgetProvider extends AppWidgetProvider {
    // log tag
    private static final String TAG = "FlashLiteProvider";

    @Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
        //Log.d(TAG, "onUpdate");
        context.startService(new Intent(context, UpdateService.class).putExtra("flash_mode_on", false));
    }

    public static class UpdateService extends Service {
        public boolean flash_mode_on;
        public Camera cam;

        @Override
        public int onStartCommand(Intent intent, int flags, int startId) {

            flash_mode_on = intent.getBooleanExtra("flash_mode_on", false);

            Log.v(TAG, "flash_mode_on=" + flash_mode_on);

            if (cam != null && flash_mode_on) {
                flash_mode_on = false;
            }

            if (cam == null) {
                cam = Camera.open();

            }
            Camera.Parameters p = cam.getParameters();
            if (flash_mode_on) {
                p.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
                cam.setParameters(p);
                cam.startPreview();
            } else {
                cam.stopPreview();
                cam.release();
                cam = null;
            }

            RemoteViews views = new RemoteViews(getPackageName(), R.layout.widget);
            views.setImageViewResource(R.id.imageViewWidget, flash_mode_on ? R.drawable.lamp : R.drawable.icon);

            Intent pIntent = new Intent(UpdateService.this, UpdateService.class)
                    .putExtra("flash_mode_on", !flash_mode_on);
            views.setOnClickPendingIntent(R.id.widgetRelativeLayout, PendingIntent.getService(this, 0, pIntent, 0));

            ComponentName thisWidget = new ComponentName(this, WidgetProvider.class);
            AppWidgetManager.getInstance(this).updateAppWidget(thisWidget, views);

            return START_STICKY;
        }

        @Override
        public IBinder onBind(Intent intent) {
            return null;
        }
    }
}
Если закрыть камеру рукой, то в логи пишет:
11-09 17:27:13.708: ERROR/mm-camera(68): awb_algo_execution FAILED.............
11-09 17:27:14.128: ERROR/mm-camera(68): awb_algo_execution FAILED.............
11-09 17:27:14.238: ERROR/mm-camera(68): awb_algo_execution FAILED.............
11-09 17:27:14.358: ERROR/mm-camera(68): awb_algo_execution FAILED.............
11-09 17:27:14.468: ERROR/mm-camera(68): awb_algo_execution FAILED.............
11-09 17:27:14.578: ERROR/mm-camera(68): awb_algo_execution FAILED.............
11-09 17:27:14.688: ERROR/mm-camera(68): awb_algo_execution FAILED.............
11-09 17:27:14.818: ERROR/mm-camera(68): awb_algo_execution FAILED.............

master-blaster
Сообщения: 3
Зарегистрирован: 09 ноя 2013, 14:43
Контактная информация:

Re: Работа камеры при заблокированном телефоне

Сообщение master-blaster » 09 ноя 2013, 19:16

Я кое-что придумал.
Если ловить событие выключения экрана и перезапускать камеру, то задача решается.
Недостаток, что фонарик выкл-вкл делает не моментально, а на секунду свет пропадает в момент выключения экрана.

Вот рабочий код виджета, если кому интересно.

Аватара пользователя
trew
Сообщения: 450
Зарегистрирован: 28 сен 2013, 17:34

Re: Работа камеры при заблокированном телефоне

Сообщение trew » 09 ноя 2013, 19:28

Предположение: У тебя сервис выполнил задачу и "отдыхает", поэтому андройд его ставит на паузу при выключении экрана.
Попробуй загрузить сервис бесконечной задачей Runnable.
Когда выкладываете код на форум - код оформляйте. Редактор - поищите слова Geshi Syntax -Java. (или xml)
Свои сообщения можно редактировать - кнопка edit.

Ответить