วิธีการเปิดไฟแฟลชด้านหน้าโดยทางโปรแกรมใน Android?


233

ฉันต้องการเปิดไฟแฟลชด้านหน้า (ไม่ใช่ภาพตัวอย่างจากกล้อง) โดยทางโปรแกรมใน Android ฉัน googled มัน แต่ความช่วยเหลือที่ฉันพบเรียกฉันมายังหน้านี้

ใครบ้างมีลิงค์หรือรหัสตัวอย่าง?

คำตอบ:


401

สำหรับปัญหานี้คุณควร:

  1. ตรวจสอบว่ามีไฟฉายหรือไม่?

  2. หากเป็นเช่นนั้นให้ปิด / เปิด

  3. ถ้าไม่เช่นนั้นคุณสามารถทำอะไรก็ได้ตามที่แอพของคุณต้องการ

สำหรับการตรวจสอบความพร้อมของแฟลชในอุปกรณ์:

คุณสามารถใช้สิ่งต่อไปนี้:

 context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH);

ซึ่งจะคืนค่าจริงหากมีแฟลชให้ใช้งานผิดถ้าไม่ใช่

ดู:
http://developer.android.com/reference/android/content/pm/PackageManager.htmlสำหรับข้อมูลเพิ่มเติม

สำหรับการเปิด / ปิดไฟฉาย:

ฉัน googled ออกและได้รับสิ่งนี้เกี่ยวกับ android.permission.FLASHLIGHT การอนุญาตให้ใช้ Android แสดงให้เห็นว่ามีแนวโน้ม:

 <!-- Allows access to the flashlight -->
 <permission android:name="android.permission.FLASHLIGHT"
             android:permissionGroup="android.permission-group.HARDWARE_CONTROLS"
             android:protectionLevel="normal"
             android:label="@string/permlab_flashlight"
             android:description="@string/permdesc_flashlight" />

จากนั้นให้ใช้กล้องและชุดCamera.Parameters พารามิเตอร์หลักที่ใช้ที่นี่เป็นFLASH_MODE_TORCH

เช่น.

Code Snippet เพื่อเปิดไฟฉายกล้อง

Camera cam = Camera.open();     
Parameters p = cam.getParameters();
p.setFlashMode(Parameters.FLASH_MODE_TORCH);
cam.setParameters(p);
cam.startPreview();

ข้อมูลโค้ดเพื่อปิดไฟ LED ของกล้อง

  cam.stopPreview();
  cam.release();

ฉันเพิ่งพบโครงการที่ใช้การอนุญาตนี้ ตรวจสอบรหัส src ของการตั้งค่าด่วน ที่นี่http://code.google.com/p/quick-settings/ (หมายเหตุ: ลิงค์นี้เสียแล้ว)

สำหรับไฟฉายโดยตรงให้ดูที่ http://code.google.com/p/quick-settings/source/browse/trunk/quick-settings/#quick-settings/src/com/bwx/bequick/flashlight (หมายเหตุ: ลิงค์นี้คือ ตอนนี้เสีย)

Update6 คุณสามารถลองเพิ่ม SurfaceView ดังที่อธิบายไว้ในคำตอบนี้ไฟฉาย LED บน Galaxy Nexus ซึ่งควบคุมโดย API ใด? นี่น่าจะเป็นทางออกที่ใช้งานได้กับโทรศัพท์หลายรุ่น

อัปเดต 5 การอัปเดตที่สำคัญ

ฉันพบลิงค์สำรอง (สำหรับลิงค์ที่เสียด้านบน): http://www.java2s.com/Open-Source/Android/Tools/quick-settings/com.bwx.bequick.flashlight.htmตอนนี้คุณสามารถใช้สิ่งนี้ ลิงค์ [อัพเดท: 14/9/2012 ลิงค์นี้เสียแล้ว]

อัปเดต 1

รหัส OpenSource อื่น: http://code.google.com/p/torch/source/browse/

อัปเดต 2

ตัวอย่างแสดงวิธีเปิดใช้งาน LED บน Motorola Droid: http://code.google.com/p/droidled/

