Android启动摄像机意图随着Flash打开



我有一个允许用户拍照的应用程序。我希望闪光灯被打开,我可以在我的应用程序中执行此操作。但是,当我使用Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);之类的操作启动相机时,手电筒会自动关闭。我可以在"强制"手电筒上设置一个参数?

不确定,我们是否能够启用闪存意图。您可以在不使用意图类型的情况下启用相机中的闪光灯。

清单:

<?xml version="1.0" encoding="utf-8"?>
  <manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.user.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="@mipmap/ic_launcher"
          android:label="@string/app_name"
          android:theme="@style/AppTheme" >
          <activity
              android:name=".MainActivity"
              android:label="@string/app_name" >
              <intent-filter>
                  <action android:name="android.intent.action.MAIN" />
                  <category android:name="android.intent.category.LAUNCHER" />
              </intent-filter>
          </activity>
      </application>
  </manifest>

mainActivity.java

import android.app.AlertDialog;
  import android.content.DialogInterface;
  import android.content.pm.PackageManager;
  import android.hardware.Camera;
  import android.hardware.Camera.Parameters;
  import android.support.v7.app.AppCompatActivity;
  import android.os.Bundle;
  import android.view.View;
  import android.widget.Button;
  import java.security.Policy;
  public class MainActivity extends AppCompatActivity {
      Button button;
      private Camera camera;
      private boolean isFlashOn;
      private boolean hasFlash;
      Parameters params;
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_main);
          button = (Button) findViewById(R.id.button);
          hasFlash = getApplicationContext().getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH);
          if(!hasFlash) {
              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() {
                  @Override
                  public void onClick(DialogInterface dialog, int which) {
                      finish();
                  }
              });
              alert.show();
              return;
          }
          getCamera();
          button.setOnClickListener(new View.OnClickListener() {
              @Override
              public void onClick(View v) {
                  if (isFlashOn) {
                      turnOffFlash();
                      button.setText("ON");
                  } else {
                      turnOnFlash();
                      button.setText("OFF");
                  }
              }
          });
      }
      private void getCamera() {
          if (camera == null) {
              try {
                  camera = Camera.open();
                  params = camera.getParameters();
              }catch (Exception e) {
              }
          }
      }
      private void turnOnFlash() {
          if(!isFlashOn) {
              if(camera == null || params == null) {
                  return;
              }
              params = camera.getParameters();
              params.setFlashMode(Parameters.FLASH_MODE_TORCH);
              camera.setParameters(params);
              camera.startPreview();
              isFlashOn = true;
          }
      }
      private void turnOffFlash() {
              if (isFlashOn) {
                  if (camera == null || params == null) {
                      return;
                  }
                  params = camera.getParameters();
                  params.setFlashMode(Parameters.FLASH_MODE_OFF);
                  camera.setParameters(params);
                  camera.stopPreview();
                  isFlashOn = false;
              }
      }
      @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;
          }
      }
  }

activity_main.xml

<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:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="OFF"
        android:id="@+id/button"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true"
        android:onClick="turnFlashOnOrOff" />
</RelativeLayout>

最新更新