Today i am going to demonstrate developing a simple android application. This application is about turning on and off device flashlight / torchlight with simple touch. Please note that this app is targeted to mobile devices only, i am not sure how this app looks in tablet devices.

Download Code
android developing torchlight application

Designing the application

This app contains not too complex design. You can design the application using graphic editor software like photoshop. Please find the PSD of the app in the source code folder of this tutorial. I am not covering the steps involved in designing the application as it is not the part of the tutorial.

Thanks to Keith Sereby for providing beautiful switch image. Check out his profile on dribble and twitter

Following is the screenshot of the app which we are going to develop in this tutorial.

android flashlight app tutorial

Resize and save each switch image in multiple dimensions for both on and off states. See the following image for your reference

android flashlight switch dimensions

Once you are done with designing part you can move to coding part by starting a new project.

Creating new project

1. Create a new project in Eclipse IDE by going to File ⇒ New ⇒ Android Application Project . I named my package as com.androidhive.flashlight and main activity as MainActivity.java

2. Open your AndroidManifest.xml file and add required permissions. I also disabled landscape mode in manifest file by using android:screenOrientation=”portrait” property.

android.permission.CAMERA – required to access the camera device
android.hardware.camera – required to access camera hardware features

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.androidhive.flashlight"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />
    
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-feature android:name="android.hardware.camera" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.androidhive.flashlight.MainActivity"
            android:label="@string/app_name" 
            android:screenOrientation="portrait">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

3. Place all the switch image files under drawable-hdpi, drawable-mdpi, drawable-ldpi folders. I named switch image files as btn_switch_off.png and btn_switch_on.png

4. Create a new xml file named radial_background.xml under res ⇒ drwable-hdpi folder and paste the following code. This file is used to create radial gradient background for the app.

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <gradient
            android:type="radial"
            android:startColor="#343030"
            android:endColor="#151515"
            android:gradientRadius="300"
            android:angle="270"
            android:centerY="0.3"/>
</shape>

5. Now open activity_main.xml file located under res ⇒ layout folder and type the following code. This layout file acts as main screen of the application.

In the following code first we applied a gradient background using radial_background.xml file which we created earlier. After that we placed an Image button with the switch image.

<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"
    android:background="@drawable/radial_background"
    tools:context=".MainActivity" >

    <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/btn_switch_on"
        android:background="@null"
        android:contentDescription="@null"
         />   
</RelativeLayout>

6. Open your MainActivity.java file and do the following changes. Here we just declared required variables.

package com.androidhive.flashlight;

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);

		// flash switch button
		btnSwitch = (ImageButton) findViewById(R.id.btnSwitch);

}

Detecting whether device supporting flashlight or not

The important step is to notify user if the device doesn’t support flashlight by showing an alert message or some other means, then we’ll simply close the application.

7. Open MainActivity.java and add the following code. In the following code we are checking availability of the flashlight and if the device doesn’t support it, we’ll show alert dialog and close the application by calling finish().

		 /*
		 * First check if device is supporting flashlight or not
		 */
		hasFlash = getApplicationContext().getPackageManager()
				.hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH);

		if (!hasFlash) {
			// device doesn't support flash
			// Show alert message and close the application
			AlertDialog alert = new AlertDialog.Builder(MainActivity.this)
					.create();
			alert.setTitle("Error");
			alert.setMessage("Sorry, your device doesn't support flash light!");
			alert.setButton("OK", new DialogInterface.OnClickListener() {
				public void onClick(DialogInterface dialog, int which) {
					// closing the application
					finish();
				}
			});
			alert.show();
			return;
		}
android flashlight no flash support

Turning on Flashlight

8. Turning on flashlight can be done by setting camera flash mode to FLASH_MODE_TORCH. The following two functions getCamera() and turnOnFlash() will do that for us. Add these functions to your MainActivity.java file

	// getting camera parameters
	private void getCamera() {
		if (camera == null) {
			try {
				camera = Camera.open();
				params = camera.getParameters();
			} catch (RuntimeException e) {
				Log.e("Camera Error. Failed to Open. Error: ", e.getMessage());
			}
		}
	}

	 /*
	 * Turning On flash
	 */
	private void turnOnFlash() {
		if (!isFlashOn) {
			if (camera == null || params == null) {
				return;
			}
			// play sound
			playSound();
			
			params = camera.getParameters();
			params.setFlashMode(Parameters.FLASH_MODE_TORCH);
			camera.setParameters(params);
			camera.startPreview();
			isFlashOn = true;
			
			// changing button/switch image
			toggleButtonImage();
		}

	}

