Страница 1 из 1
Работа камеры при заблокированном телефоне
Добавлено: 09 ноя 2013, 14:53
master-blaster
Включаю фонарик из виджета:
Код: Выделить всё
Camera.Parameters p = cam.getParameters();
p.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
cam.setParameters(p);
cam.startPreview();
через некоторое время телефон автоматически блокируется, экран выключается и фонарик тоже выключается.
Как сделать чтобы фонарик оставался работать даже с выключенным экраном после блокировки телефона?
Пробовал вынести работу с камерой в отдельный сервис, но это не помогло.
Есть программы у которых такое получается.
Re: Работа камеры при заблокированном телефоне
Добавлено: 09 ноя 2013, 15:04
trew
Пробовал вынести работу с камерой в отдельный сервис, но это не помогло.
Можно подробней?
Телефон блокируется, фонарик выключается. Вы разблокируете телефон, и заходите в Настройки -Приложения - Сервисы-
Ваш сервис
запущенный висит и работает. Так?
Re: Работа камеры при заблокированном телефоне
Добавлено: 09 ноя 2013, 18:15
master-blaster
Да, так. Сервис не убивается, 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.............
Re: Работа камеры при заблокированном телефоне
Добавлено: 09 ноя 2013, 19:16
master-blaster
Я кое-что придумал.
Если ловить событие выключения экрана и перезапускать камеру, то задача решается.
Недостаток, что фонарик выкл-вкл делает не моментально, а на секунду свет пропадает в момент выключения экрана.
Вот рабочий код виджета, если кому интересно.
Re: Работа камеры при заблокированном телефоне
Добавлено: 09 ноя 2013, 19:28
trew
Предположение: У тебя сервис выполнил задачу и "отдыхает", поэтому андройд его ставит на паузу при выключении экрана.
Попробуй загрузить сервис бесконечной задачей
Runnable.