#10 – Android Flashlight Uygulaması


Merhaba bu yazımda Android Flashlight Uygulaması yapımı detaylı olarak anlatılmıştır.

Flaslight uygulamasının en önemli gereksinimlerinden biri uygulamanın hızlı çalışmasıdır. Bunun için de arayüzü basit tutmak gerekir. Bir defasında arayüzü biraz komplex olan flashlight uygulaması yapmıştım ve o uygulama çok küçük bir gecikme ile flashı açabiliyordu. Tabi bu hız ve gecikme telefondan telefona büyük farklar gösterebilir. Benim o uygulamayı test ettiğim telefon Samsung S3 Mini idi. Neyse bugün yapacağımız uygulama Samsung S3 te test edilmiş olup ve son derece hızlı çalışmaktadır. Evet şimdi başlayalım!

[wpdm_file id=7]

1. Eclipse te yeni bir proje oluşturun ilk yazımda anlatmıştım tekrar bakmak isterseniz. Projenin ismine ben MyFlash dedim siz de ne isterseniz isim olarak kullanabilirsiniz :).

2. Her zaman ki gibi önce uygulamamızın arayüzünü oluşturalım. /res/layout klasörü altındaki activity_main.xml dosyamızı açıyoruz. Eğerki grafik arayüz aktifse sol alttan .xml tabına tıklayıp kodları görüyoruz. Buraya aşağıda verdiğim kodları ekleyin, kodların açıklamalarını yine aşağıdan okuyabilirsiniz. Yaptığım açıklamalara, neyi neden kullandığımıza dikkat edin. Buyrun kodlar :)

<LinearLayout 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:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity"
    android:background="#0470d9" 
    android:orientation="vertical" >  

<!--   android:layout_width="match_parent"    ekranın tüm genişliğini kullanmak için -->
<!--    android:layout_height="match_parent"    ekranın tüm yüksekliğini kullanmak için  -->
<!--   android:background="#0470d9"  arka plan rengi -->
<!--   android:orientation="vertical" >  nesnelerin yerleşimini dikey olarak ayarlıyoruz -->
    <Button
        android:id="@+id/opbutton"  
        android:layout_width="fill_parent"  
        android:layout_height="wrap_content"
        android:background="#ddd" 
        android:gravity="center"
        android:layout_gravity="center"
        android:text="Flashı Aç" />

<!--      android:id="@+id/opbutton"      buton idsi yani kimliği ya da ismi gibi düşünebilirsiniz -->
<!--    android:layout_width="fill_parent"  ekranın bütün genişliğini kullanmak için -->
<!--       android:layout_height="wrap_content" ekranın buton yazısı için gereken yüksekliğini kullanmak için -->
<!--  android:background="#ddd" buton arka plan rengi -->
<!--       android:text="Flashı Aç" />  buton yazısı -->
    <Button
        android:id="@+id/clbutton"

        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="#ddd"
             android:layout_marginTop="10dp"

        android:text="Flashı Kapat" />

    <Button
        android:id="@+id/btnexit"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="#ddd"
             android:layout_marginTop="200dp"
        android:text="Çıkış" />
    <!--    android:layout_marginTop="200dp"  butonun bir üstteki nesneden uzaklığını ayarlıyoruz -->

</LinearLayout>

3. /src klasörü altındaki paket dosyamızın altından MainActivity.java dosyamızı açıp aşağıda verdiğim kodları girin. Açıklamalar kodların için de verilmiştir.

