Làm cách nào để bật đèn flash phía trước theo chương trình trong Android?


233

Tôi muốn bật đèn flash phía trước (không phải với chế độ xem trước của máy ảnh) theo chương trình trong Android. Tôi googled cho nó nhưng sự giúp đỡ tôi tìm thấy gọi tôi đến đây trang

Có ai có bất kỳ liên kết hoặc mã mẫu?

Câu trả lời:


401

Đối với vấn đề này, bạn nên:

  1. Kiểm tra xem đèn pin có sẵn hay không?

  2. Nếu vậy thì Tắt / Bật

  3. Nếu không thì bạn có thể làm bất cứ điều gì, theo nhu cầu ứng dụng của bạn.

Để kiểm tra tính khả dụng của đèn flash trong thiết bị:

Bạn có thể sử dụng như sau:

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

sẽ trả về true nếu flash có sẵn, false nếu không.

Xem:
http://developer.android.com/reference/android/content/pm/PackageManager.html để biết thêm thông tin.

Để bật / tắt đèn pin:

Tôi đã tìm hiểu và nhận được điều này về ERIC.FLASHLIGHT. Sự cho phép của bản kê khai Android có vẻ đầy hứa hẹn:

 <!-- 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" />

Sau đó, sử dụng Camera và đặt Camera.Parameter . Tham số chính được sử dụng ở đây là FLASH_MODE_TORCH .

ví dụ.

Mã Snippet để bật đèn pin máy ảnh.

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

Đoạn mã để tắt đèn led camera.

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

Tôi chỉ tìm thấy một dự án sử dụng sự cho phép này. Kiểm tra mã src của cài đặt nhanh. tại đây http://code.google.com.vn/p/quick-sinstall/ (Lưu ý: Liên kết này hiện đã bị hỏng)

Đối với Đèn pin, hãy trực tiếp tìm http://code.google.com.vn/p/quick-sinstall/source/browse/trunk/quick-sinstall/#quick-sinstall/src/com/bwx/bequick/flashlight (Lưu ý: Liên kết này là bây giờ bị hỏng)

Update6 Bạn cũng có thể thử thêm SurfaceView như được mô tả trong câu trả lời này Đèn pin LED trên Galaxy Nexus có thể điều khiển bằng API nào? Đây dường như là một giải pháp hoạt động trên nhiều điện thoại.

Cập nhật 5 Cập nhật chính

Tôi đã tìm thấy một Liên kết thay thế (đối với các liên kết bị hỏng ở trên): http://www.java2s.com/Open-Source/Android/Tools/quick-sinstall/com.bwx.bequick.flashlight.htmlm Bây giờ bạn có thể sử dụng liên kết. [Cập nhật: 14/9/2012 Liên kết này hiện đã bị hỏng]

Cập nhật 1

Một mã nguồn mở khác: http://code.google.com.vn/p/torch/source/browse/

Cập nhật 2

Ví dụ cho thấy cách bật đèn LED trên Motorola Droid: http://code.google.com.vn/p/droidled/

Một mã nguồn mở khác:

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

Cập nhật 3 (Tiện ích để bật / tắt đèn led camera)

Nếu bạn muốn phát triển một tiện ích bật / tắt đèn led máy ảnh của mình, thì bạn phải tham khảo Tiện ích trả lời của tôi để bật / tắt đèn pin máy ảnh trong Android ..

Cập nhật 4

Nếu bạn muốn đặt cường độ ánh sáng phát ra từ đèn LED camera, bạn có thể tham khảo Tôi có thể thay đổi cường độ đèn LED của thiết bị Android không? bài đầy đủ. Lưu ý rằng chỉ các thiết bị HTC đã root mới hỗ trợ tính năng này.

** Vấn đề: **

Cũng có một số vấn đề trong khi bật / tắt đèn pin. ví dụ. đối với các thiết bị không có FLASH_MODE_TORCHhoặc thậm chí nếu có, thì đèn pin không BẬT, v.v.

Điển hình là Samsung tạo ra rất nhiều vấn đề.

Bạn có thể tham khảo các vấn đề trong danh sách dưới đây:

Sử dụng đèn pin máy ảnh trong Android

BẬT / TẮT đèn LED / đèn flash của máy ảnh trong Samsung Galaxy Ace 2.2.1 & Galaxy Tab


2
Cảm ơn sự giúp đỡ của bạn, Nó làm việc cho tôi! - Tôi vừa sao chép giao diện Đèn pin và lớp HtcLedFlashlight sau đó tôi chỉ cần gọi phương thức setOn với HtcLedFlashlight đúng / sai. --- Interface-Đèn pin code.google.com/p/quick-settings/source/browse/trunk/... - Class-HtcLedFlashlight code.google.com/p/quick-settings/source/browse/trunk/...
saiket