Turning off Flashlight

9. Flashlight can be turned off by setting flash mode to FLASH_MODE_OFF.

	 /*
	 * Turning Off flash
	 */
	private void turnOffFlash() {
		if (isFlashOn) {
			if (camera == null || params == null) {
				return;
			}
			// play sound
			playSound();
			
			params = camera.getParameters();
			params.setFlashMode(Parameters.FLASH_MODE_OFF);
			camera.setParameters(params);
			camera.stopPreview();
			isFlashOn = false;
			
			// changing button/switch image
			toggleButtonImage();
		}
	}

Finally call these functions in button click event

		 /*
		 * Switch click event to toggle flash on/off
		 */
		btnSwitch.setOnClickListener(new View.OnClickListener() {

			@Override
			public void onClick(View v) {
				if (isFlashOn) {
					// turn off flash
					turnOffFlash();
				} else {
					// turn on flash
					turnOnFlash();
				}
			}
		});

Toggle switch images on flashlight on / off

10. When user touches the switch we need to toggle the switch image to on and off state just to indicate flashlight status. toggleButtonImage() has been called in turnOnFlash() and turnOffFlash() functions.

	/*
	 * Toggle switch button images
	 * changing image states to on / off
	 * */
	private void toggleButtonImage(){
		if(isFlashOn){
			btnSwitch.setImageResource(R.drawable.btn_switch_on);
		}else{
			btnSwitch.setImageResource(R.drawable.btn_switch_off);
		}
	}

Playing switch sound

If you are done with all the previous steps, your app will work perfectly. Here we can add an enhancement to our app by playing switch sound when user touches the switch. I downloaded two sound files from free sound libraries for switch on / switch off states and named them as light_switch_on.mp3 and light_switch_off.mp3

11. Under res folder create a new folder called raw and place these sound files in it. (res ⇒ raw ⇒ light_switch_on.mp3, light_switch_off.mp3)

12. Add the following function playSound() to your MainActivity.java file.

This function has been called in turnOnFlash() and turnOffFlash() functions.

	 /*
	 * Playing sound
	 * will play button toggle sound on flash on / off
	 * */
	private void playSound(){
		if(isFlashOn){
			mp = MediaPlayer.create(MainActivity.this, R.raw.light_switch_off);
		}else{
			mp = MediaPlayer.create(MainActivity.this, R.raw.light_switch_on);
		}
		mp.setOnCompletionListener(new OnCompletionListener() {

            @Override
            public void onCompletion(MediaPlayer mp) {
                // TODO Auto-generated method stub
                mp.release();
            }
        }); 
		mp.start();
	}

13. Importantly don’t forgot to release the camera once our app entered into background state as other apps might need to access camera. Add following code to your MainActivity.java file.

In onPause() method we turned off the flashlight as app entered in background state
In onResume() method we turned on the flashlight back again
In onStop() method we released the camera by calling camera.release() method.

	@Override
	protected void onDestroy() {
		super.onDestroy();
	}

	@Override
	protected void onPause() {
		super.onPause();
		
		// on pause turn off the flash
		turnOffFlash();
	}

	@Override
	protected void onRestart() {
		super.onRestart();
	}

	@Override
	protected void onResume() {
		super.onResume();
		
		// on resume turn on the flash
		if(hasFlash)
			turnOnFlash();
	}

	@Override
	protected void onStart() {
		super.onStart();
		
		// on starting the app get the camera params
		getCamera();
	}

	@Override
	protected void onStop() {
		super.onStop();
		
		// on stop release the camera
		if (camera != null) {
			camera.release();
			camera = null;
		}
	}

Setting the app icon

Finally design an icon for the app and place the image in drawable-hdpi (72 x 72 px), drawable-mdpi (48 x 48 px) and drawable-ldpi (36 x 36 px) folders.

Final Code

Final code of MainActivity.java is as follows

