প্রোগ্রামটিতে অ্যান্ড্রয়েডে কীভাবে ফ্রন্ট ফ্ল্যাশ লাইট চালু করবেন?


233

আমি অ্যান্ড্রয়েডে প্রোগ্রাম্যাটিকভাবে সামনের ফ্ল্যাশ লাইট (ক্যামেরা প্রিভিউ সহ নয়) চালু করতে চাই। আমি এটির জন্য গুগল করেছি তবে যে সহায়তা আমি পেয়েছি তা আমাকে এই পৃষ্ঠায় উল্লেখ করেছে

কারও কি কোনও লিঙ্ক বা নমুনা কোড রয়েছে?

উত্তর:


401

এই সমস্যার জন্য আপনার উচিত:

  1. টর্চলাইট পাওয়া যায় কিনা তা পরীক্ষা করে দেখুন?

  2. যদি তা হয় তবে অফ / অন করুন

  3. যদি তা না হয় তবে আপনার অ্যাপের প্রয়োজন অনুসারে আপনি যা কিছু করতে পারেন।

ডিভাইসে ফ্ল্যাশের প্রাপ্যতা যাচাইয়ের জন্য :

আপনি নিম্নলিখিত ব্যবহার করতে পারেন:

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

যা কোনও ফ্ল্যাশ উপলভ্য হলে সত্য ফিরে আসবে, না থাকলে মিথ্যা।

আরও তথ্যের জন্য দেখুন:
http://developer.android.com/references/android/content/pm/PackageManager.html

ফ্ল্যাশলাইট চালু / বন্ধ করার জন্য:

আমি googled এবং এটি android.permission.FLASHLightT সম্পর্কে পেয়েছি। অ্যান্ড্রয়েড প্রকাশের অনুমতি আশ্বাসজনক দেখায়:

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

তারপরে ক্যামেরাটি ব্যবহার করুন এবং ক্যামেরা সেট করুন P প্যারামিটার । এখানে ব্যবহৃত প্রধান প্যারামিটার হ'ল FLASH_MODE_TORCH

যেমন।

ক্যামেরা ফ্ল্যাশলাইট চালু করতে কোড স্নিপেট।

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

ক্যামেরা নেতৃত্বাধীন আলো বন্ধ করার জন্য কোড স্নিপেট।

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

আমি সবেমাত্র একটি প্রকল্প পেয়েছি যা এই অনুমতি ব্যবহার করে। দ্রুত-সেটিংসের এসআরসি কোড পরীক্ষা করুন। এখানে 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 দেখুন (দ্রষ্টব্য: এই লিঙ্কটি এখন ভাঙ্গা)

আপডেট You আপনি কোন এপিআই দ্বারা নিয়ন্ত্রনযোগ্য গ্যালাক্সি নেক্সাসের এলইডি ফ্ল্যাশলাইটটিতে বর্ণিত হিসাবে একটি সারফেসভিউ যুক্ত করার চেষ্টা করতে পারেন ? এটি এমন একটি সমাধান বলে মনে হচ্ছে যা অনেক ফোনে কাজ করে।

আপডেট 5 মেজর আপডেট

আমি বিকল্প লিঙ্কটি পেয়েছি (উপরের ভাঙ্গা লিঙ্কগুলির জন্য): http://www.java2s.com/Open-Source/Android/Tools/quick-settings/com.bwx.bequick.flashlight.htm আপনি এখন এটি ব্যবহার করতে পারেন লিঙ্ক। [আপডেট: 14/9/2012 এই লিঙ্কটি এখন ভেঙে গেছে]

আপডেট 1

অন্য একটি ওপেনসোর্স কোড: http://code.google.com/p/torch/source/browse/

আপডেট 2

মোটরোলা ড্রডে কীভাবে LED সক্ষম করবেন তা উদাহরণ: http://code.google.com/p/droidled/

অন্য ওপেন সোর্স কোড:

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

আপডেট 3 (ক্যামেরা চালিত / বন্ধ করার জন্য উইজেট)

