Merhaba bu derste 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!

Kodları indirmek veya kaynağa ulaşmak için:
  

1. Eclipse te yeni bir proje oluşturun. 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ı:
   


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 dersin daha sonuna geldik bütün Androidce ziyaretçilerine yararlı olması dileğiyle kolay gelsin :)

Not: Bu yazı Android Evreni kurucusu ve yazarı Mustafa DEMİR tarafından yazılmıştır.

Androidce'yi yeni dersler için takip etmeye devam edin!   

0 yorum:

Yorum Gönder

 
Top