Android Butona Click Event Atama




Instance State Nedir, Ne Zaman Kullanılır?

Konunun içeriğinin daha iyi anlaşılması açısından şöyle bir senaryo üzerinden ilerleyebiliriz:

Örnek ekranımızda bir adet TEXTBOX ve bir adet LABEL var. Butona tıklandığında TEXTBOX değerini alıp LABELe yazdırılıyor. İlk ekranımızda göründüğü gibi “Sait ORHAN” yazısı labele yazdırılmış. Bu durumda iken telefonun yönünü değiştirilmesi durumunda label değeri tasarım aşamasında verilen değere dönüyor. Örneğimizde “HELLO WORLD!” metnine döndüğü gibi ve telefon yönü eski durumuna getirilse bile atanan değer geri gelmiyor.

Bu durumun nedeni Android‘in kullanıcıdan alınan değerleri tutup performansa olumsuz etkisi olmaması için statik değer olduğu farzedilen değerleri hafızaya almamasıdır.

Bu sorunun çözmenin yolu; telefonun yönü değiştiğinde sırası ile onSaveInstanceState ve onRestoreInstanceState olayları tetikleniyor.

onSaveInstanceState metodu içerisinde bu şekilde kaybolan değerler Bundle tipindeki parametreye alınarak koruma altına alınır.

@Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);

        outState.putString("name", labelName.getText().toString());
    }

onRestoreInstanceState metodu içinde de onSaveInstanceState metodunda kaydedilen değerler alınarak ilgili kontrollere atanır.

@Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);

        String name = savedInstanceState.getString("name");
        labelName.setText(name);
    }




Android “Uygulamayı Puanla” Butonu Ayarlama

Android uygulamaları içinde en çok kullanılan kod bloklarından biri de kullanıcının uygulamayı puanlamak için kullanıcıyı Google Play Store sayfasına yönlendiren kod blokudur. Aşağıdaki kodu, kopyalayıp yapıştırarak kullanıcınızı uygulamanızın Google Play sayfasına yönlendirebilirsiniz.

Uri uri = Uri.parse("market://details?id=" + getPackageName());
            Intent goToMarket = new Intent(Intent.ACTION_VIEW, uri);
            // To count with Play market backstack, After pressing back button,
            // to taken back to our application, we need to add following flags to intent.
            goToMarket.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY |
                    Intent.FLAG_ACTIVITY_NEW_DOCUMENT |
                    Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
            try {
                startActivity(goToMarket);
            } catch (ActivityNotFoundException e) {
                startActivity(new Intent(Intent.ACTION_VIEW,
                        Uri.parse("http://play.google.com/store/apps/details?id=" + getPackageName())));
            }




SQLite Insert Hızlandırma

Üzerinde çalıştığım Android uygulamasında yaşadığım bir sıkıntıyı ve çözümünü burada sizinle paylaşmak istedim.

Zararlı Bağlantılar isimli uygulamamızda siber dünyada tespit edilen zararlı linkleri ve kategorilerini paylaşıyoruz. Veriler sürekli güncellendiğinden internetten verileri alıp local veri tabanına kaydedilmesi gerekiyor. Aldığımız kayıt sayısı yirmi binleri aştığından standart SQLite insert komutu ve foreach döngüsü ile 10 dakikayı aşan bir süre alıyordu. İnternetten yaptığım araştırma sonucunda aşağıdaki kod ile insert işlemini yapınca yaklaşık 10 saniye kadar bir zaman aldı.

String sql = "INSERT INTO table (number, nick) VALUES (?, ?)";
db.beginTransaction();
 
SQLiteStatement stmt = db.compileStatement(sql);
for (int i = 0; i < values.size(); i++) {
    stmt.bindString(1, values.get(i).number);
    stmt.bindString(2, values.get(i).nick);
    stmt.execute();
    stmt.clearBindings();
}
 
