Also, sorry I didn't clean it up much. It is pretty straightforward. Only other thing besides learning to turn on the LED is how we throw an alert to the user (see below for the case the phone does not have a camera flash light). But anyhow, as I got the code, here it goes (Led.java):
package cell0907.example.led;
import android.hardware.Camera;
import android.hardware.Camera.Parameters;
import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.pm.PackageManager;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class Led extends Activity {
public static Camera cam = null;// has to be static, otherwise onDestroy() destroys it
private Button light_switch;
private boolean isFlashOn;
private boolean hasFlash;
Parameters p;
static final String TAG="MyActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_led);
light_switch=(Button)this.findViewById(R.id.button1);
/*
* 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(Led.this)
.create();
alert.setTitle("Error");
alert.setMessage("Sorry, your device doesn't support flash light!");
alert.setButton(RESULT_OK, ALARM_SERVICE, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// closing the application
finish();
}
});
alert.show();
return;
}
light_switch.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if (isFlashOn) {
// turn off flash
flashLightOff();
light_switch.setText("Turn on");
} else {
// turn on flash
light_switch.setText("Turn off");
flashLightOn();
}
}
});
}
public void flashLightOn() {
Log.v(TAG, "ON");
try {
getcamera();
p.setFlashMode(Parameters.FLASH_MODE_TORCH);
cam.setParameters(p);
cam.startPreview();
isFlashOn=true;
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(getBaseContext(), "Exception flashLightOn()",
Toast.LENGTH_SHORT).show();
}
}
public void getcamera(){
if (cam==null){
try{
Log.v(TAG, "CAMERA CONFIG");
cam = Camera.open();
p = cam.getParameters();
}
catch (RuntimeException e) {
Log.e("Camera Error. Failed to Open. Error: ", e.getMessage());
}
}
}
public void flashLightOff() {
Log.v(TAG, "OFF");
if (cam!=null) try {
cam.stopPreview();
cam.release();
cam = null;
isFlashOn=false;
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(getBaseContext(), "Exception flashLightOff",
Toast.LENGTH_SHORT).show();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.led, menu);
return false;
}
@Override
protected void onStart() {
super.onStart();
}
@Override
protected void onRestart() {
super.onRestart();
}
@Override
protected void onResume() {
super.onResume();
}
@Override
protected void onPause() {
super.onPause();
// on pause turn off the flash
flashLightOff();
}
@Override
protected void onStop() {
super.onStop();
}
@Override
protected void onDestroy() {
super.onDestroy();
}
}
The other thing to remember is to add the following lines to the Manifest so that the app got the right permissions:
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.FLASHLIGHT"/>
Others:
- A hint on the xda-developers site. In my case I had a brightness file with 0 inside and a max_brightness file with 255 inside. I tried making the second even a zero, but my flashlight app just kept working...
- This other link points to something similar and explains a way to test it quickly. Got to try.
- A much more elaborated flashlight example
- A completely different method without using the SDK It may be worth to explore if that can do the intensity.
- Full source code of another flashlight app
- Answered question in Stackoverflow
- Question without answer in Stackoverflow
- Please, click here to see an index of other posts on Android.
No comments:
Post a Comment