รหัสโอเพนซอร์สอื่น:

http://code.google.com/p/covedesigndev/
http://code.google.com/p/search-light/

อัปเดต 3 (วิดเจ็ตสำหรับเปิด / ปิดกล้อง LED)

หากคุณต้องการพัฒนาเครื่องมือที่เปิด / ปิดกล้องของคุณคุณต้องอ้างอิงWidgetคำตอบของฉัน สำหรับการเปิด / ปิดไฟฉายกล้องใน android ..

อัปเดต 4

หากคุณต้องการตั้งค่าความเข้มของแสงที่เกิดจาก LED กล้องคุณสามารถดูฉันจะเปลี่ยนความเข้ม LED ของอุปกรณ์ Android ได้หรือไม่? โพสต์แบบเต็ม โปรดทราบว่าเฉพาะอุปกรณ์ HTC ที่รูทเครื่องเท่านั้นที่รองรับคุณสมบัตินี้

** ประเด็น: **

นอกจากนี้ยังมีปัญหาบางอย่างในขณะที่เปิด / ปิดไฟฉาย เช่น. สำหรับอุปกรณ์ที่ไม่มีFLASH_MODE_TORCHหรือแม้ว่าจะมีแล้วไฟฉายก็ไม่เปิด ฯลฯ

โดยทั่วไปแล้ว Samsung จะสร้างปัญหามากมาย

คุณสามารถอ้างถึงปัญหาในรายการด้านล่าง:

ใช้ไฟฉายกล้องใน Android

เปิด / ปิดกล้อง LED / แสงแฟลชใน Samsung Galaxy Ace 2.2.1 & Galaxy Tab


2
ขอบคุณสำหรับความช่วยเหลือของคุณมันใช้งานได้สำหรับฉัน! - ฉันเพิ่งคัดลอกอินเทอร์เฟซไฟฉายและคลาส HtcLedFlashlight จากนั้นฉันเพิ่งเรียกเมธอด setOn ด้วยจริง / เท็จ HtcLedFlashlight และมัน --- อินเทอร์เฟซสำหรับไฟฉายcode.google.com/p/quick-settings/source/browse/trunk/ ...... - Class-HtcLedFlashlight code.google.com/p/quick-settings/source/browse/trunk/ …
saiket

1
@saiket: ยินดีต้อนรับ .. หากปัญหาของคุณได้รับการแก้ไขให้ทำเครื่องหมายคำตอบนี้ว่าแก้ไขแล้ว เพื่อที่จะสามารถเป็นประโยชน์กับคนอื่น ๆ ..
Kartik Domadiya

1
@ PolamReddyRajaReddy: ฉันคิดว่าคุณกำลังทดสอบอุปกรณ์ Samsung ฉันถูกไหม ?
Kartik Domadiya

7
สำหรับสิทธิ์รหัสที่ถูกต้องในไฟล์รายการคือ: `<ใช้สิทธิ์ Android: ชื่อ =" android.permission.CAMERA "/> <ใช้สิทธิ์อนุญาต Android: ชื่อ =" android.permission.FLASHLIGHT "/>`
ixeft

1
ยังใช้: - camera.release ();
Chetan

35

จากประสบการณ์ของฉันหากแอปพลิเคชันของคุณถูกออกแบบมาให้ทำงานได้ทั้งแนวตั้งและแนวนอนคุณต้องประกาศตัวแปรcamเป็นแบบคงที่ มิฉะนั้นonDestroy()ซึ่งเรียกว่าการวางแนวการสลับจะทำลาย แต่ไม่ปล่อยกล้องดังนั้นจึงไม่สามารถเปิดอีกครั้งได้

package com.example.flashlight;

import android.hardware.Camera;
import android.hardware.Camera.Parameters;
import android.os.Bundle;
import android.app.Activity;
import android.content.pm.PackageManager;
import android.view.Menu;
import android.view.View;
import android.widget.Toast;

public class MainActivity extends Activity {

public static Camera cam = null;// has to be static, otherwise onDestroy() destroys it

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.activity_main, menu);
    return true;
}

