Android – QRCodeReader (Zxing)

Merhaba arkadaşlar bu yazımızda Zxing kütüphanesi kullanılarak basit bir QR Kod okuyucusu yapacağız.

asdasd

Ekran görüntüsü yukarıda ki gibi olacak. Kodlara geçmeden, build.gradle dosyasına bir kaç ekleme yapmamız gerecek. Dependencies kısmına

compile 'com.journeyapps:zxing-android-embedded:3.2.0@aar'
compile 'com.google.zxing:core:3.2.1'

şeklinde gerekli kütüphaneyi ekliyoruz.

Daha sonra manifests dosyasına izinimizi ekliyoruz;

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

Şimdi kodlara geçersek;

private Button button;
private TextView text_qr_code_sonuc,txt_sonuc,txt_code_kind,txt_qr_code_kind_result;

ilk kısımda tasarımda eklediklerimizi kodda tanımlıyoruz. Daha sonra ;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    final Activity activity = this;
    button = (Button) findViewById(R.id.button);
    txt_sonuc = (TextView) findViewById(R.id.txt_sonuc);
    text_qr_code_sonuc = (TextView) findViewById(R.id.qr_code_sonucu);
    txt_code_kind = (TextView) findViewById(R.id.txt_code_kind);
    txt_qr_code_kind_result = (TextView) findViewById(R.id.txt_qr_code_kind_result);
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            //Bu activity içinde çalıştırıyoruz.
            IntentIntegrator integrator = new IntentIntegrator(activity);
            //Kütüphanede bir kaç kod tipi var biz hepsini tarayacak şekilde çalıştırdık.
            //integrator.setDesiredBarcodeFormats(IntentIntegrator.QR_CODE_TYPES);
            //şeklindede sadece qr code taratabilirsiniz.
            integrator.setDesiredBarcodeFormats(IntentIntegrator.ALL_CODE_TYPES);
            //Kamera açıldığında aşağıda yazı gösterecek
            integrator.setPrompt("Scan");
            //telefonun kendi kamerasını kullandırıcaz
            integrator.setCameraId(0);
            //okuduğunda 'beep' sesi çıkarır
            integrator.setBeepEnabled(true);
            //okunan barkodun image dosyasını kaydediyor
            integrator.setBarcodeImageEnabled(false);
            //scan başlatılıyor
            integrator.initiateScan();
        }
    });
}

Bu kısıma kadar yaptıklarımız bize kamerayı açtırıp kodu taratmamıza yarayacak fakat dönen cevabı değerlendirmemiz gerekli. Bunun içinde onCreate metodunun bitimine aşağıdaki kısmı yazıyoruz;

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    //Kütüphane okuduktan sonra bu metodla bize result döndürüyor.
    IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
    if(result != null) {
        if(result.getContents() == null) {
            text_qr_code_sonuc.setText("Kod Sonucu:");
            txt_sonuc.setText("Qr Code Bulunamadı.");
            txt_code_kind.setText("Kod Türü:");
            txt_qr_code_kind_result.setText("Bulunamadı.");
        } else {
            Log.d("MainActivity", "Scanned");
            text_qr_code_sonuc.setText("Kod Sonucu:");
            txt_sonuc.setText(result.getContents());
            txt_code_kind.setText("Kod Türü:");
            txt_qr_code_kind_result.setText(result.getFormatName());
        }
    }
}

 

Sonucu değerlendirmek size kalmış. Ben basit şekilde yapılacakları göstermeye çalıştım. Umarım beğenirsiniz. Uygulamayı buradan indirebilirsiniz.

 

Android – Döviz Kurları (JSON)

Merhaba arkadaşlar bu yazıda daha önce JavaFx kullanarak yaptığımız projenin android versiyonunu yapacağız. O yazıya da buradan ulaşabilirsiniz.

Basitçe göstermek gerekirse uygulamamız son halinde aşağıdaki şekilde olacak;

 

Şimdi ilk olarak manifest dosyasından başlamak istiyorum;

3

Yukarıda gördüğünüz gibi manifest dosyasına internete erişebilmek için izin ekliyoruz.

Daha sonra bu uygulama iki ekranda çalışacağı için ikinci activity’yi yaratmamız gerekli.

4

Yukarıda gösterdiğim şekilde ismi vs. tamamen size kalmış şekilde yaratabilirsiniz.
Bu işlemi yaptığınızda manifest dosyası yukarıdaki gibi olur.

