Как сделать фонарик на андроиде ярче

Как сделать фонарик на андроиде ярче
Как сделать фонарик на андроиде ярче
Как сделать фонарик на андроиде ярче
Как сделать фонарик на андроиде ярче

Сегодня мы возьмемся за интересный и полезный урок, а именно - научимся создавать приложение "Фонарик" для Android устройств. Приложение будет предельно простым: главное окно программы с кнопкой включить/выключить фонарик. 

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

Изображения для фонарика

В архиве с изображениями, те что помечены цифрой 1 - это hdpi, 2- mdpi, 3 - ldpi.

Теперь можно переходить к созданию нового проекта, выберем Blank Activity. Для того, чтоб наш фонарик заработал, нужно в файле манифеста получить разрешения на использование вспышки камеры. Там нет такого разрешения непосредственно, так как вспышка входит в функционал камеры, поэтому нужно получить разрешение на работу с камерой и ее возможностями. Открываем файл AndroidManifest.xml и добавляем туда парочку разрешений на камеру:

<uses-permission android:name="android.permission.CAMERA" /> <uses-feature android:name="android.hardware.camera"/>

Теперь нужно добавить изображения кнопок в папку res/drawable, а точнее изображения hdpi, mdpi и ldpi в соответствующие папки drawable-hdpi, drawable-mdpi, drawable-ldpi. Только уберите те циферки в именах изображений (1,2,3) и проследите, чтобы в разных папках изображения включенной и выключенной кнопки имели одинаковые названия. Фон нашего приложения будет белого цвета и, будем надеяться, красиво сольется с изображениями кнопок. 

Открываем файл activity_main.xml и добавим туда кнопочку ImageView, которая и будет в итоге включать и выключать фонарик:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" android:background="#FFFFFF"> <ImageButton android:id="@+id/btnSwitch" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_marginTop="100dip" android:src="@drawable/turn_on" android:background="@null" android:contentDescription="@null"/> </RelativeLayout>

Теперь откроем MainActivity.java и объявим необходимые переменные:

