ساخت چراغ قوه چشمک زن در اندروید استودیو + ویدیویی
در این آموزش، خواهیم یاد گرفت که چگونه در اندروید استودیو یک اپلیکیشن چراغ قوه چشمک زن بسازیم.
در بعضی آموزش ها از طریق Camera Api، برای ساخت اپلیکیشن چراغ قوه استفاده شده است که از 25 api به بعد اندروید منسوخ شده است.
در این آموزش از Camera api 2 استفاده خواهیم کرد برای اندروید 6 به بعد مناسب خواهد بود.
ایجاد لایه xml برای ساخت چراغ قوه چشمک زن
برای شروع یک تصویر ایجاد می کنیم در لایه xml ایجاد می کنیم و یک آیدی برای آن انتخاب می کنیم، تا بتوانیم رویداد کلیک برای آن تعیین کنیم.
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <ImageView android:id="@+id/sos_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:src="@drawable/btn_switch_off"/> </RelativeLayout>
به روز رسانی فایل مانیفست اندروید
سپس، دسترسی CAMERA را در فایل مانیفست پروژه خودمان اضافه می کنیم و همچنین در آن تعریف می کنیم که از دوربین در برنامه خود استفاده می کنیم:
<uses-permission android:name="android.permission.CAMERA" /> <uses-feature android:name="android.hardware.camera" />
به روز رسانی فایل Gradle Build
برای اینکه بتوانیم از ای پی ای camera 2 استفاده کنیم باید در گردل حداقل نسخه android sdk را روی 23 تنظیم کنیم.
minSdkVersion 23 targetSdkVersion 28
کد های جاوا ساخت چراغ قوه چشمک زن اندروید
اکنون وقت آن فرا رسیده است تا به سراغ نوشتن کد های جاوا در اکتیویتی اصلی برنامه خود برویم.
ابتدا یک متغیر استاتیک به نام CAMERA_REQUEST برای درخواست اجازه دسترسی به دوربین ایجاد می کنیم.
سپس یک متغیر از نوع بولین تعریف می کنیم، برای اعلام وضعیت روشن و خاموش فلش ایجاد میکنیم.
ما برای خاموش و روشن شدن مداوم چراغ قوه چشمک زن اندروید ازحلقه while استفاده میکنیم.
و یک بولین به نام stop ایجاد میکنیم تا هنگامی که شرط حلقه پابرجاست چشمک زدن فلش ادامه داشته باشد.
سپس در قسمت onCreate برای تصویر یک متد setOnClickListener ایجاد میکنیم و در آن ابتدا بررسی میکنیم که آیا دستگاه دوربین دارد یا خیر.
در مرحله بعد بررسی می کنیم که آیا دسترسی به دوربین توسط کاربر به اپلیکیشن داده شده است یا خیر.
اگر اپلیکیشن به دوربین دسترسی نداشت، مجوز دوربین را با شناسه دوربین در یک پارامتر درخواست می کنیم.
buttonEnable.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { ActivityCompat.requestPermissions(MainActivity.this, new String[] {Manifest.permission.CAMERA}, CAMERA_REQUEST); } });
ما یک متدOnClickListener را برای ImageView تنظیم کردیم .
هنگامی که کاربر روی تصویر کلیک می کند، ابتدا بررسی می کنیم که آیا دستگاه دارای فلاش دوربین است یا خیر.
اگر نه، پیامی برای هشدار به کاربر نمایش می دهیم.
در غیر این صورت در صورت نیاز با فراخوانی روش flashLightOff چراغ چشمک زن را خاموش می کنیم.
و در صورت نیاز با فراخوانی متد flashLightOn چراغ چشمک زن را روشن می کنیم.
imageFlashlight.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (hasCameraFlash) { if (flashLightStatus) flashLightOff(); }else{ flashLightOn(); } else { Toast.makeText(MainActivity.this, "No flash available on your device",Toast.LENGTH_SHORT).show(); } } });
حالا متد flashLightOn را می نویسیم .
ابتدا مقدار بولین اعلام وضعیت را روی true ست می کنیم.
و سپس یک رانیبل تعریف میکنیم و آن را در یک ترد جداگانه اجرا می کنیم.
زیرا هنگامی که از حلقه برای چشمک زدن دوربین در ترد اصلی برنامه استفاده می کنیم، برنامه فورس استاپ می دهد.
سپس در رانیبل، با ایجاد یک متغیر به نام cameramanger برای مدیریت دوربین و سپس با فراخوانی پارامتر cameraId دوربین مد نظرمان را انتخاب می کنیم.
معمولا دوربین جلوی گوشی در موقعیت 0 قرار دارد.
سپس setTorchMode را روی true قرار می دهیم.
و بعد بعد با استفاده از sleep یک وقفه در اجرا ترد مان ایجاد میکنیم و setTorchMode را روی false قرار می دهیم.
و دوباره با دستور sleep یک وقفه دیگر در اجرا برنامه ایجاد میکنیم.
سپس با دستور start اجرا ترد فرعی را آغاز می کنیم.
این دستورات درحلقه while تا زمانی که مقدار بولین stop را روی true قرار ندهیم ادامه خواهد داشت.
private void flashLightOn() { state = true; Runnable F = new Runnable() { @Override public void run() { CameraManager cameraManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE); try { while (!stop) { String cameraId = cameraManager.getCameraIdList()[0]; cameraManager.setTorchMode(cameraId, true); Thread.sleep(200); cameraManager.setTorchMode(cameraId, false); Thread.sleep(300); } } catch (Throwable t) { } } }; Thread T = new Thread(F); T.start(); return;}
در متد flashLightOff مقدار بولین stop را روی true قرار می دهیم.
سپس مقدار بولین state یا اعلام وضعیت فلش را روی FALSE تنظیم می کنیم و چراغ قوه را با دستور setTorchmode خاموش می کنیم.
private void flashLightOff() { state = false; stop=true; CameraManager cameraManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE); try { String cameraId = cameraManager.getCameraIdList()[0]; cameraManager.setTorchMode(cameraId, false); } } catch (Throwable t) { }
این کد MainActivity اپلیکیشن چراغ قوه چشمک زن ماست.
package com.example.sos; import androidx.appcompat.app.AppCompatActivity; import android.hardware.camera2.CameraManager; import android.os.Bundle; import android.view.View; import android.widget.ImageView; import android.widget.Toast; public class MainActivity extends AppCompatActivity { CameraManager cameraManager =(CameraManager) getSystemService(CAMERA_SERVICE); boolean stop=false; boolean state = false; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ImageView btn =findViewById(R.id.sos_btn); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (!state){ btn.setImageResource(R.drawable.on); state =true; Toast.makeText(MainActivity.this,"SOS mode is active",Toast.LENGTH_SHORT).show(); Runnable s = new Runnable() { @Override public void run() { try { while (!stop){ cameraManager.setTorchMode("0",true); Thread.sleep(250); cameraManager.setTorchMode("0",false); Thread.sleep(250); } }catch (Throwable t){ } } }; Thread T =new Thread(s); T.start(); return; } if (state){ stop=true; state=false; } } }); } }
اگر در ساخت چراغ قوه چشمک زن اندروید مشکلی داشتید، در کامنت ها با ما آن را در میان بگذارید تا سریع ترین زمان راهنمایی تان کنیم.
درباره محمد حسین هاشمی
محمد حسین هاشمی هستم، دانشجوی رشته حسابداری ، طراح وب و برنامه نویس اندروید که از سال 96 شروع به یادگیری در زمینه های مختلف رایانه کرده ام و قصد دارم اطلاعاتی را که طی این چند سال کسب کرده ام را با شما به اشتراک بگذارم!
سایر نوشته های محمد حسین هاشمی
دیدگاهتان را بنویسید