আপনি যদি এমন কোনও উইজেট বিকাশ করতে চান যা আপনার ক্যামেরার নেতৃত্বে চালু বা বন্ধ হয়, তবে অ্যান্ড্রয়েডে ক্যামেরা ফ্ল্যাশলাইট চালু / বন্ধ করার জন্য আপনাকে অবশ্যই আমার উত্তর উইজেটটি উল্লেখ করতে হবে ..

আপডেট 4

আপনি যদি ক্যামেরা এলইডি থেকে উদ্ভূত আলোর তীব্রতা সেট করতে চান তবে আপনি উল্লেখ করতে পারেন আমি কী কোনও অ্যান্ড্রয়েড ডিভাইসের LED তীব্রতা পরিবর্তন করতে পারি?পুরো পোস্ট মনে রাখবেন যে কেবল রুটযুক্ত এইচটিসি ডিভাইসই এই বৈশিষ্ট্যটিকে সমর্থন করে।

** ইস্যু: **

ফ্ল্যাশলাইট চালু / বন্ধ করার সময় কিছু সমস্যাও রয়েছে। যেমন। ডিভাইসগুলির না থাকা FLASH_MODE_TORCHবা এটি থাকা সত্ত্বেও, ফ্ল্যাশলাইট চালু হয় না ইত্যাদি ইত্যাদি

সাধারণত স্যামসাং প্রচুর সমস্যা তৈরি করে।

আপনি নীচের তালিকাতে সমস্যাগুলি উল্লেখ করতে পারেন:

অ্যান্ড্রয়েডে ক্যামেরা ফ্ল্যাশলাইট ব্যবহার করুন

স্যামসাং গ্যালাক্সি এস 2.2.1 এবং গ্যালাক্সি ট্যাবে ক্যামেরা এলইডি / ফ্ল্যাশ লাইট চালু / বন্ধ করুন


2
আপনার সহায়তার জন্য ধন্যবাদ, এটি আমার পক্ষে কাজ করে! - আমি কেবল ইন্টারফেস ফ্ল্যাশলাইট এবং ক্লাস এইচটিসিএলএডফ্ল্যাশলাইটটি অনুলিপি করেছি তবে আমি কেবল সত্য / মিথ্যা এইচটিসিএলএডফ্ল্যাশলাইটের সাথে সেটঅন পদ্ধতি কল করি এবং এটি এটি। --- ইন্টারফেস-টর্চলাইট কোড. google.com/p/quick-settings/source/browse/trunk/… - ক্লাস-এইচটিসিএলএডফ্ল্যাশলাইট কোড. google.com/p/quick-settings/source/browse/trunk/…
সাইকেট

1
@ সাইকেট: স্বাগতম .. আপনার সমস্যাটি যদি সমাধান হয়ে যায় তবে এই উত্তরটিকে সমাধান হিসাবে চিহ্নিত করুন। যাতে এটি অন্যের পক্ষে উপযোগী হতে পারে ..
কার্তিক দোমদিয়া

1
@ পোলামেরেডিরাজা রেডি: আমি মনে করি আপনি স্যামসাং ডিভাইসে পরীক্ষা করছেন। আমি কি সঠিক ?
কার্তিক দোমদিয়া

7
অনুমতিগুলির জন্য, ম্যানিফেস্টের ফাইলটিতে সঠিক কোডটি হ'ল:
uses <Use-પરવાનગી

1
এছাড়াও ব্যবহার করুন: - ক্যামেরা.রিলিজ ();
চেতন

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/references/android/hardware/Camera.html থেকে

উপরের প্রস্তাবিত লাইনগুলি আমার পক্ষে কাজ করছে না।


ক্যামেরা বন্ধ থাকলে আপনাকে সিস্টেমের বৈশিষ্ট্যটি পরীক্ষা করতে হবে না। যদি ক্যাম! = নাল, এটি চালু করা হয়েছিল
গ্রেগ এনিস