public void flashLightOn(View view) {

    try {
        if (getPackageManager().hasSystemFeature(
                PackageManager.FEATURE_CAMERA_FLASH)) {
            cam = Camera.open();
            Parameters p = cam.getParameters();
            p.setFlashMode(Parameters.FLASH_MODE_TORCH);
            cam.setParameters(p);
            cam.startPreview();
        }
    } catch (Exception e) {
        e.printStackTrace();
        Toast.makeText(getBaseContext(), "Exception flashLightOn()",
                Toast.LENGTH_SHORT).show();
    }
}

public void flashLightOff(View view) {
    try {
        if (getPackageManager().hasSystemFeature(
                PackageManager.FEATURE_CAMERA_FLASH)) {
            cam.stopPreview();
            cam.release();
            cam = null;
        }
    } catch (Exception e) {
        e.printStackTrace();
        Toast.makeText(getBaseContext(), "Exception flashLightOff",
                Toast.LENGTH_SHORT).show();
    }
}
}

เพื่อให้ประจักษ์ฉันต้องใส่บรรทัดนี้

    <uses-permission android:name="android.permission.CAMERA" />

จากhttp://developer.android.com/reference/android/hardware/Camera.html

บรรทัดที่แนะนำด้านบนไม่ทำงานสำหรับฉัน


คุณไม่จำเป็นต้องตรวจสอบคุณสมบัติของระบบว่ากล้องปิดอยู่หรือไม่ ถ้า cam! = null มันเปิดอยู่
Greg Ennis

1
ส่วนที่เป็นประโยชน์ที่สุดสำหรับฉันคือyou need to declare the variable cam as static
Alex Jolig

เมื่อนำเข้าCameraชั้นในAndroidStudio ให้ความสนใจที่จะเป็นandroid.hardwareคลาส ...

32

ใน API 23 หรือสูงกว่า (Android M, 6.0)

เปิดรหัส

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    CameraManager camManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
    String cameraId = null; 
    try {
        cameraId = camManager.getCameraIdList()[0];
        camManager.setTorchMode(cameraId, true);   //Turn ON
    } catch (CameraAccessException e) {
        e.printStackTrace();
    }
}

ปิดรหัส

camManager.setTorchMode(cameraId, false);

และสิทธิ์

<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.FLASHLIGHT"/>

แก้ไขเพิ่มเติม

ผู้คนยังคงตอบโต้คำตอบของฉันอยู่ฉันจึงตัดสินใจโพสต์รหัสเพิ่มเติมนี่เป็นวิธีการแก้ปัญหาของฉันในวันนี้:

public class FlashlightProvider {

private static final String TAG = FlashlightProvider.class.getSimpleName();
private Camera mCamera;
private Camera.Parameters parameters;
private CameraManager camManager;
private Context context;

public FlashlightProvider(Context context) {
    this.context = context;
}

private void turnFlashlightOn() {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        try {
            camManager = (CameraManager) context.getSystemService(Context.CAMERA_SERVICE);
            String cameraId = null; 
            if (camManager != null) {
                cameraId = camManager.getCameraIdList()[0];
                camManager.setTorchMode(cameraId, true);
            }
        } catch (CameraAccessException e) {
            Log.e(TAG, e.toString());
        }
    } else {
        mCamera = Camera.open();
        parameters = mCamera.getParameters();
        parameters.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
        mCamera.setParameters(parameters);
        mCamera.startPreview();
    }
}

private void turnFlashlightOff() {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        try {
            String cameraId;
            camManager = (CameraManager) context.getSystemService(Context.CAMERA_SERVICE);
            if (camManager != null) {
                cameraId = camManager.getCameraIdList()[0]; // Usually front camera is at 0 position.
                camManager.setTorchMode(cameraId, false);
            }
        } catch (CameraAccessException e) {
            e.printStackTrace();
        }
    } else {
        mCamera = Camera.open();
        parameters = mCamera.getParameters();
        parameters.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
        mCamera.setParameters(parameters);
        mCamera.stopPreview();
    }
}
}

