آموزش ساخت چراغ قوه در آندروید , Android Flashlight

سوال : در مثالی ساده توضیح دهید که چطور میشه در یک اکتیویتی چراغ قوه ای ساده ای طراحی کرد که کدهاش استاندارد باشه و حجم کمی داشته باشه تا بنده سر درگم نشم .

پاسخ : با توجه به درخواست کاربر عزیز میریم سراغ آموزش تا با هم یک چراغ قوه ساده و سبک رو با هم طراحی کنیم :

فایل main.xml :

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/bg_off"
    tools:context="co.tooba.flashlight.Main" >

        <Button
	        android:id="@+id/btnOn"
	        style="?android:attr/buttonStyleSmall"
	        android:layout_width="wrap_content"
	        android:layout_height="wrap_content"
	        android:layout_alignParentBottom="true"
	        android:layout_alignParentLeft="true"
	        android:layout_marginBottom="15dp"
	        android:layout_marginLeft="15dp"
	        android:width="80dp"
	        android:onClick="flashLightOn"
	        android:text="روشن" />
        
       <Button
	        android:id="@+id/btnOff"
	        style="?android:attr/buttonStyleSmall"
	        android:layout_width="wrap_content"
	        android:layout_height="wrap_content"
	        android:layout_alignParentBottom="true"
	        android:layout_alignParentLeft="true"
	        android:layout_marginBottom="15dp"
	        android:layout_marginLeft="15dp"
	        android:width="80dp"
	        android:onClick="flashLightOff"
	        android:text="خاموش" />  

</RelativeLayout>

فایل Main.java :

package co.tooba.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.Button;
import android.widget.RelativeLayout;
import android.widget.Toast;

public class Main extends  Activity {

	public static Camera cam = null;
	private static long back_pressed;
	private Button btnOn , btnOff;
	RelativeLayout layout;
	
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		
	    btnOn = (Button)findViewById(R.id.btnOn);
	    btnOff = (Button)findViewById(R.id.btnOff);
	    btnOff.setVisibility(View.INVISIBLE);
	    layout =(RelativeLayout) findViewById(R.id.main);

	}


	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();
	            
	            btnOn.setVisibility(View.INVISIBLE);
	            btnOff.setVisibility(View.VISIBLE);
	            layout.setBackgroundDrawable(getResources().getDrawable(R.drawable.bg_on));

	        }
	    } catch (Exception e) {
	        e.printStackTrace();
	        Toast.makeText(getBaseContext(), "گوشی شما این قابلیت را پشتیبانی نمی کند", Toast.LENGTH_SHORT).show();
	    }
	}

	public void flashLightOff(View view) {
	    try {
	        if (getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH)) {
	            cam.stopPreview();
	            cam.release();
	            cam = null;
	            
	            btnOff.setVisibility(View.INVISIBLE);
	            btnOn.setVisibility(View.VISIBLE);
	            layout.setBackgroundDrawable(getResources().getDrawable(R.drawable.bg_off));
	            
	        }
	    } catch (Exception e) {
	        e.printStackTrace();
	        Toast.makeText(getBaseContext(), "گوشی شما این قابلیت را پشتیبانی نمی کند", Toast.LENGTH_SHORT).show();
	    }
	}

	public void onBackPressed(){
		if (back_pressed + 2000 > System.currentTimeMillis()){
			super.onBackPressed();
		}
		else{
			Toast.makeText(getBaseContext(), "جهت خروج دوباره کلیک کنید.", Toast.LENGTH_SHORT).show();
			back_pressed = System.currentTimeMillis();
		}
	}
}

فانکشن flashLightOn برای روشن کردن فلش دوربین دیوایس می باشد . در صورتی که گوشی مورد نظر این قابلیت را نداشته باشد ،پیامی نمایش داده میشود .
فانکشن flashLightOff برای خاموش کردن فلش دوربین می باشد .
در هر setBackgroundDrawable جهت تغییر عکس پس زمینه اکتیویتی استفاده شده است .
دستور setVisibility(View.VISIBLE) برای مخفی کردن Button و دستور setVisibility(View.INVISIBLE) برای نمایان کردن Button می باشد .

کدهای به کار برده خیلی ساده و قابل فهم می باشند . در صورت وجود مشکل میتوانید سوالات خودتان را کامنت کنید .

 

  1. mohammadreza - 30 ژوئن 2018

    ببخشید سلام bg_onوbg_offرا چطور بنویسم
    مرسی اگه کمک کنید

  2. مجتبی - 12 دسامبر 2018

    سلام خسته نباشید . من یک مشکلی دارم اینکه متد Camera از هارد پشتیبانی نمیکنه (یک خط مشکی میزنه وسط کد ) و متد Parameters هم همینطوریه مشکل کجا است؟ کمکم کنید مرسی.


همینک دیدگاه خود را برای ما بنویسید!