1
আমার জন্য সবচেয়ে সহায়ক অংশটি ছিলyou need to declare the variable cam as static
অ্যালেক্স জোলিগ

আমদানি করা Cameraশ্রেণীর AndroidStudio দিকে ক্লাস হওয়ার দিকে মনোযোগ দিন android.hardware...
এএন

32

এপিআই 23 বা উচ্চতর (অ্যান্ড্রয়েড এম, 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 পজিশনে থাকে" বলতে কী বোঝ? কোনটি সামনে আছে এবং কোনটি নেই তা আমি কীভাবে পরীক্ষা করতে পারি? বিটিডাব্লু, ফ্রন্ট ফেসিং ক্যামেরা হ'ল বর্তমান ব্যবহারকারীকে নির্দেশিত। পিছনের মুখের ক্যামেরাটি হ'ল সম্ভবত সর্বদা ফ্ল্যাশ থাকে। এবং ফ্ল্যাশ চালু বা বন্ধ আছে কিনা তা আমি কীভাবে পরীক্ষা করতে পারি?
অ্যান্ড্রয়েড বিকাশকারী

13

আমি নীচে সহজ তিনটি পদক্ষেপ সহ অটোফ্ল্যাশ আলো পেয়েছি।

  • আমি স্রেফ 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();
  • বিল্ড + রান -> এখন ডিমে হালকা অঞ্চল এবং স্ন্যাপ ফটোতে যান, ডিভাইস সমর্থন করে তবে আপনার অটো ফ্ল্যাশ লাইট পাওয়া উচিত।


9

অ্যান্ড্রয়েড ললিপপ ক্যামেরা 2 এপিআই প্রবর্তন করে এবং পূর্ববর্তী ক্যামেরা এপিআইকে অবমূল্যায়ন করে । তবে, ফ্ল্যাশ চালু করতে অবহেলিত এপিআই ব্যবহার করা এখনও কার্যকর এবং নতুন এপিআই ব্যবহার করার চেয়ে অনেক সহজ।

দেখে মনে হচ্ছে যে নতুন এপিআইয়ের উদ্দেশ্য নিবেদিত পূর্ণ বৈশিষ্ট্যযুক্ত ক্যামেরা অ্যাপ্লিকেশানগুলি ব্যবহারের জন্য এবং এটির স্থপতিরা ফ্ল্যাশলাইট চালু করার মতো সহজ ব্যবহারের ক্ষেত্রে সত্যিই বিবেচনা করেনি। এখনই তা করতে, একজনকে ক্যামেরাম্যানেজার পেতে হবে, একটি ডামি সারফেস দিয়ে ক্যাপচারসেশন তৈরি করতে হবে এবং শেষ পর্যন্ত ক্যাপচারআরকেষ্ট তৈরি এবং শুরু করতে হবে। ব্যতিক্রম হ্যান্ডলিং, রিসোর্স ক্লিনআপ এবং দীর্ঘ কলব্যাক অন্তর্ভুক্ত!

কীভাবে ললিপপ এবং আরও নতুনটিতে ফ্ল্যাশলাইটটি চালু করা যায় তা দেখতে , এওএসপি প্রকল্পের ফ্ল্যাশলাইট কন্ট্রোলারটি একবার দেখুন (পরিবর্তিত হওয়া পুরানো ব্যবহারের API হিসাবে সর্বাধিক সন্ধানের চেষ্টা করুন)। প্রয়োজনীয় অনুমতিগুলি সেট করতে ভুলবেন না।


অ্যান্ড্রয়েড মার্শমালো শেষ পর্যন্ত সেটটর্চমোড দিয়ে ফ্ল্যাশ চালু করার একটি সহজ উপায় প্রবর্তন করেছিল


1
পুরাতন android.hardware.Camera API আগের মতো ঠিক কাজ করে চলেছে, তাই আপনার কাছে ফ্ল্যাশলাইটের জন্য android.hardware.camera2 ব্যবহার করার কোনও মৌলিক কারণ নেই। এটা সম্ভব যে আপনি ক্যামেরা 2 দিয়ে বিদ্যুতের খরচ এবং সিপিইউ লোড হ্রাস করতে পারেন, যদিও আপনাকে ফ্ল্যাশলাইট সক্ষম করতে সক্রিয় প্রাকদর্শন রাখতে হবে না।
এডি তালওয়ালা 22'15

আমি দুটি ললিপপ ডিভাইসে একটি সহজ বাস্তবায়ন চেষ্টা করেছি এবং এটি ফ্ল্যাশটি চালু হয়নি, যদিও এটি বেশ কয়েকটি প্রাক-ললিপপ ডিভাইস যা আমি এটি ব্যবহার করেছিলাম সেগুলি নিয়ে কাজ করে। ললিপপে সম্ভবত এটি একটি বাগ যদি পুরানো পদ্ধতিগুলি এখনও আপনার জন্য কাজ করে এবং আপনি যদি জাভা
পিউরিস্ট

ললিপপ সহ আমার বর্তমানে একটি নেক্সাস 5 রয়েছে এবং এটি পুরোপুরি কার্যকর হয়। আমার নিজের দ্বারা তৈরি একটি অ্যাপ্লিকেশনও রয়েছে যা আমি কাজ করি এবং এই পদ্ধতিগুলির সাথে প্রয়োগ করা হয়। যদি কেউ এটি চেষ্টা করতে চায়। আমি স্টোর খেলতে একটি লিঙ্ক রেখেছি: play.google.com/store/apps/details?id=com.fadad.linterna গুরুত্বপূর্ণ জিনিসটি বেশিরভাগ ক্ষেত্রেই নিশ্চিত করা যায় যে ফ্ল্যাশ এবং অনুমতিগুলি চালানোর আগে ক্যামেরা সক্রিয় বা অক্ষম রয়েছে।
ফেরদিয়াদো

দুঃখিত আমার ভুল. আমি পুরানো এপিআই দিয়ে ফ্ল্যাশ চালু করার চেষ্টা করার সময় অন্য একটি অ্যাপ্লিকেশন সম্ভবত ক্যামেরাটি ব্যবহার করছিল। আমি উত্তর আপডেট করেছি।
লুকাচিকো

7

অ্যান্ড্রয়েড ফ্ল্যাশলাইট অ্যাপের জন্য সম্পূর্ণ কোড

স্পষ্ট

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

এক্সএমএল

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

  }