2
คุณหมายถึงอะไรโดย "กล้องด้านหน้าปกติอยู่ที่ตำแหน่ง 0"? ฉันจะตรวจสอบว่าอะไรอยู่ข้างหน้าและอันไหนไม่ได้? BTW, กล้องหน้าหันหน้าไปทางหนึ่งซึ่งถูกส่งไปยังผู้ใช้ปัจจุบัน กล้องหันหน้าไปทางด้านหลังเป็นกล้องที่มีแฟลชเสมอ และฉันจะตรวจสอบว่าแฟลชเปิดหรือปิดได้อย่างไร
นักพัฒนา android

13

ฉันมีไฟแฟลช AutoFlash ด้วยสามขั้นตอนง่ายๆด้านล่าง

  • ฉันเพิ่งเพิ่ม Camera and Flash Permission ในไฟล์Manifest.xml
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />

<uses-permission android:name="android.permission.FLASHLIGHT"/>
<uses-feature android:name="android.hardware.camera.flash" android:required="false" />
  • ในรหัสกล้องของคุณทำเช่นนี้

    //Open Camera
    Camera  mCamera = Camera.open(); 
    
    //Get Camera Params for customisation
    Camera.Parameters parameters = mCamera.getParameters();
    
    //Check Whether device supports AutoFlash, If you YES then set AutoFlash
    List<String> flashModes = parameters.getSupportedFlashModes();
    if (flashModes.contains(android.hardware.Camera.Parameters.FLASH_MODE_AUTO))
    {
         parameters.setFlashMode(Parameters.FLASH_MODE_AUTO);
    }
    mCamera.setParameters(parameters);
    mCamera.startPreview();
    
  • Build + Run -> ตอนนี้ไปที่พื้นที่หรี่แสงและถ่ายภาพคุณควรได้รับแสงแฟลชอัตโนมัติหากอุปกรณ์รองรับ


9

Android Lollipop เปิดตัวcamera2 API และเลิกใช้ API กล้องก่อนหน้านี้ อย่างไรก็ตามการใช้ API ที่เลิกใช้เพื่อเปิดแฟลชยังทำงานได้และง่ายกว่าการใช้ API ใหม่

ดูเหมือนว่า API ใหม่มีไว้สำหรับใช้ในแอพกล้องที่มีคุณสมบัติครบถ้วนและสถาปนิกไม่ได้พิจารณากรณีการใช้ที่ง่ายกว่าเช่นการเปิดไฟฉาย ในการทำเช่นนั้นตอนนี้เราต้องได้รับ CameraManager สร้าง CaptureSession ด้วย Surface จำลองและสุดท้ายสร้างและเริ่ม CaptureRequest การจัดการข้อยกเว้นการล้างทรัพยากรและการโทรกลับที่ยาวนาน!

หากต้องการดูวิธีเปิดไฟฉายใน Lollipop และรุ่นที่ใหม่กว่าให้ดูที่FlashlightControllerในโครงการ AOSP (ลองค้นหา API ใหม่ล่าสุดที่เป็น API ใช้เก่ากว่าที่ได้รับการแก้ไข) อย่าลืมตั้งค่าการอนุญาตที่จำเป็น


Android Marshmallow ที่สุดแนะนำวิธีง่ายๆในการเปิดแฟลชด้วยsetTorchMode


1
android.hardware.Camera API รุ่นเก่ายังคงใช้งานได้เหมือนเดิมดังนั้นจึงไม่มีเหตุผลพื้นฐานที่คุณต้องใช้ android.hardware.camera2 สำหรับไฟฉาย เป็นไปได้ว่าคุณสามารถลดการใช้พลังงานและโหลด CPU ด้วยกล้อง 2 เนื่องจากคุณไม่จำเป็นต้องแสดงตัวอย่างที่ใช้งานอยู่เพื่อเปิดใช้งานไฟฉาย
Eddy Talvala