db.setTransactionSuccessful();
db.endTransaction();[




Android Ekranlar (Activity) Arası Geçiş

İkinci Activity Geçiş

Yapılan yazılımların hemen hemen hepsi birden fazla ekran içermektedir. Android yazılımları da bu kuraldan müstesna değillerdir. Android yazılımında ekranlar activity olarak adlandırılır ve aşağıdaki kodda ikinci activity açmayı ve açılan yeni activiye veri gönderip almayı öğreneceğiz:

Activity başlatmak için faydalanacığımız sınıf Intent sınıfıdır. Intent nesnesinin kullanmak için Intent sınıfını projemize import etmemiz gerekmektedir.

import android.content.Intent;

Activity açmak için Intent nesnesini tanımlayıp startActivity(intent) metodu ile activity başlatıyoruz.

Intent intent = new Intent(this, MesajGosterActivity.class);
startActivity(intent);

Bu işlem sonucunda ikinci activity başlamış olur. İkinci ekran açılırken en sık yapılan işlemlerden biri de ikinci ekrana veri gönderilmesidir. Bu işlem için Intent nesnesinin putExtra ve getXXXX metotlarından faydalanıyoruz. Veri göndermek için:

Intent intent = new Intent(this, AcilacakEkran.class);
intent.putExtra("anahtar", veri);
startActivity(intent);

Kodunu kullanıyoruz. Açılan yeni activity nesnesine gelen veriyi almak için de onCreate metodu içerisinde:

Intent intent = getIntent();
string data = intent.getStringExtra("anahtar");

Kodu ile de activitye gelen string değeri alırız.




Android Yazılımı İçerisinde Reklam Vermek – 3

Geçiş Reklamları

Merhaba arkadaşlar bu yazımızda Android yazılımımıza verebileceğimiz bir diğer reklam çeşidi olan geçiş reklamlarını göreceğiz. Geçiş reklamları özellikle sayfa veya bölüm geçişlerinde kullanabileceğiniz ve tam sayfa kaplayan reklamlardır.

Geçiş reklamı eklemek için ilk iş olarak daha önceki yazımızda anlattığımız AdMob hizmeti üzerinde hesap ve uygulama açmamız gerekmektedir. İkinci adım olarak da “Geçiş” türünde bir reklam birimi oluşturmamız gerekmektedir. Reklam birimi oluşturmayı da serimizin ikinci yazısında işlemiştik. Reklam birimi oluşturma ve kütüphanelerin projeye eklenmesinde sonra ki işlemler aşağıdaki gibidir.

private InterstitialAd mInterstitialAd;

Şeklinde sınıf genelinde geçerli bir geçiş reklam nesnesi tanımladıktan sonra:

mInterstitialAd = new InterstitialAd(this);
mInterstitialAd.setAdUnitId("REKLAM BİRİMİ KİMLİĞİNİZ");

kodu ile reklam birimi nesnemizi tanımlıyoruz. Banner reklam biriminde olduğu gibi burada da dikkat etmemiz gereken şey, testlerimizi AdMob geçiş reklamları için belirlediği test birim kimliği kullanmamız. Test ID değeri:

ca-app-pub-3940256099942544/1033173712

Tanımlamaları yaptıktan sonra da:

mInterstitialAd.loadAd(new AdRequest.Builder().build());

kod satırı ile nesnemize reklam talep ederek yükleme yapıyoruz. Yükleme işlemi yaptıktan sonra da:

mMyButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        if (mInterstitialAd.isLoaded()) {
            mInterstitialAd.show();
        } else {
            Log.d("TAG", "Reklam henüz yüklenmedi.");
        }
    }
});

Örnek kodu ile reklamı ekrana gösteriyoruz. Her gösterimden sonra bir sonraki gösterim için yeni reklam talebinde bulunmamız gerekmektedir. Bunun için reklam biriminin kapanış olayından sonra yeni reklam isteminde bulunuyoruz.

  mInterstitialAd.setAdListener(new AdListener() {
        @Override
        public void onAdClosed() {
            // Reklam kapandığında yeni reklam istemi.
            mInterstitialAd.loadAd(new AdRequest.Builder().build());
        }

    });