আপনার উদাহরণ শুরু করার আগে যদি ফ্ল্যাশ ইতিমধ্যে চালু থাকে, তবে ফ্ল্যাশ বন্ধ করার চেষ্টা করা কার্যকর হবে না ... আপনার কি এই সমস্যার সমাধান আছে?
তাইফুন

7

বিভিন্ন অ্যান্ড্রয়েড সংস্করণে ক্যামেরা ফ্ল্যাশ অ্যাক্সেস করার বিভিন্ন উপায় রয়েছে। কয়েকটি API গুলি ললিপপে কাজ করা বন্ধ করে দিয়েছিল এবং এরপরে এটি আবার মার্শমেলোতে পরিবর্তিত হয়। এ থেকে উত্তরণের জন্য, আমি একটি সাধারণ লাইব্রেরি তৈরি করেছি যা আমি আমার কয়েকটি প্রকল্পে ব্যবহার করছি এবং এটি ভাল ফলাফল দিচ্ছে। এটি এখনও অসম্পূর্ণ, তবে আপনি কোডটি যাচাই করতে এবং হারিয়ে যাওয়া টুকরোটি খুঁজে পেতে চেষ্টা করতে পারেন। এখানে লিঙ্কটি রয়েছে - NoobCameraFlash

আপনি যদি কেবল আপনার কোডে সংহত করতে চান তবে আপনি তার জন্য গ্রেড ব্যবহার করতে পারেন। এখানে নির্দেশাবলী (সরাসরি রেডমি থেকে নেওয়া) -

