Android 如何使用相机闪光灯作为手电筒?

Android 如何使用相机闪光灯作为手电筒?,android,Android,下面是我在Android中启用手电筒的代码。在Toast消息中,它返回以下参数:auto、on、off和torch。将参数设置为FLASH_MODE_TORCH后,我无法启用TORCH。我的清单权限是: <uses-permission android:name="android.permission.CAMERA"></uses-permission> <permission android:name="android.permission.FLASHLI

下面是我在Android中启用手电筒的代码。在Toast消息中,它返回以下参数:auto、on、off和torch。将参数设置为FLASH_MODE_TORCH后,我无法启用TORCH。我的清单权限是:

<uses-permission android:name="android.permission.CAMERA"></uses-permission>
    <permission android:name="android.permission.FLASHLIGHT"
       android:permissionGroup="android.permission-group.HARDWARE_CONTROLS"
       android:protectionLevel="normal"/>
    <uses-feature android:name="android.hardware.camera"></uses-feature>

我的代码:

 public class CameraFlashActivity extends Activity {
        /** Called when the activity is first created. */
        public Camera mCamera;
        Parameters cameraParameters;
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            boolean cameraPresnt = this.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH);
           if( cameraPresnt == true)
           {
               Toast.makeText(getApplicationContext(),"Flash is there",10).show();
               if(mCamera==null)
               {

                 try {
                    mCamera = Camera.open();
                    mCamera.startPreview();
                 Toast.makeText(getApplicationContext(),"Camera is  present",10).show();
                  } catch (Exception e) {
                    Log.i("CameraFlashActivity", "Camera.open() failed: " + e.getMessage());
                  }
                   if(mCamera==null)
                   {
                       Toast.makeText(getApplicationContext(),"Camera object is null",10).show();
                   }
                   else
                   {
               cameraParameters = mCamera.getParameters();
               if(cameraParameters==null)
               {
                   Toast.makeText(getApplicationContext(),"No camera parameters",10).show();
               }
               else
               {
                   List<String> flashmodes = cameraParameters.getSupportedFlashModes();
                   String supportedFlashModes = cameraParameters.getFlashMode();
                   Toast.makeText(getApplicationContext(),flashmodes.toString(),10).show();
                   Toast.makeText(getApplicationContext(),supportedFlashModes,10).show();
                   cameraParameters.setFlashMode(Parameters.FLASH_MODE_ON);
                   mCamera.setParameters(cameraParameters);
                   String supportFlashModes = cameraParameters.getFlashMode();
                   Toast.makeText(getApplicationContext(),supportFlashModes,10).show();
                   Toast.makeText(getApplicationContext(),"Camera parameters are set on flash light",10).show();

               }
                   }
               }
               else
               {

               }
           }
           else
           {
               Toast.makeText(getApplicationContext(),"Flash is not  there",10).show();
           }
        }
        public void onDestroy() {
            super.onDestroy();
            if (mCamera != null) {
                cameraParameters.setFlashMode(Parameters.FLASH_MODE_TORCH);
                   mCamera.setParameters(cameraParameters);
                   mCamera.stopPreview();
              mCamera.release();
            }
            Log.i("cameraFlashLight", "onDestroy");
          }
    }
公共类CameraFlashActivity扩展活动{
/**在首次创建活动时调用*/
公共摄像机mCamera;
参数摄像机参数;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
boolean cameraPresnt=this.getPackageManager().hasSystemFeature(PackageManager.FEATURE\u CAMERA\u FLASH);
如果(cameraPresnt==true)
{
Toast.makeText(getApplicationContext(),“Flash就在那里”,10.show();
if(mCamera==null)
{
试一试{
mCamera=Camera.open();
mCamera.startPreview();
Toast.makeText(getApplicationContext(),“摄像机存在”,10.show();
}捕获(例外e){
Log.i(“CameraFlashActivity”,“Camera.open()失败:”+e.getMessage());
}
if(mCamera==null)
{
Toast.makeText(getApplicationContext(),“摄影机对象为空”,10.show();
}
其他的
{
cameraParameters=mCamera.getParameters();
if(cameraParameters==null)
{
Toast.makeText(getApplicationContext(),“无摄像机参数”,10.show();
}
其他的
{
List flashmodes=cameraParameters.getSupportedFlashModes();
String supportedFlashModes=cameraParameters.getFlashMode();
Toast.makeText(getApplicationContext(),flashmodes.toString(),10.show();
Toast.makeText(getApplicationContext(),supportedFlashModes,10.show();
cameraParameters.setFlashMode(参数.FLASH\u MODE\u ON);
mCamera.setParameters(cameraParameters);
String supportFlashModes=cameraParameters.getFlashMode();
Toast.makeText(getApplicationContext(),supportFlashModes,10.show();
Toast.makeText(getApplicationContext(),“相机参数设置在闪光灯上”,10.show();
}
}
}
其他的
{
}
}
其他的
{
Toast.makeText(getApplicationContext(),“Flash不存在”,10.show();
}
}
公共空间{
super.ondestory();
if(mCamera!=null){
摄像机参数。设置闪光灯模式(参数。闪光灯模式);
mCamera.setParameters(cameraParameters);
mCamera.stopPreview();
mCamera.release();
}
Log.i(“照相机手电筒”、“onDestroy”);
}
}

使用以下代码序列:

mCamera = Camera.open();
cameraParameters = mCamera.getParameters();
cameraParameters.setFlashMode(Parameters.FLASH_MODE_TORCH);
mCamera.setParameters(parameters);
mCamera.startPreview();

使用以下代码序列:

mCamera = Camera.open();
cameraParameters = mCamera.getParameters();
cameraParameters.setFlashMode(Parameters.FLASH_MODE_TORCH);
mCamera.setParameters(parameters);
mCamera.startPreview();