ฉันได้ลองใช้วิธีที่ง่ายกว่าอย่างหนึ่งของอุปกรณ์ Lollipop สองตัวและมันไม่ได้เปิดแฟลชแม้ว่ามันจะทำงานกับอุปกรณ์ pre-Lollipop ทั้งหมดที่ฉันได้ลอง บางทีนั่นอาจเป็นข้อผิดพลาดใน Lollipop หากวิธีการเก่ายังคงทำงานให้คุณและถ้าหากคุณไม่ได้เป็นคนเจ้าระเบียบ Java ดำเนินการต่อโดยใช้ API เก่ามันเป็นเรื่องง่ายมาก :)
LukaCiko

ปัจจุบันฉันมี Nexus 5 ที่มี Lollipop และทำงานได้อย่างสมบูรณ์ ฉันยังมีแอปพลิเคชันที่สร้างขึ้นด้วยตัวเองและใช้งานได้กับวิธีการเหล่านี้ ในกรณีที่ทุกคนต้องการลอง ฉันใส่ลิงก์ไปยัง play store: play.google.com/store/apps/details?id=com.fadad.linterna สิ่งสำคัญส่วนใหญ่คือต้องแน่ใจว่ากล้องเปิดใช้งานหรือปิดใช้งานก่อนที่จะเปิดแฟลชและการอนุญาต
ferdiado

ขอโทษที่ฉันทำผิด แอพอื่นอาจใช้กล้องเมื่อฉันพยายามเปิดแฟลชด้วย API เก่า ฉันได้อัพเดตคำตอบแล้ว
LukaCiko

7

รหัสที่สมบูรณ์สำหรับแอพไฟฉาย Android

ประจักษ์

  <?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>

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>

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

  }

หากแฟลชเปิดอยู่ก่อนที่จะเริ่มตัวอย่างของคุณแล้วลองปิดแฟลชจะไม่ทำงาน ... คุณมีวิธีแก้ปัญหาสำหรับปัญหานั้นหรือไม่?
Taifun

7

มีวิธีต่างๆในการเข้าถึง Camera Flash ในรุ่น Android ที่แตกต่างกัน ไม่กี่ API หยุดทำงานใน Lollipop แล้วมันก็เปลี่ยนไปอีกครั้งใน Marshmallow เพื่อเอาชนะสิ่งนี้ฉันได้สร้างห้องสมุดง่าย ๆ ที่ฉันใช้ในโครงการไม่กี่โครงการและให้ผลลัพธ์ที่ดี ยังไม่สมบูรณ์ แต่คุณสามารถลองตรวจสอบรหัสและค้นหาชิ้นส่วนที่ขาดหายไป นี่คือการเชื่อมโยง - NoobCameraFlash

หากคุณเพียงต้องการรวมในรหัสของคุณคุณสามารถใช้ gradle นี่คือคำแนะนำ (ถ่ายโดยตรงจาก Readme) -

ขั้นตอนที่ 1 เพิ่มที่เก็บ JitPack ลงในไฟล์บิลด์ของคุณ เพิ่มใน root build.gradle ของคุณในตอนท้ายของที่เก็บ:

allprojects {
        repositories {
            ...
            maven { url "https://jitpack.io" }
        }
}

ขั้นตอนที่ 2 เพิ่มการอ้างอิง

dependencies {
        compile 'com.github.Abhi347:NoobCameraFlash:0.0.1'
  }

การใช้

เริ่มต้นNoobCameraManagerเดี่ยว

NoobCameraManager.getInstance().init(this);

คุณสามารถเลือกที่จะตั้งค่าระดับการบันทึกสำหรับการบันทึกการดีบัก การบันทึกใช้ไลบรารีLumberJack LogLevel เริ่มต้นคือLogLevel.None

NoobCameraManager.getInstance().init(this, LogLevel.Verbose);

หลังจากนั้นคุณเพียงแค่โทรไปที่ซิงเกิลตันเพื่อเปิดหรือปิดแฟลชกล้อง

NoobCameraManager.getInstance().turnOnFlash();
NoobCameraManager.getInstance().turnOffFlash();