package com.androidhive.flashlight;

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);

		// flash switch button
		btnSwitch = (ImageButton) findViewById(R.id.btnSwitch);

	
		// First check if device is supporting flashlight or not		
		hasFlash = getApplicationContext().getPackageManager()
				.hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH);

		if (!hasFlash) {
			// device doesn't support flash
			// Show alert message and close the application
			AlertDialog alert = new AlertDialog.Builder(MainActivity.this)
					.create();
			alert.setTitle("Error");
			alert.setMessage("Sorry, your device doesn't support flash light!");
			alert.setButton("OK", new DialogInterface.OnClickListener() {
				public void onClick(DialogInterface dialog, int which) {
					// closing the application
					finish();
				}
			});
			alert.show();
			return;
		}

		// get the camera
		getCamera();
		
		// displaying button image
		toggleButtonImage();
		
		
		// Switch button click event to toggle flash on/off
		btnSwitch.setOnClickListener(new View.OnClickListener() {

			@Override
			public void onClick(View v) {
				if (isFlashOn) {
					// turn off flash
					turnOffFlash();
				} else {
					// turn on flash
					turnOnFlash();
				}
			}
		});
	}

	
	// Get the camera
	private void getCamera() {
		if (camera == null) {
			try {
				camera = Camera.open();
				params = camera.getParameters();
			} catch (RuntimeException e) {
				Log.e("Camera Error. Failed to Open. Error: ", e.getMessage());
			}
		}
	}

	
	 // Turning On flash
	private void turnOnFlash() {
		if (!isFlashOn) {
			if (camera == null || params == null) {
				return;
			}
			// play sound
			playSound();
			
			params = camera.getParameters();
			params.setFlashMode(Parameters.FLASH_MODE_TORCH);
			camera.setParameters(params);
			camera.startPreview();
			isFlashOn = true;
			
			// changing button/switch image
			toggleButtonImage();
		}

	}


	// Turning Off flash
	private void turnOffFlash() {
		if (isFlashOn) {
			if (camera == null || params == null) {
				return;
			}
			// play sound
			playSound();
			
			params = camera.getParameters();
			params.setFlashMode(Parameters.FLASH_MODE_OFF);
			camera.setParameters(params);
			camera.stopPreview();
			isFlashOn = false;
			
			// changing button/switch image
			toggleButtonImage();
		}
	}
	

	 // Playing sound
	 // will play button toggle sound on flash on / off
	private void playSound(){
		if(isFlashOn){
			mp = MediaPlayer.create(MainActivity.this, R.raw.light_switch_off);
		}else{
			mp = MediaPlayer.create(MainActivity.this, R.raw.light_switch_on);
		}
		mp.setOnCompletionListener(new OnCompletionListener() {

            @Override
            public void onCompletion(MediaPlayer mp) {
                // TODO Auto-generated method stub
                mp.release();
            }
        }); 
		mp.start();
	}
	
	/*
	 * Toggle switch button images
	 * changing image states to on / off
	 * */
	private void toggleButtonImage(){
		if(isFlashOn){
			btnSwitch.setImageResource(R.drawable.btn_switch_on);
		}else{
			btnSwitch.setImageResource(R.drawable.btn_switch_off);
		}
	}

	@Override
	protected void onDestroy() {
		super.onDestroy();
	}

	@Override
	protected void onPause() {
		super.onPause();
		
		// on pause turn off the flash
		turnOffFlash();
	}

	@Override
	protected void onRestart() {
		super.onRestart();
	}

	@Override
	protected void onResume() {
		super.onResume();
		
		// on resume turn on the flash
		if(hasFlash)
			turnOnFlash();
	}

	@Override
	protected void onStart() {
		super.onStart();
		
		// on starting the app get the camera params
		getCamera();
	}

	@Override
	protected void onStop() {
		super.onStop();
		
		// on stop release the camera
		if (camera != null) {
			camera.release();
			camera = null;
		}
	}

}
Subscribe
Notify of
guest
182 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Egbert Dijkstra
Egbert Dijkstra
8 years ago

Thanks man, for all the awesome tuts, it helped me allot!

Ravi Tamada
8 years ago

You are welcome 🙂

Rahim Sekkouti
Rahim Sekkouti
8 years ago

such a beautiful Tut, Thank you buddy 🙂

Mamro Kirill
Mamro Kirill
8 years ago

Excellent lesson… some ideas and this lesson were born will help.
You could write still an example how to trace a call and to use processes (services)

Ramiz Mohamed
Ramiz Mohamed
8 years ago