Android Yazılımı İçerisinde Reklam Vermek – 2

Tekrardan merhaba arkadaşlar, dünkü yazımızda AdMob servisi üzerinde uygulama oluşturmayı işlemiş ve bu yazımızda da uygulamamıza ilk reklamı ekleyeceğimiz yazmıştık.

Reklamları uygulamamızda gösterebilmek için öncelikle AdMob üzerinde reklam birimleri oluşturmamız gerekmektedir. Reklamları bu birimler üzerinden göstereceğiz. Aşağıda bir banner reklam birimi oluşturmayı ekran görüntüleri ile adım adım gördükten sonra uygulamaya eklemeyi göreceğiz.

Reklam birimi oluşturma

“BAŞLAT” butonuna tıklayarak oluşturabileceğimiz reklam birimleri görebileceğimiz ekrana geçiş yapıyoruz.

Oluşturabilecek Reklam Birimleri

Biz konumuz olan “Banner” birimine “SEÇ” deyip birim ayarlarını gireceğimiz ekrana giriş yapıyoruz.

Banner Reklam Birimi Ayarları

Reklam birimine vereceğimiz adı girdikten sonra “REKLAM BİRİMİ OLUŞTUR” butonuna tıklayarak reklam birimine ait kimlik değerlerini alacağımız ekrana geçiş yaparak reklam birimi oluşturmayı tamamlıyoruz.

Reklam Birimine Ait Değerler

Android Uygulamamıza Reklamın Eklenmesi

Bundan sonraki adımlarımızda da uygulamamıza reklamı eklemeyi işleyeceğiz:

Proje seviyesinde build.gradle dosyamızı açıp maven kütüphanesini aşağıdaki gibi ekliyoruz. Ekleme yapacağımız yer maven kısmıdır.

allprojects {
    repositories {
        jcenter()
        maven {
            url "https://maven.google.com"
        }
    }
}

Maven kütüphanemizi ekledikten sonra app seviyesinde build.gradle dosyamızda da dependencies altına aşağıdaki gibi kütüphaneyi ekliyoruz.

implementation 'com.google.android.gms:play-services-ads:15.0.1'

Kütüphanemizi de ekledikten sonra manifest dosyamıza reklam için meta datamızı ekliyoruz. Ekleyeceğimiz alan meta-data alanıdır. [ADMOB_APP_ID] yerine AdMob’tan aldığımız uygulama kimliğimizi yazıyoruz.

<manifest>
    <application>
        <!-- Sample AdMob App ID: ca-app-pub-3940256099942544~3347511713 -->
        <meta-data
            android:name="com.google.android.gms.ads.APPLICATION_ID"
            android:value="[ADMOB_APP_ID]"/>
    </application>
</manifest>

Bütün işlemlerden sonra uygulamamızın açılış ekranında bir defaya mahsus reklam servisini oluşturuyoruz. Bu işlemi onCreate metoduna yazabiliriz.

// Sample AdMob app ID: ca-app-pub-3940256099942544~3347511713
        MobileAds.initialize(this, "YOUR_ADMOB_APP_ID");

Şimdi sıra geldi layout dosyamıza reklamı eklemeye;

 <com.google.android.gms.ads.AdView
            xmlns:ads="http://schemas.android.com/apk/res-auto"
            android:id="@+id/adView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:layout_alignParentBottom="true"
            ads:adSize="BANNER"
            ads:adUnitId="ca-app-pub-3940256099942544/6300978111">
        </com.google.android.gms.ads.AdView>

Kodu ile banner reklamımızı uygulamamıza eklemiş oluyoruz. ads:adUnitId alanına AdMob’tan aldığımız reklam birimi kimliğini yazıyoruz. Burada dikkat etmemiz gereken nokta testlerimizi yaparken AdMob’un banner için belirlemiş olduğu test reklam birimi kimliğini kullanmamız gerektiğidir. AdMob test kimliği: 
ca-app-pub-3940256099942544/6300978111