คุณต้องดูแลสิทธิ์รันไทม์เพื่อเข้าถึงกล้องถ่ายรูปด้วยตัวเองก่อนที่จะเริ่มต้น NoobCameraManager ในเวอร์ชัน 0.1.2 หรือก่อนหน้านี้เราใช้เพื่อให้การสนับสนุนสิทธิ์โดยตรงจากไลบรารี แต่เนื่องจากการพึ่งพาวัตถุกิจกรรมเราต้องลบมันออก

มันง่ายที่จะสลับ Flash ด้วยเช่นกัน

if(NoobCameraManager.getInstance().isFlashOn()){
    NoobCameraManager.getInstance().turnOffFlash();
}else{
    NoobCameraManager.getInstance().turnOnFlash();
}

โปรดเพิ่มการสนับสนุนสำหรับการใช้บริบทแทนกิจกรรม ขอบคุณ!
Vajira Lasantha

@VajiraLasantha วัตถุกิจกรรมจำเป็นต้องได้รับอนุญาต ฉันวางแผนที่จะลบข้อกำหนดโดยสิ้นเชิงโดยแยกการอนุญาตอย่างใด มันถูกติดตามที่นี่ - github.com/Abhi347/NoobCameraFlash/issues/3 ในเวลาเดียวกันคุณสามารถแก้ไขรหัสเพื่อลบข้อกำหนดได้หากคุณต้องการ ฉันอาจต้องการเวลาในการทำงานกับมัน
noob

ใช่ฉันเห็นว่า ฉันได้เปลี่ยน lib ของคุณให้ทำงานกับบริบทโดยการลบสิ่งที่ได้รับอนุญาต เพราะแอพของฉันทำการตรวจสอบสิทธิ์แล้ว โปรดแจ้งให้เราทราบเมื่อคุณเผยแพร่การใช้งานที่เหมาะสมซึ่งสนับสนุนบริบท ขอบคุณ!
Vajira Lasantha

You have to take care of the runtime permissions to access Camera yourself, before initializing the NoobCameraManager. In version 0.1.2 or earlier we used to provide support for permissions directly from the library, but due to dependency on the Activity object, we have to remove it.
Pratik Butani

จะเกิดอะไรขึ้นถ้ามีอุปกรณ์หลายกะพริบบนอุปกรณ์? กล้องบางตัวหันหน้าไปทางด้านหน้า ...
นักพัฒนา android

0

ฉันใช้ฟังก์ชั่นนี้ในแอปพลิเคชันของฉันผ่านแฟรกเมนต์โดยใช้ SurfaceView ลิงก์ไปยังคำถามสแต็คโอเวอร์โฟลว์นี้และคำตอบมีอยู่ที่นี่

หวังว่าจะช่วย :)


0

ใน Marshmallow และสูงกว่านั้น `setTorchMode () 'ของ CameraManager ดูเหมือนจะเป็นคำตอบ สิ่งนี้ใช้ได้กับฉัน:

 final CameraManager mCameraManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
 CameraManager.TorchCallback torchCallback = new CameraManager.TorchCallback() {
     @Override
     public void onTorchModeUnavailable(String cameraId) {
         super.onTorchModeUnavailable(cameraId);
     }

     @Override
     public void onTorchModeChanged(String cameraId, boolean enabled) {
         super.onTorchModeChanged(cameraId, enabled);
         boolean currentTorchState = enabled;
         try {
             mCameraManager.setTorchMode(cameraId, !currentTorchState);
         } catch (CameraAccessException e){}



     }
 };

 mCameraManager.registerTorchCallback(torchCallback, null);//fires onTorchModeChanged upon register
 mCameraManager.unregisterTorchCallback(torchCallback);

0

ลองสิ่งนี้

CameraManager camManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
    String cameraId = null; // Usually front camera is at 0 position.
    try {
        cameraId = camManager.getCameraIdList()[0];
        camManager.setTorchMode(cameraId, true);
    } catch (CameraAccessException e) {
        e.printStackTrace();
    }

-3

คุณสามารถใช้รหัสต่อไปนี้เพื่อปิดแฟลชได้

Camera.Parameters params = mCamera.getParameters()
p.setFlashMode(Parameters.FLASH_MODE_OFF);
mCamera.setParameters(params);
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.