1
@saiket: hoan nghênh .. nếu vấn đề của bạn được giải quyết thì hãy đánh dấu câu trả lời này là đã giải quyết. để nó có thể hữu ích cho người khác ..
Kartik Domadiya

1
@PolamReddyRajaReddy: Tôi nghĩ bạn đang thử nghiệm trong Thiết bị Samsung. Tôi có đúng không
Kartik Domadiya

7
đối với quyền, mã chính xác trong tệp kê khai là: `<
used

1
Cũng sử dụng: - camera.release ();
Chetan

35

Theo kinh nghiệm của tôi, nếu ứng dụng của bạn được thiết kế để hoạt động theo cả hướng dọc và ngang, bạn cần khai báo biến camlà tĩnh. Mặt khác, onDestroy()được gọi là chuyển hướng, phá hủy nó nhưng không giải phóng Camera nên không thể mở lại được.

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

để biểu lộ tôi đã phải đặt dòng này

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

từ http://developer.android.com/reference/android/hardware/Camera.html

dòng gợi ý ở trên không làm việc cho tôi.


Bạn không cần kiểm tra tính năng hệ thống nếu máy ảnh tắt. Nếu cam! = Null, nó đã được bật
Greg Enni

1
Phần hữu ích nhất đối với tôi làyou need to declare the variable cam as static
Alex Jolig

Khi nhập Cameralớp, hãy AndroidStudio chú ý đến android.hardwarelớp ...
AN

32

Trong API 23 trở lên (Android M, 6.0)

Bật mã

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

TẮT mã

camManager.setTorchMode(cameraId, false);

Và Quyền

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

EDIT BỔ SUNG

Mọi người vẫn ủng hộ câu trả lời của tôi vì vậy tôi quyết định đăng thêm mã Đây là giải pháp của tôi cho vấn đề trở lại trong ngày:

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
Bạn có ý nghĩa gì bởi "Thông thường camera trước ở vị trí 0"? Làm thế nào tôi có thể kiểm tra cái nào ở phía trước và cái nào không? BTW, camera phía trước là camera được hướng đến người dùng hiện tại. Camera mặt sau là camera có lẽ luôn có đèn flash. Và làm cách nào để kiểm tra xem đèn flash được bật hay tắt?
nhà phát triển Android

13

Tôi có đèn AutoFlash với ba bước đơn giản dưới đây.

  • Tôi vừa thêm Quyền máy ảnh và Flash trong tệp 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" />
  • Trong Mã máy ảnh của bạn làm theo cách này.

    //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 -> Bây giờ Chuyển đến khu vực ánh sáng Dim và Chụp ảnh nhanh, bạn sẽ nhận được đèn flash tự động nếu thiết bị hỗ trợ.


9

Android Lollipop đã giới thiệu API camera2 và không dùng API camera trước đó. Tuy nhiên, sử dụng API không dùng nữa để bật flash vẫn hoạt động và đơn giản hơn nhiều so với sử dụng API mới.

Có vẻ như API mới được thiết kế để sử dụng trong các ứng dụng máy ảnh chuyên dụng đầy đủ tính năng và các kiến ​​trúc sư của nó đã không thực sự xem xét các trường hợp sử dụng đơn giản hơn như bật đèn pin. Để làm điều đó bây giờ, người ta phải có một Trình quản lý ảnh, tạo một CaptureSession với một bề mặt giả, và cuối cùng tạo và bắt đầu một CaptureRequest. Xử lý ngoại lệ, dọn dẹp tài nguyên và gọi lại dài bao gồm!

Để xem cách bật đèn pin trên Lollipop và mới hơn, hãy xem Đèn pin điều khiển trong dự án AOSP (thử tìm API mới nhất khi sử dụng cũ hơn đã được sửa đổi). Đừng quên thiết lập các quyền cần thiết.


Android Marshmallow cuối cùng đã giới thiệu một cách đơn giản để bật đèn flash với setTorchMode .


1
API android.hardware.Camera cũ tiếp tục hoạt động chính xác như trước đây, vì vậy không có lý do cơ bản nào bạn cần sử dụng android.hardware.camera2 cho đèn pin. Tuy nhiên, có thể bạn có thể giảm mức tiêu thụ năng lượng và tải CPU bằng camera2, vì bạn không cần phải xem trước hoạt động để bật đèn pin.
Eddy Talvala

Tôi đã thử một trong những triển khai đơn giản hơn trên hai thiết bị Lollipop và nó không bật đèn flash, mặc dù nó đã hoạt động trên tất cả một số thiết bị tiền Lollipop mà tôi đã thử. Có lẽ đó chỉ là một lỗi trong Lollipop. Nếu các phương thức cũ vẫn hoạt động cho bạn và nếu bạn không phải là người thuần túy Java, hãy tiếp tục sử dụng API cũ vì nó đơn giản hơn nhiều :)
LukaCiko

Tôi hiện đang có Nexus 5 với Lollipop và nó hoạt động hoàn hảo. Tôi cũng sở hữu một ứng dụng do chính tôi tạo ra và được thực hiện với các phương thức này. Trong trường hợp bất cứ ai muốn thử nó. Tôi đặt một liên kết đến cửa hàng play: play.google.com/store/apps/details?id=com.fadad.li INTERNa Điều quan trọng chủ yếu là đảm bảo rằng máy ảnh đang hoạt động hoặc vô hiệu hóa trước khi chạy flash và quyền.
ferdiado

Xin lỗi, là lỗi của tôi. Một ứng dụng khác có thể đã sử dụng máy ảnh khi tôi cố bật đèn flash bằng API cũ. Tôi đã cập nhật câu trả lời.
LukaCiko

7

Mã hoàn chỉnh cho ứng dụng đèn pin android

Rõ ràng

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

  }

nếu đèn flash đã được bật trước khi bắt đầu ví dụ của bạn, thì việc cố gắng tắt flash sẽ không hoạt động ... bạn có giải pháp nào cho vấn đề đó không?
Taifun

7

Có nhiều cách khác nhau để truy cập Camera Flash trong các phiên bản Android khác nhau. Rất ít API ngừng hoạt động trong Lollipop và sau đó nó đã được thay đổi một lần nữa trong Marshmallow. Để khắc phục điều này, tôi đã tạo ra một thư viện đơn giản mà tôi đã sử dụng trong một vài dự án của mình và nó cho kết quả tốt. Nó vẫn chưa hoàn thành, nhưng bạn có thể thử kiểm tra mã và tìm các phần còn thiếu. Đây là liên kết - NoobCameraFlash .

Nếu bạn chỉ muốn tích hợp vào mã của mình, bạn có thể sử dụng gradle cho điều đó. Đây là hướng dẫn (Lấy trực tiếp từ Readme) -

Bước 1. Thêm kho lưu trữ JitPack vào tệp xây dựng của bạn. Thêm nó vào bản dựng gốc của bạn. Nâng cấp ở cuối kho:

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

Bước 2. Thêm phụ thuộc

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

Sử dụng

Khởi tạo NoobCameraManagersingleton.

NoobCameraManager.getInstance().init(this);

Bạn có thể tùy ý đặt Cấp độ nhật ký để ghi nhật ký gỡ lỗi. Ghi nhật ký sử dụng thư viện LumberJack . LogLevel mặc định làLogLevel.None

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

Sau đó, bạn chỉ cần gọi cho singleton để bật hoặc tắt đèn flash của camera.

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

Bạn phải tự chăm sóc các quyền thời gian chạy để truy cập Camera, trước khi khởi chạy NoobCameraManager. Trong phiên bản 0.1.2 trở về trước, chúng tôi đã từng cung cấp hỗ trợ cho các quyền trực tiếp từ thư viện, nhưng do phụ thuộc vào đối tượng Activity, chúng tôi phải xóa nó.

Thật dễ dàng để chuyển Flash

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

Vui lòng thêm hỗ trợ để sử dụng Ngữ cảnh thay vì Hoạt động. Cảm ơn!
Vajira Lasantha

@VajiraLasantha Đối tượng Activity được yêu cầu để lấy quyền. Tôi đã dự định loại bỏ hoàn toàn yêu cầu bằng cách tách các quyền bằng cách nào đó. Nó đã được theo dõi ở đây - github.com/Abhi347/NoobCameraFlash/issues/3 Trong thời gian đó, bạn có thể sửa đổi mã để xóa yêu cầu nếu bạn muốn. Tôi có thể cần một chút thời gian để làm việc với nó.
noob

Vâng, tôi đã thấy điều đó. Tôi đã thay đổi lib của bạn để làm việc với Ngữ cảnh bằng cách xóa công cụ cấp phép. Bởi vì ứng dụng của tôi đã xác nhận quyền. Xin vui lòng cho tôi biết khi bạn phát hành một triển khai phù hợp hỗ trợ Ngữ cảnh. Cảm ơn!
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

Nếu có nhiều đèn flash trên thiết bị thì sao? Một số có camera phía trước ...
nhà phát triển Android

0

Tôi đã triển khai chức năng này trong ứng dụng của mình thông qua các đoạn sử dụng SurfaceView. Liên kết đến câu hỏi stackoverflow này và câu trả lời của nó có thể được tìm thấy ở đây

Hi vọng điêu nay co ich :)


0

Trong Marshmallow trở lên, `setTorchMode () 'của CameraMan dường như là câu trả lời. Điều này làm việc cho tôi:

 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

Thử cái này.

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

Bạn cũng có thể sử dụng đoạn mã sau để tắt đèn flash.

Camera.Parameters params = mCamera.getParameters()
p.setFlashMode(Parameters.FLASH_MODE_OFF);
mCamera.setParameters(params);
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.