Koda geçmeden önce her zamanki gibi oluşturacağımız sınıfın kodlarını yazmak istiyorum. Bir önceki yazıda JSON’ın yapısını anlatmıştım. Bu yüzden burada bunun detayına girmeyeceğim. Bizim JSON’ımız da currency_name, selling_buying gibi parametreler var ve bizde bunları tutabilmek için bir sınıf oluşturmamız gerekli aşağıdaki gibi;

public class DovizCom {
    public double selling;
    public double buying;
    public double change_rate;
    public String name;
    public String fullName;
    public String code;
    public int curr;

    public double getSelling() {
        return selling;
    }

    public void setSelling(double selling) {
        this.selling = selling;
    }

    public double getBuying() {
        return buying;
    }

    public void setBuying(double buying) {
        this.buying = buying;
    }

    public double getChange_rate() {
        return change_rate;
    }

    public void setChange_rate(double change_rate) {
        this.change_rate = change_rate;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getFullName() {
        return fullName;
    }

    public void setFullName(String fullName) {
        this.fullName = fullName;
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public int getCurr() {
        return curr;
    }

    public void setCurr(int curr) {
        this.curr = curr;
    }
}

Bu class’ı oluşturdak sonra asıl koda geçebiliriz.

//heryerden erişebilmek için en yukarıda tanımladık
    ListView listCurrency;
    String[] currList;
    DovizCom[] currArray = new DovizCom[68];
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        listCurrency = (ListView) findViewById(R.id.listCurrency);
        //class çağırılıyor
        JsonParsing jsonParsing = new JsonParsing();

        jsonParsing.execute();
        //listView'a tıklandığında çalışacak method
        listCurrency.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView adapterView, View view, int position, long id) {
                Intent myIntent = new Intent(MainActivity.this, CurrencyInfo.class);
                myIntent.putExtra("code", currArray[position].code);
                myIntent.putExtra("buying", currArray[position].buying);
                myIntent.putExtra("change_rate", currArray[position].change_rate);
                myIntent.putExtra("curr", currArray[position].curr);
                myIntent.putExtra("selling", currArray[position].selling);
                myIntent.putExtra("full_name", currArray[position].fullName);
                MainActivity.this.startActivity(myIntent);
            }
        });
    }

Yukarıda ki kod ilk çalışacak koddur. Tavsiyem burayı sadece

jsonParsing.execute()

kısmına kadar incelemenizdir. Buradan sonra aşağıdaki kod satırları çalışmaya başlayacak.

//androidde json ile veri çekebilmek için en iyi yöntem AsyncTask
    protected class JsonParsing extends AsyncTask{
        String result = "";
        @Override
        protected Void doInBackground(Void... voids) {
            try {
                //URL olarak api adresi verilir
                URL doviz_url = new URL("https://www.doviz.com/api/v1/currencies/all/latest");
                BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(doviz_url.openStream()));
                String line = "";
                //her bir satır teker teker kaydedilir
                while((line=bufferedReader.readLine()) != null){
                    result += line;
                }
                bufferedReader.close();

                JSONArray jsonArray = new JSONArray(result);
                currList = new String[jsonArray.length()];
                //arrayde ki parametreler ayrıştırılır
                for (int i=0 ; i<jsonArray.length(); i++){
                    JSONObject jsonObject = jsonArray.getJSONObject(i);
                    DovizCom dovizCom = new DovizCom();
                    dovizCom.buying = jsonObject.getDouble("buying");
                    dovizCom.selling = jsonObject.getDouble("selling");
                    dovizCom.change_rate = jsonObject.getDouble("change_rate");
                    dovizCom.curr = jsonObject.getInt("currency");
                    dovizCom.name = jsonObject.getString("name");
                    dovizCom.fullName = jsonObject.getString("full_name");
                    dovizCom.code = jsonObject.getString("code");
                    currArray[i]=dovizCom;
                }
                //listviewda gösterilecek veriler ayarlanır
                for (int i=0; i<jsonArray.length(); i++){
                    JSONObject jsonObject = jsonArray.getJSONObject(i);
                    currList[i]=jsonObject.getString("full_name");
                }


            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } catch (JSONException e) {
                e.printStackTrace();
            }
            return null;
        }
        //bütün işlemler bittikten sonra listview'a aktarılır
        @Override
        protected void onPostExecute(Void aVoid) {
            ArrayAdapter adapter = new ArrayAdapter(getBaseContext(), simple_list_item_1, currList);
            listCurrency.setAdapter(adapter);
        }
    }

