Public class handlightactivity extends activity implements onclicklistener {
Private togglebutton;
Private camera m_camera;
@ Override
Protected void oncreate (bundle savedinstancestate ){
// Todo auto-generated method stub
Super. oncreate (savedinstancestate );
Setcontentview (R. layout. handlight );
Togglebutton = (togglebutton) This. findviewbyid (R. Id. togglebutton1 );
Togglebutton. setonclicklistener (this );
Getwindow (). addflags (windowmanager. layoutparams. flag_keep_screen_on );
}
@ Override
Public void onclick (view v ){
Togglebutton TB = (togglebutton) V;
If (! TB. ischecked ()){
Packagemanager PM = This. getpackagemanager ();
Featureinfo [] features = PM. getsystemavailablefeatures ();
For (featureinfo F: features)
{
If (packagemanager. feature_camera_flash.equals (F. Name) // determine whether the device supports flashlight
{
If (null = m_camera)
{
M_camera = camera. open ();
}
Camera. parameters = m_camera.getparameters ();
Parameters. setflashmode (camera. Parameters. flash_mode_torch );
M_camera.setparameters (parameters );
M_camera.startpreview ();
Togglebutton. setbackgroundcolor (0x30ffffff );
}
}
} Else {
If (m_camera! = NULL)
{
M_camera.stoppreview ();
M_camera.release ();
M_camera = NULL;
}
Togglebutton. setbackgroundcolor (0 xffffffff );
}
}
}
Handlight. xml
<? XML version = "1.0" encoding = "UTF-8"?>
<Linearlayout xmlns: Android = "http://schemas.android.com/apk/res/android"
Android: layout_width = "match_parent"
Android: layout_height = "match_parent"
Android: Orientation = "vertical">
<Togglebutton Android: Id = "@ + ID/togglebutton1"
Android: layout_width = "match_parent"
Android: layout_height = "match_parent"
Android: checked = "true"
Android: text = "togglebutton"/>
</Linearlayout>
Add Permissions
<Uses-Permission Android: Name = "android. Permission. Flashlight"/>
<Uses-Permission Android: Name = "android. Permission. wake_lock"/>
<Uses-Permission Android: Name = "android. Permission. Camera"/>
<Uses-Permission Android: Name = "android. Hardware. Camera"/>
Note: not all devices support
There is also a saying on the Internet that the system hidden API is called, but I did not respond, it may be a problem with the system version, back up
Direct Control Using ihardwareservice
Android1.5 previously provided this interface directly. Later, we need to do it ourselves.
Create a new Android. OS package in your project and create an ihardwareservice. aidl file. The content is as follows:
- PackageAndroid. OS;
- /** {@ Hide }*/
- InterfaceIhardwareservice
- {
- // Obsolete flashlight support
- BooleanGetflashlightenabled ();
- VoidSetflashlightenabled (BooleanOn );
- }
Then introduce
- ImportAndroid. OS. ihardwareservice;
- /**
- * Enable and disable the flashlight.
- * @ Param isenable
- * @ Author Linc
- * @ Date 2012-3-18
- */
- Private VoidSetflashlightenabled (BooleanIsenable)
- {
- Try
- {
- Method method = Class. forname ("android. OS. servicemanager"). getmethod ("getservice", String.Class);
- Ibinder binder = (ibinder) method. Invoke (Null,NewObject [] {"hardware "});
- Ihardwareservice localhardwareservice = ihardwareservice. stub. asinterface (binder );
- Localhardwareservice. setflashlightenabled (isenable );
- }
- Catch(Exception E)
- {
- E. printstacktrace ();
- }
- }
In this way, you can turn on the flashlight. Permissions to be used:
- <Uses-PermissionAndroid: Name = "android. Permission. Flashlight"/>
- <Uses-PermissionAndroid: Name = "android. Permission. hardware_test"/>