Brilliant as always. The only gripe I have is that we have to wait in anticipation for the next one, 😉

Ravi Tamada
8 years ago
Reply to  Ramiz Mohamed

I got little busy…. don’t worry i’ll update blog from now on ….

Jorge Casariego
Jorge Casariego
8 years ago
Reply to  Ravi Tamada

YEaaa!!! Excellent Ravi!

Ramiz Mohamed
Ramiz Mohamed
8 years ago
Reply to  Ravi Tamada

Lol, thanks for taking the time to reply. Your content is of such a quality and you have set quite a standard; that it is worth the wait.

Rajesh Tamada
Rajesh Tamada
8 years ago

Great

Amir from Algeria
Amir from Algeria
8 years ago

thank you for your tuto amir from Algeria

Zuhry Fayesz
Zuhry Fayesz
8 years ago

superb tut brother …. ur tut always help me to experiment new in android and push the development beyond its limit … awesome again ..

Hassan Gillani
Hassan Gillani
8 years ago

thanks…Excellent work by Ravi 😉

Avtokluchi
Avtokluchi
8 years ago

Great Tutorial, please show us how to track your phone on a webpage, i mean kind a gps tracker trough a website, THANKS!!

Rajeev Mathur
8 years ago

Hi Ravi nice to see u back and thanks for great post again as always

rank
rank
8 years ago

:disqus
Great work man , as always..

Jomy P Jose
Jomy P Jose
8 years ago

Hi Ravi. How to make an animation like apple’s siri mic button.

Roney K
Roney K
8 years ago

Before developing Android Flashlight

Android beginners need to learn more from basic

So visit ANDROIDITUTS -Android Tutorials for beginners

http://www.androidituts.com

chuck
chuck
8 years ago

great tutorial! anyway, would you mind making a tutorial about android charts? Thanks in advance!

Manish
Manish
8 years ago

nice tutorial….

Prasad
Prasad
8 years ago

Good one dude..:)

Omar
Omar
8 years ago

please, how to convert it to widget???

Prashanna
Prashanna
8 years ago

Thank you buddy. Awesome work. And lovely tut as well..Very helpful for android starter like me. Hope other tuts as well..and more over your descriptions and comments are appreciating… so Helpful to understand flow.

vikas .s
vikas .s
8 years ago

nice tutorial.. can u pls giv a tut for colour flashlights……

Figo
Figo
8 years ago

Hi this part does not work in my example:

if (!hasFlash) {
// device doesn’t support flash
// Show alert message and close the application
AlertDialog alert = new AlertDialog.Builder(MainActivity.this)
.create();
alert.setTitle(“Error”);
alert.setMessage(“Sorry, your device doesn’t support flash light!”);
alert.setButton(“OK”, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// closing the application
finish();
}
});
alert.show();
return;
}

Aquilla
Aquilla
8 years ago
Reply to  Figo

The method setButton(CharSequence text, ClickListener) is deprecated, try the same method with this params: setButton(AlertDialog.BUTTON_POSITIVE, text, ClickListener);

Richard
Richard
8 years ago

Hello — I just found your tutorials. I am anxious to learn from them.

I just downloaded and compiled the App through AIDE (free version). The App installs and starts just fine, but the camera light does not turn on or off. I have a Droid X. I have an App called LED Light that does work, so my hardware appears to not be the issue.

Do you know what the issue might be? Thanks, Richard

JIN
JIN
8 years ago
Reply to  Richard

did you try to remove LED Light and then try to run it ?

Giolaoit
Giolaoit
8 years ago

Thank you !

remmersd
remmersd
8 years ago
hytham
hytham
8 years ago

nice work

Mamro Kirill
Mamro Kirill
8 years ago

Galaxy Nexus doesn’t work!

Adnan Nazir
Adnan Nazir
8 years ago

like always such a helpful tutorial.. Ravi can you upload a complete tutorial of retrieving contacts from gmail and send them message?

Faraz Ahmad Khichi
Faraz Ahmad Khichi
8 years ago

Hey … i want help i made an flashlight widget … but light turns off when screen turns off …. plz help me out

ritesh
ritesh
8 years ago

use wakelock , screen will not turn off till app is having focus

Faraz Ahmad Khichi
Faraz Ahmad Khichi
8 years ago
Reply to  ritesh