পদক্ষেপ 1. আপনার বিল্ড ফাইলে জিটপ্যাক সংগ্রহস্থল যুক্ত করুন। সংগ্রহস্থলের শেষে এটি আপনার মূল রচনাতে যুক্ত করুন:

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

পদক্ষেপ 2. নির্ভরতা যুক্ত করুন

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

ব্যবহার

সিঙ্গলটনের সূচনা করুন NoobCameraManager

NoobCameraManager.getInstance().init(this);

আপনি ডিবাগ লগিংয়ের জন্য optionচ্ছিকভাবে লগ স্তর সেট করতে পারেন। লগিং লম্বার জ্যাক লাইব্রেরি ব্যবহার করে । ডিফল্ট লোগলভেল হ'লLogLevel.None

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

এর পরে ক্যামেরা ফ্ল্যাশ চালু বা বন্ধ করতে আপনাকে কেবল সিঙ্গলটনকে কল করতে হবে।

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

NoobCameraManager শুরু করার আগে নিজেকে ক্যামেরা অ্যাক্সেস করার জন্য রানটাইম অনুমতিগুলির যত্ন নিতে হবে। ০.০.২ বা তার আগের সংস্করণে আমরা সরাসরি লাইব্রেরি থেকে অনুমতিগুলির জন্য সহায়তা সরবরাহ করতাম তবে ক্রিয়াকলাপের অবজেক্টের উপর নির্ভরতার কারণে আমাদের এটি সরিয়ে ফেলতে হবে।

এটি ফ্ল্যাশও টগল করা সহজ

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

ক্রিয়াকলাপের পরিবর্তে প্রসঙ্গটি ব্যবহারের জন্য দয়া করে সমর্থন যোগ করুন। ধন্যবাদ!
বজির লাসন্ত

@ বাজিরালসন্তা অনুমতি গ্রহণের জন্য ক্রিয়াকলাপের বিষয়টি প্রয়োজনীয়। আমি অনুমতিগুলি কোনওভাবে পৃথক করে প্রয়োজনীয়তাটি পুরোপুরি সরিয়ে নেওয়ার পরিকল্পনা করছিলাম। এটি এখানে ট্র্যাক করা হয়েছে - github.com/Abhi347/NoobCameraFlash/issues/3 মধ্য সময়ে, আপনি চাইলে প্রয়োজনীয়তা সরাতে কোডটি পরিবর্তন করতে পারেন। এটিতে কাজ করার জন্য আমার কিছুটা সময় লাগতে পারে।
noob

হ্যাঁ আমি এটা দেখেছি। আমি অনুমতি স্টাফ সরিয়ে কনটেক্সট এর সাথে কাজ করার জন্য আপনার ইচ্ছামতো ইতিমধ্যে পরিবর্তন করেছি। কারণ আমার অ্যাপ্লিকেশনটি ইতিমধ্যে অনুমতি বৈধতা করে। আপনি প্রসঙ্গকে সমর্থন করে এমন একটি যথাযথ বাস্তবায়ন প্রকাশ করার সময় দয়া করে আমাকে জানান। ধন্যবাদ!
বজির লাসন্ত

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.
প্রতীক বুটানী

ডিভাইসে একাধিক ফ্ল্যাশ থাকলে কী হবে? কারও কারও সামনে সামনের ক্যামেরা রয়েছে ...
অ্যান্ড্রয়েড বিকাশকারী

0

সারফেসভিউ ব্যবহার করে টুকরো টুকরো করে আমি আমার অ্যাপ্লিকেশনটিতে এই ফাংশনটি প্রয়োগ করেছি। এই স্ট্যাকওভারফ্লো প্রশ্নের এবং এর উত্তরটির লিঙ্কটি এখানে পাওয়া যাবে

আশাকরি এটা সাহায্য করবে :)


0

মার্শমেলো এবং তারপরে, ক্যামেরাম্যানেজারের `সেটটর্চমোড () 'এর উত্তর বলে মনে হচ্ছে। এটি আমার পক্ষে কাজ করে:

 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.