package com.eeecoder.myflash;    // bir diğer nickim eeecoder :) 

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.pm.PackageManager;
import android.hardware.Camera;
import android.hardware.Camera.Parameters;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity {
	Camera camera;   // Kamera nesnesi oluşturuyoruz.
	Parameters parameters;  // kamera parametreleri için gerekli olan parametre değişkenini ve nesnesini bildiriyoruz. (declare etmek)
	@SuppressWarnings("deprecation")
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);   // uygulamamızın arayüzü dosyasını layout klasörü altındaki activity_main dosyası olacak şekilde ayarlıyoruz.

	Button opbuton = (Button) findViewById(R.id.opbutton);  // kullandığımız üç butona java dosyasından buton nesneleri yaratıp ulaşıyoruz.
	Button clbutton = (Button) findViewById(R.id.clbutton);
	Button btnexit = (Button) findViewById(R.id.btnexit);

	camera = Camera.open();  // burada kameramızı açıyoruz yani kameraya bağlanıyoruz. 
	parameters = camera.getParameters(); // kamera parametrelerini alıyoruz.
	camera.startPreview(); // kamera nın parametrelere göre iş yapmasını burada sağlıyoruz.
	Boolean VarFlash;   //  VarFlash değişkenimizi bildiriyoruz.

	/*
	 * First check if device is supporting flashlight or not
	 */
	VarFlash = getApplicationContext().getPackageManager()    
	        .hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH);  // Kameramız flash a sahip mi? Onun bilgisini VarFlash değişkenine atıyoruz.

	if (!VarFlash) {
	    // cihazın flashı yok!
	    // bir alarm mesajı gösterip uygulamayı kapatıyoruz.
	    AlertDialog alert = new AlertDialog.Builder(MainActivity.this)
	            .create();
	    alert.setTitle("Hata");
	    alert.setMessage("Cihazınız Flashı desteklemiyor!");
	    alert.setButton("Tamam", new DialogInterface.OnClickListener() {
	        public void onClick(DialogInterface dialog, int which) {
	            // uygulamayı kapatıyoruz
	            finish();
	        }
	    });
	    alert.show();   // alarm mesajını gösteriyoruz
	    return;
	}

	opbuton.setOnClickListener(new OnClickListener() {

		public void onClick(View arg0) {
			// opbuton a dokunulduğunda kameranın parametrelerini flashı açacak şekilde ayarlayıp kameraya yolluyoruz.

			parameters.setFlashMode(Parameters.FLASH_MODE_TORCH);
		     camera.setParameters(parameters);
		     }		
	});

	clbutton.setOnClickListener(new OnClickListener() {

		public void onClick(View arg0) {

			// opbuton a dokunulduğunda kameranın parametrelerini flashı kapatacak şekilde ayarlayıp kameraya yolluyoruz.

			parameters.setFlashMode(Parameters.FLASH_MODE_OFF);
		     camera.setParameters(parameters);
		     }

	});

	btnexit.setOnClickListener(new OnClickListener() {

		@Override
		public void onClick(View v) {

		// Çıkış butonuna dokunulduğunda uygulamayı kapatıyoruz.

			System.exit(0);

		}
	});

	}

	@Override
	protected void onDestroy() {
		super.onDestroy();
	}

	@Override
	protected void onRestart() {
		super.onRestart();
	}

	@Override
	protected void onStop() {
		super.onStop();

		// durma durumunda(mesela kullanıcı telefonunda geri butonuna basarsa) kamerayı serbest bırakıyoruz. Başka bir uygulama kullanmak isterse problem çıkmaması için.
		if (camera != null) {
			camera.release();
			camera = null;
		}
	}
}

4.  AndroidManifest e kamera izni için aşağıdaki kodları ekliyoruz.

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

5. Uygulamamıza sağ tıklayıp Run As –> Android Application diyerek test ediyoruz. :)

Emulatör Çıktısı: 

android_flash_uygulaması

Gördüğünüz gibi Emulatör de beklediğimiz sonuç uygulamanın ‘Cihazınız Flashı desteklemiyor! ‘ hatası vermesi. Uygulama Samsung S3 Mini telefonu ile test edilmiştir gayet güzel çalışmaktadır. Bir yazının daha sonuna geldik bütün Android Evreni ziyaretçilerine yararlı olmasını umarım. Kolay gelsin. :)

Bir önceki Android Layouts: Table Layout isimli yazımda Table Layout detaylıca, kodlar ve örneklerle anlatılmıştır.

Android Evreni‘ni yeni dersler için takip etmeye devam edin!

Şunlar da ilginizi çekebilir