i m using widget … not an activity

Rajendra Maharjan
Rajendra Maharjan
8 years ago

alert.setButton(“OK”, new DialogInterface.OnClickListener()

i got problem on this line … says setbutton is deprecated ..
plz can any one say what is the problem ??

Shantanu Patel
Shantanu Patel
8 years ago

use alert.setButton(AlertDialog.BUTTON_POSITIVE,”OK”, new DialogInterface.OnClickListener()

hope this can help…

Guest
Guest
6 years ago
Reply to  Shantanu Patel

alert.setButton(AlertDialog.BUTTON_POSITIVE,”OK”, new DialogInterface.OnClickListener()

public void onClick(DialogInterface, int which) {

ritesh
ritesh
8 years ago

Hi ravi , it is not working on my motorola defy+ . Following error messages are coming in logcat:
CameraSettings Param type 50 not supported
CameraSettings Param type 51 not supported
CameraSettings Param type 53 not supported

Please help me out..
Thanks in advance

KhinMoe
KhinMoe
8 years ago

Thanks for your great tutorial 🙂

Omar Zaki
Omar Zaki
8 years ago

Thank you very much

Roney Kakkanatt
Roney Kakkanatt
8 years ago

Android SQLite Database Insert Example Tutorial

http://androidituts.com/android-sqlite-database-insert-example/

Steve
Steve
8 years ago

Awesome Tutorial!!! Made a few tweaks (Made it vibrate instead of playing a sound) Please keep them coming.

Borislav
Borislav
8 years ago

package R does not exist ? HELLPP PLease
And also setContenView doesn’t work

Bkmz
Bkmz
8 years ago

Great thanks! Helped me tot find an error in my own code)

Rajendra Maharjan
Rajendra Maharjan
8 years ago

why it is not working on google nexus ??

Steve
Steve
7 years ago

I had the same issue on my Nexus 10, everything worked great on my HTC One so I knew it was a device issue and started searching and I found a fix.

Import…

import android.view.SurfaceHolder;
import android.view.SurfaceHolder.Callback;
import android.view.SurfaceView;

Add the following to onCreate

sView = (SurfaceView) findViewById(R.id.PREVIEW);
sHolder = sView.getHolder();

Add the following to the XML layout above the ImageButton

Ravi Tamada
7 years ago
Reply to  Steve

Thanks Steve 🙂

Rajendra Maharjan
Rajendra Maharjan
7 years ago
Reply to  Steve

Thnx 🙂

Sumit Vairagar
Sumit Vairagar
7 years ago
Reply to  Steve

Also add this code in the turnFlashOn()

camera.setPreviewDisplay(sHolder);

Rocky
Rocky
7 years ago
Reply to  Steve

It stopped when app opened

sasi sereen
sasi sereen
8 years ago

hello, thx for this amazing tut but i did the code and there is no error at all but when it run on my mobile nothing happens just a button with sounds ,, it does not turn the flash light on or off .. why?? :((

Keng Lang
Keng Lang
7 years ago

Hi Ravi. How to make effect strobe flashlight ?

Ajay Prasad
Ajay Prasad
7 years ago

Hi,

this is a great example, but i have a question can flashlight work as a projector light please reply me with a example.

Thanks

Ravi Tamada
7 years ago
Reply to  Ajay Prasad

NO

Ajay Prasad
Ajay Prasad
7 years ago
Reply to  Ravi Tamada

Hi Ravi,

Thanks for your reply, if you don’t mind can you tell me the reason behind that “NO”.

Ravi Tamada
7 years ago
Reply to  Ajay Prasad

Projector needs a special hardware, we can’t project something using flashlight.

ATTAULLAHKHANKTK
ATTAULLAHKHANKTK
6 years ago
Reply to  Ravi Tamada

sir is there any way to use the mobile screen which displays on the projector just as like computer screen displays…………

Rami Masarweh
Rami Masarweh
7 years ago

thanks man

Steve
Steve
7 years ago

I found another Trick… To always keep the Flashlight On (Not allowing the screen to timeout) add the following.

Import..
import android.os.PowerManager;

Add the Following to the onCreate(… )
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK, “DoNjfdhotDimScreen”);

Add the following to onPause() after super.onPause()
wl.release();

Add the Following to onResume() after super.onResume();
wl.acquire();

Add the following permission to the manifest

json
json
7 years ago
Reply to  Steve

is not work with me in galaxy s2 android 4.1.2

Chris Barnett
Chris Barnett
7 years ago

Another way to stop the screen timeout is to add the following to your onCreate() method:

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

This doesn’t require any extra permissions. See this recommendation in the Android docs: http://developer.android.com/reference/android/os/PowerManager.html#FULL_WAKE_LOCK

sampath
sampath
7 years ago

Excellent tutorial. Very easy to understand. Thank you very much for this.

Ted Kayne
Ted Kayne
7 years ago

Great TuT! But I have a question. What do I need to do that the flash light keeps on (after turnig it on) if I press the home button on my device?

Can anyone help me pls?

I’m looking forward to your help!

Tuur Neckebroeck
Tuur Neckebroeck
7 years ago
Reply to  Ted Kayne

You have to delete the overridden void onPause() because you have called the void ‘turnOffFlash()’. So when you close the app, it turns off the flash.

Ted Kayne
Ted Kayne
7 years ago

Hmmm… Sorry but this doesn’t work the way I actually wanted…
1. The flash turns already on, when I open the app and 2. the flash turns off after I pressed the home button.
What I want is exactly the oppsite of this two points.

Oh and I added “turnOffFlash();” to the overridden void onStart() and replaced turnOnFlash(); with turnOffFlash(); in the overridden void onResume() because I don’t want that the flash turns on when I open the app.

Any other suggestions, please?

Thanks in advance!

jason
jason
7 years ago

Thanks for the tut, but I have a question, my flashlight won’t light up when I pressed the button. (all the codes are identical to the tut’s)

google
google
7 years ago
Reply to  jason

you need to implement a surfaceview in your “flash on” method, then make its callback…..check a few posts below

krishna bhatta
krishna bhatta
7 years ago

Camera.open shows error on getCamera method. Any Helps please

Shashidhar
Shashidhar
7 years ago

Plz help
i dont get any errors in eclipse , but after i install the
app on phone when i open the app , i get an error message “Unfortunately
the com.androidhive.flashlight has stopped “

Duy Nguyễn
Duy Nguyễn
7 years ago
Reply to  Shashidhar

Please post you logcat.

fede_rico
fede_rico
7 years ago
Reply to  Duy Nguyễn

Hello, I think I have the same problem. Here are the interesting lines of my logcat. Thanks in advance for your help.

04-22 09:34:20.297: W/dalvikvm(1244): threadid=1: thread exiting with uncaught exception (group=0x41465700)

04-22 09:34:20.307: E/AndroidRuntime(1244): FATAL EXCEPTION: main

04-22 09:34:20.307: E/AndroidRuntime(1244): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.lux/com.example.lux.MainActivity}: java.lang.NullPointerException: println needs a message

Duy Nguyễn
Duy Nguyễn
7 years ago
Reply to  fede_rico

I think you should delete this sentence Log.e(“Camera Error. Failed to Open. Error: “, e.getMessage());

fede_rico
fede_rico
7 years ago
Reply to  Duy Nguyễn

Thanks. I tried but the problem remains. I deleted some parts to see where the problem may be, and found out that the app works if I delete the content of

if (!hasFlash) { … }

Now that I found the error I’m a bit embarrassed… as you can see in the “final code” above, the following line was too long and was cut in two lines and the .create is on a new line. I removed the line break and everything worked.

AlertDialog alert = new AlertDialog.Builder(MainActivity.this).create();

So if somebody has the same problem, first check if the code has strange line breaks. Hope this helps.

Duy Nguyễn
Duy Nguyễn
7 years ago
Reply to  fede_rico

I really happy because it worked with you, good luck.

Luuk Janssen
Luuk Janssen
7 years ago

First of all, thank you very much for this tutorial. I want to learn programming code for Android applications and this tutorial is very helpfull in understanding the basics. I have a question tho:

The image button has a very short delay in displaying the image for the off state and visa versa the on state. The flash turns on/off immediately, the sound is played directly, only the new image button switches a few milliseconds later. Is there a way to make that image switch faster?

Kashan Zahid
Kashan Zahid
7 years ago

downloading problem..any alternate link from where i download complete application

haroon
haroon
7 years ago

Good demonstration ever seen
Thanx

182
0
Would love your thoughts, please comment.x
()
x