Ve geldik reklamı yüklemeye:

AdView mAdView = findViewById(R.id.adView);
        AdRequest adRequest = new AdRequest.Builder().build();
        mAdView.loadAd(adRequest);




Android Yazılımı İçerisinde Reklam Vermek – 1

Her ne kadar klasikleşmiş bir söz olarak “öncelikle para kazanacağınız değil mutlu olacağınız işi yapın” deseler de ortada bir gerçek var ki iş de para kazanmak için yapılıyor. Bu yazı serimizde geliştirdiğimiz android yazılımlarımıza reklam vermeyi göreceğiz.

Android yazılımını yazıp bitirdikten sonra iki şekilde para kazanılabilir. İlk seçenek yazılımı ücretli olarak Google Play üzerinde satmak ancak ne yazık ki bu seçenek ülkemizde çok işlemiyor zira yazılıma para vermek çöpe atılan para gibi görülmektedir ya da lisanslı yazılım kullanımı “kreği vardı ya ne diye para veriyorsun” sözü ile genellikle ayıplanmaktadır. İkinci seçenek de yazılım içerisinde reklam göstermek; bu yazı serimizde reklam verme işlemlerini baştan sona işlemeye çalışacağız.

Reklam verme işlemi için öncelikle AdMob servisine üye olmak gerekiyor. AdMob Google tarafından satın alınmış olan bir reklam hizmetidir.

Üye olduktan sonra ilk işlem olarak uygulama oluşturmamız gerekmektedir.

AdMob uygulama oluşturma

İkinci adım olarak uygulamanın yayınlanıp yayınlanmadığını soruyor:

Uygulama yayın durumu

Biz burada “HAYIR” seçeneğini tıklayarak işlemimize devam ediyoruz:

Uygulamamızın yayında olmadığını seçtikten sonra karşımıza uygulamamızın platformu ve adını soran ekran çıkacaktır. Gerekli bilgileri girdikten sonra “EKLE” diyerek devam ediyorum

Uygulama adı ve platform seçimi

“EKLE” butonuna tıkladıktan sonra reklam birimi oluşturmamızı isteyen ekran gelecektir karşımıza, “DAHA SONRA YAPACAĞIM” diyerek işlemi sonlandırıyoruz. 

Uygulama oluşturma sonu

Yarın ki yazımızda, reklamların uygulamaya eklenmesini sağlayan reklam birimlerinden banner reklam oluşturma ve eklemeyi işleyeceğiz.




İş Saatleri Takip Uygulaması

Merhabalar,

Sitemizin genelinde de dikkat çektiği üzere öğrenciliğimden bu yana sürekli .Net uygulamaları ile haşir neşir oldum ancak bu sene farklı bir alanda Android alanında çalışmalara başlamaya karar verdim. Ve Android sisteminde ilk uygulamalarımdan birini daha yayına almış bulunmaktayım. Bu yazılım ile günlük işe başlama ve çıkış saatlerinizi takip altında tutabilirsiniz.

Aşağıdaki ekranlarda uygulama hakkında temel bilgiler yer almaktadır.

  1. Uygulama ana ekranı

     

  2. Giriş çıkış kayıt ekranı

    Kayıt için tarih seçme işlemi

     

    Kayıt için saat seçme işlemi

     

  3. Rapor Ekranı

     

    Sunulan Raporlar

    Yazılımı bu linkten indirebilirsiniz:
    https://play.google.com/store/apps/details?id=com.saitorhan.workinghours




Telefon Rehberi

Java ve MySQL Server ile yazılmış basit bir telefon rehberi uygulamasıdır. Projeye GitHub üzerinden aşağıdaki linkten ulaşabilirsiniz.

https://github.com/saitorhan/Telefon-Rehberi