14 yorum

  • mustafa
    20 Kasım 2013 at 18:38

    selam yaptım tüm kodları programa girince telefonun kamerası açılıyor ve aç diyorum flash ı programı kapatıyor telefon ?

    • Admin
      21 Kasım 2013 at 07:26

      Merhaba Mustafa Bey, bir yerde bir hata yapmışsınızdır büyük ihtimal. Yazdığınız kodları ve eclipse in verdiği hataları görmeden buna cevap veremem. Lütfen kodları ve adımları tekrar kontrol edin. Yazdığım kodları denemeden kesinlikle derse eklemiyorum. Yine düzgün çalışmazsa kaynak kodları indirip hatanız var mı karşılaştırın. Projenin kaynak dosyasını indirdikten sonra Eclipse e import edip düzgünce çalıştığını da görebilirsiniz.

  • mali
    27 Haziran 2014 at 20:35

    benı gıbı bır acemının cok ısıne yaradı bazı ozellıkler de eklenınce super uygulama oluyor cok tesekkur ederım

    • MUSTAFA DEMİR
      28 Haziran 2014 at 01:30

      merhaba,
      teşekkür ederiz. Yazımızı beğendi iseniz sosyal paylaşım platformlarında paylaşmanızın bize çok yararı olacaktır.

      İyi Çalışmalar

  • CcCrrr
    22 Ağustos 2014 at 15:37

    Bu programın algoritmasını paylaşabilirmisiniz

  • darksoft
    27 Ağustos 2014 at 13:41

    hocam iyi günler emeğinize sağlık ama kodlarda hata var “myflash beklenmedik bir biçimde durdu” diyor ben kontrol ettim kodları bir hata göremedim console da bi hata göstermedi bir de siz kontrol edermisiniz

  • royal
    23 Aralık 2014 at 15:36

    flahlight uygulamasına mors alfabesine göre işigin yanıb kapanması nasıl olur

    • MUSTAFA DEMİR
      8 Ocak 2015 at 19:42

      merhaba, basitçe şöyle düşünün:

      – 1. Mors alfabesine göre ışığı açıp kapatmanız gerek ancak burada önemli olan ne kadar süreyle.
      – 2 Farklı durumlar için süreleri belirleyip, ışığı açtırdıktan sonra süreye göre kapatacağınız zamanı tespit edip ışığı kapattırın.
      Sonuç olarak uygulamanız çalışırken bir timer/zamanlayıcıya da ihtiyacınız olacak Mors alfabesi için.

      İyi Çalışmalar.

  • Erol
    8 Ocak 2015 at 21:16

    Hocam bende bu hatayı veriyor. Neden olabilir?
    MyFlashresvalues-v11styles.xml:7: error: Error retrieving parent for item: No resource found that matches the given name ‘android:Theme.Holo.Light’.
    styles.xml:8: error: Error retrieving parent for item: No resource found that matches the given name ‘android:Theme.Holo.Light.DarkActionBar’.
    styles.xml:7: error: Error retrieving parent for item: No resource found that matches the given name ‘android:Theme.Holo.Light’.
    styles.xml:8: error: Error retrieving parent for item: No resource found that matches the given name ‘android:Theme.Holo.Light.DarkActionBar’.

    • MUSTAFA DEMİR
      9 Ocak 2015 at 19:19

      merhaba Erol bey,

      Eclipse e proje import edilirken bazen bu tarz problemler çıkabiliyor. Hata olan styles.xml dosyalarının hatalı kısmının başına “@” sembolü ekleyip dosyayı kaydediniz bu şekilde hatanın giderilmiş olması gerekir. Yani şöyle aşağıdaki örnekteki gibi “@” sembolü ekleyiniz:

      “@android:Theme.Holo.Light”

      İyi Çalışmalar.

  • Hüseyincan Şahin
    21 Şubat 2015 at 17:43

    Çok güzel anlatmışsınız ilk denememde oldu , teşekkürler.

  • Can
    25 Haziran 2015 at 12:03

    Biz Bunu nasıl tek butona indiririz ve tıkladık off tu on a döndü on dan off a gibi

Can için bir cevap yazın Cevabı iptal et