Buraya kadar sorunsuz gidebilmişsek eğer uygulamayı çalıştırdığımızda ListView’da veri olduğunu görebileceğizdir. Bu arada yukarıdaki ArrayAdapter’a gönderdiğimiz “simple_list_item_1” Android Studio’nun bize sunduğu basit bir liste itemi, eğer listview’da sadece text olacaksa bunu kullanabilirsiniz. Daha sonra kendi özelleştireceğimiz ListView adapterlerini de göstereceğim inşallah.

Şimdi listView’da her hangi bir tıklamadan sonra nasıl çalıştıracağımıza bakalım. Bunun için yukarıda yazdığımız koddaki kesite bakmamız gerekli.

listCurrency.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView adapterView, View view, int position, long id) {
                Intent myIntent = new Intent(MainActivity.this, CurrencyInfo.class);
                myIntent.putExtra("code", currArray[position].code);
                myIntent.putExtra("buying", currArray[position].buying);
                myIntent.putExtra("change_rate", currArray[position].change_rate);
                myIntent.putExtra("curr", currArray[position].curr);
                myIntent.putExtra("selling", currArray[position].selling);
                myIntent.putExtra("full_name", currArray[position].fullName);
                MainActivity.this.startActivity(myIntent);
            }
        });

Burada yaptığımız yeni bir intent oluşturuyoruz. Bu bize yeni activity çalıştırmamıza olanak sağlıyor. putExtra methodu ile sonraki activity’de işimize yarayacak verileri gönderiyoruz.

Şimdi ikinci activity’e geçiyoruz.

Buranın tasarımı yukarıdaki ekran görüntülerinde görünüyor zaten.

public class CurrencyInfo extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_currency_info);
        //ekranda ki textViewları tanımladık
        TextView txt_currency_name = (TextView) findViewById(R.id.txtCurrencyName);
        TextView txt_buying = (TextView) findViewById(R.id.txtBuying);
        TextView txt_curr_code = (TextView) findViewById(R.id.txtCurrCode);
        TextView txt_curr_rate = (TextView) findViewById(R.id.txtCurrRate);
        TextView txt_selling = (TextView) findViewById(R.id.txtSelling);

        //yaşayan intentler çekiliyor.
        Intent intent = getIntent();
        txt_currency_name.setText(intent.getStringExtra("full_name"));
        /**burada sonda yazdığımız değer, eğer herhangi bir veri gelmezse default olarak
         * ne çekeceğini gösteriyor.
         */
        txt_buying.setText(Double.toString(intent.getDoubleExtra("buying",0.00)));
        txt_selling.setText(Double.toString(intent.getDoubleExtra("selling",0.00)));
        if (intent.getDoubleExtra("change_rate",0.00)<0)
            txt_curr_rate.setTextColor(getResources().getColor(R.color.colorRed));
        else
            txt_curr_rate.setTextColor(getResources().getColor(R.color.colorGreen));

        txt_curr_rate.setText(Double.toString(intent.getDoubleExtra("change_rate",0.00)));
        txt_curr_code.setText(intent.getStringExtra("code"));
    }
}

Gerekli açıklamaları kod içinde yaptığımı düşünüyorum. Ama yinede sormak istediğniz bir şey olursa yorum bırakabilirsiniz. En kısa zamanda dönmeye çalışırım.

Uygulamayı buradan indirebilirsiniz.

Tina – Wallpaper Uygulaması

Merhabalar, ikinci android uygulamamı sunmuş bulunmaktayım. Sizlerden de uygulamamı indirip destek olmanızı rica ediyorum.

Duvar kağıdı uygulaması olarak sunulan ikinci uygulamamız da kendimizin tasarladığı 100’e yakın duvar kağıtlarıyla telefonunuzu bizim uygulamamızla özelleştirmeniz bizi çok sevindirecektir. Şu an sadece başlangıç aşamasındayız daha çeşitli özellikler eklenerek devam edecektir inşallah. Desteklerinizi bekliyorum.

Uygulamayı buradaki linkten indirebilirsiniz. Teşekkürler.