import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.pm.PackageManager; import android.hardware.Camera; import android.hardware.Camera.Parameters; import android.media.MediaPlayer; import android.media.MediaPlayer.OnCompletionListener; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.ImageButton; public class MainActivity extends Activity { ImageButton btnSwitch; private Camera camera; private boolean isFlashOn; private boolean hasFlash; Parameters params; MediaPlayer mp; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //Кнопка включения фонарика btnSwitch = (ImageButton) findViewById(R.id.btnSwitch); } }

Программу нужно оборудовать возможностью проверять, поддерживается ли работа фонарика на данном устройстве, присутствует ли там вспышка вообще. Если ее нету, то будет показываться соответствующее сообщение и приложение будет закрываться. Для того, чтобы реализовать это, тут же в MainActivity.java добавим следующий код, который в случае отсутствия на устройстве вспышки будет показывать сообщение в виде Alert Dialog и закрывать приложение:

/ Проверяем, поддерживает ли устройство вспышку или нет / hasFlash = getApplicationContext().getPackageManager() .hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH); if (!hasFlash) { //Устройство не поддерживает функцию вспышки //Показываем печальное сообщение и закрываем приложение: AlertDialog alert = new AlertDialog.Builder(MainActivity.this) .create(); alert.setTitle("Ошибка"); alert.setMessage("Ваше устройство не поддерживает работу с вспышкой!"); alert.setButton("OK", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { //Закрываем приложение: finish(); } }); alert.show(); return; }

Если сейчас запустить приложение на устройстве без вспышки, то вы увидите Alert Dialog с ошибкой.

Включение фонарика происходит с помощью установки режима работы камеры FLASH_MODE_TORCH. Настройка процесса включения будет происходить с помощью 2-х функций getCamera и turnOnFlash. Добавим их к коду в MainActivity.java:

//Получаем параметры камеры: private void getCamera() { if (camera == null) { try { camera = Camera.open(); params = camera.getParameters(); } catch (RuntimeException e) { Log.e("Ошибка, невозможно запустить: ", e.getMessage()); } } } / Включаем вспышку / private void turnOnFlash() { if (!isFlashOn) { if (camera == null || params == null) { return; } //Проигрываем звук playSound(); params = camera.getParameters(); params.setFlashMode(Parameters.FLASH_MODE_TORCH); camera.setParameters(params); camera.startPreview(); isFlashOn = true; //Меняем изображение кнопки при переключении: toggleButtonImage(); } }

Для выключения фонарика будет использоваться настройка на режим FLASH_MODE_OFF:

/ Выключаем фонарик / private void turnOffFlash() { if (isFlashOn) { if (camera == null || params == null) { return; } //Проигрываем звук: playSound(); params = camera.getParameters(); params.setFlashMode(Parameters.FLASH_MODE_OFF); camera.setParameters(params); camera.stopPreview(); isFlashOn = false; //Меняем картинку кнопки: toggleButtonImage(); } }

Теперь осталось только добавить обработчик нажатий по кнопке ImageView:

/ Обработчик события нажатий по кнопке / btnSwitch.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (isFlashOn) { //Выключаем фонарик: turnOffFlash(); } else { //Включаем фонарик: turnOnFlash(); } } });

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

/ Переключатель смены изображения / private void toggleButtonImage(){ if(isFlashOn){ btnSwitch.setImageResource(R.drawable.turn_on); }else{ btnSwitch.setImageResource(R.drawable.turn_off); } }

В принципе, уже сейчас приложение готово к работе, но нам хочется еще сделать так, чтобы при переключении кнопки проигрывался звук включения/выключения фонарика. Для этого звук сначала нужно скачать. Можете взять это, можете найти что то получше и покороче, я не нашел. Для работы со звуком, создайте в проекте новую папке res/raw и закиньте туда звуковой файл. В код файла MainActivity.java добавляем следующий код:

/ Проигрывание звука / private void playSound(){ if(isFlashOn){ mp = MediaPlayer.create(MainActivity.this, R.raw.sound); }else{ mp = MediaPlayer.create(MainActivity.this, R.raw.sound); } mp.setOnCompletionListener(new OnCompletionListener() { @Override public void onCompletion(MediaPlayer mp) { mp.release(); } }); mp.start(); }

Остается только добавить несколько важных методов, которые будут способствовать корректной работе приложения:

- onPause() - метод выключает фонарик и вводит приложение в фоновый режим работы;

- onResume() - метод включает фонарик обратно;

- onStop() - закрываем камеру.

Добавляем следующий код:

@Override protected void onDestroy() { super.onDestroy(); } @Override protected void onPause() { super.onPause(); //Временно выключаем фонарик: turnOffFlash(); } @Override protected void onRestart() { super.onRestart(); } @Override protected void onResume() { super.onResume(); //Продолжаем работу фонарика: if(hasFlash) turnOnFlash(); } @Override protected void onStart() { super.onStart(); //Получаем для приложения параметры камеры: getCamera(); } @Override protected void onStop() { super.onStop(); //Закрываем работу камеры: if (camera != null) { camera.release(); camera = null; } }

Все! Теперь остается только протестировать приложение:

Фонарик включен     Фонарик выключен

Очень неплохо, оказалось, что смещение изображений вкл/выкл оказалось еле заметным, но это на дисплее 4,5 дюйма. 

Ну и перед тестированием не забудьте, что тестировать приложение работы фонарика есть смысл на устройстве, в котором есть фонарик :). Удачи!

Полный код MainActivity.java.

Оригинал урока.

Как сделать фонарик на андроиде ярче Как сделать фонарик на андроиде ярче Как сделать фонарик на андроиде ярче Как сделать фонарик на андроиде ярче Как сделать фонарик на андроиде ярче Как сделать фонарик на андроиде ярче

Читать далее:




Лебеди из мусорных пакетов своими руками мастер класс




Схема подключения генератора г9695 3701 1




Как сделать чтобы номер страницы не повторялся 7




Вышивка розовый рассвет




С днём рождения другу на чеченском поздравление 7