android etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
android etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

9 Nisan 2015 Perşembe

Android root

Android cihazınızda debug amaçlı data klasörüne bakmak için DDMS ekranını açtığımızda klasör içeriğini göremeyebilirsiniz.
Bunun sebebi root'lanmamış cihazlarda bu klasöre erişimin sınırlanmış olmasıdır.
Cihazı root'ladıktan sonra içeriği görebilirsiniz.

Root işlemine başlamadan yedek almakta fayda var.
Ben Samsung Kies programı ile yedekleme yapmayı seçtim.
Başka yedekleme programları da mevcut.

Yedekleme bittikten sonra cihazın modeline uygun olan bir root uygulaması bularak çalıştırmak gerekiyor. Her uygulama her cihazı root'layamıyor malesef.
Ben Samsung Galaxy tabletimin model numarasına göre uygun olan bir programı seçtim.

Android SQLite

android.database.sqlite paketinde bulunuyor.

SQLiteDatabase.openDatabase()


Yeni veritabanı yaratmak için : OPEN_READWRITE,
Varolan veritabanını okumak için : OPEN_READONLY,
Eğer yoksa yaratıp, sonra okuyup-yazmak için : CREATE_IF_NECESSARY
flagini set edebiliriz.






Android Toast

Ekranda kısa süreli bir mesaj gösterir.

Örnek kullanım


Toast.makeText(getApplicationContext(), "", Toast.LENGTH_LONG).show();

makeText()


Önce Toast.makeText() metodu ile contexti, gösterilecek metni ve süreyi belirtiyoruz.
İkinci parametrede String kullanmak gerekiyor.
Burada int kullandığımızda hata almıyoruz. Uygulama compile ve build ediyor.
Fakat uygulama ayağa kalktığında resource not found gibi muğlak bir hata veriyor.
Buna dikkat etmek lazım.
Süre olarak Toast.LENGTH_SHORT ya da Toast.LENGTH_LONG ile kısa ya da uzun süreli gösterimi seçebiliyoruz.

show()


show() metodu ile de ekranda gösteriyoruz.
Bunu unutunca toast gösterilmiyor; fakat hatalı bir durum olmadığından hata mesajı da almıyoruz.
Bu yüzden show() metodunu unutmamak gerekiyor.

Android AsyncTask

Genel Bilgiler

http://developer.android.com/reference/android/os/AsyncTask.html
android.os paketi içerisinde bulunuyor.

UI threadi meşgul etmemesi açısından uzun zaman alacak işlemlerin kontrolünü AsyncTask sınıfından kalıtımla yarattığımız asenkron sınıflara teslim etmemiz gerekiyor.
Eğer böyle yapılmazsa arayüzün işlem bitene kadar kilitlenmesine/donmasına yol açıyor ki bu kullanıcının tamamen uygulamadan dışlanması demek oluyor.
Zaten bu şekilde yapıldığında Eclipse yada Android Studio hemen hata vererek bizi uyarıyor.

(Java Swing'de de aynı mantıkla hareket ediliyor.
Aksi halde swing formu işlem bitene kadar donup kalır.
Yalnız swing'de bu şekilde bir uyarı almıyoruz.)

Örnek kullanım


private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> {
     protected Long doInBackground(URL... urls) {
         int count = urls.length;
         long totalSize = 0;
         for (int i = 0; i < count; i++) {
             totalSize += Downloader.downloadFile(urls[i]);
             publishProgress((int) ((i / (float) count) * 100));
             // Escape early if cancel() is called
             if (isCancelled()) break;
         }
         return totalSize;
     }

     protected void onProgressUpdate(Integer... progress) {
         setProgressPercent(progress[0]);
     }

     protected void onPostExecute(Long result) {
         showDialog("Downloaded " + result + " bytes");
     }
 }

Bu sınıfı kullanmak için de:

new DownloadFilesTask().execute(url1, url2, url3);

Execute metodu


Asenkron sınıftan aldığımız instance'ı çalıştırmak için execute() metodunu çağırıyoruz.
Execute içerisinde bir ya da daha fazla parametre verebiliyoruz.
Yalnız bu parametrelerin tiplerinin aynı olması gerekiyor.
doInBackground() metodu bunların hepsini bir array halinde parametre olarak alabiliyor.

Parametreler


AsyncTask sınıfının parametreleri <Params, Progress, Result> olması içerideki metodların girdi-çıktısının kontrollü ve net bir şekilde belirtilmesini sağlıyor.
Bunları tek tek inceleyelim:

Params : execute metodunda verdiğimiz ve doInBackground() metodunun parametre olarak aldığı değer ya da değerlerin tipi.
Progress : doInBackground() metodunun döndürdüğü ve onProgressUpdate() metodunun parametre olarak aldığı değerin tipi.
Result : onProgressUpdate() metodunun döndürdüğü ve onPostExecute() metodunun parametre olarak aldığı değerin tipi.

Android Button

android.widget paketinde bulunuyor.
http://developer.android.com/reference/android/widget/Button.html



Örnek kullanımı:

public class MyActivity extends Activity {
     protected void onCreate(Bundle icicle) {
         super.onCreate(icicle);

         setContentView(R.layout.content_layout_id);

         final Button button = (Button) findViewById(R.id.button_id);
         button.setOnClickListener(new View.OnClickListener() {
             public void onClick(View v) {
                 // Perform action on click
             }
         });
     }
 }

...

Önce butonu id'siyle getiriyoruz:

final Button button = (Button) findViewById(R.id.button_id);
...
Sonra tıklama eventini dinleyecek bir onClick listener yaratıp butona atıyoruz:

button.setOnClickListener(new View.OnClickListener() {
             public void onClick(View v) {
                 // Perform action on click
             }
         });

...

Tıklandığı anda buronun onclicklistener metodu onClick içerisindeki işlemleri uygulamaya başlıyor.

Bir diğer yöntem de xml üzerinden yapılabilir.

 <Button
     android:layout_height="wrap_content"
     android:layout_width="wrap_content"
     android:text="@string/self_destruct"
     android:onClick="selfDestruct" />

...
Burada activity'nin selfDestruct adlı metodu çağrılıyor.
Dikkat edilmesi gerek nokta ise, metodun mutlaka public olması ve parametre olarak sadece View alması. Buradaki View parametresi tıklanan butona verilen bir referans oluyor.

public void selfDestruct(View view) {
     // Kabloey
 }
...

Eclipse'te şu hata ile karşılaşılırsa:
The method setOnClickListener(View.OnClickListener) in the type View is not applicable for the arguments (new OnClickListener(){})
import'larda bir sorun olabilir.
Ctrl+Shift+O ile fix imports yaparak View.OnClickListener'ın seçildiğinden emin olmak gerekiyor.




4 Mart 2015 Çarşamba

Android ve Material Design

http://www.androidgreeve.com/2014/10/how-to-migrate-from-holo-design-to-Material-Design-Android-Lollipop.html


Android faydali lib ler

twitter4j
crawl4j
picasso
volley
okhttp
gson
sqlite-jdbc

Android de donma sorunu

Uzun süren işlemleri threadsiz yaparsak donma olur. Zaten Android 4den sonra (sanırım) UI thread de asyncTask oluşturmadan uzun sürecek network vb işlemleri yapmaya çalıştığımızda hata veriyor.

async task : kendi threadini yazmak yerine bu taska eleman veririz.
onpreexecyte : oncesi
onpostexecute:sonrası
onprogressupdate: devam ederken aralarda threaedi durdurup işlemini yapar, sonra threadi devam ettirir.

asyncTask ta genericler type istediğinden Void, Integer kullanırız.

Permission lar

Android de izinler thlikeli olabiliyor. Bir uygulamayı yüklemeden önce permissionları iyi okumak gerekli.
Bir uygulama diğerlerini dinleyebiliyor. Kötü niyetli uygulamalar kamerayı, ağ erişimini, lokasyonu kullanarak ekran görüntüsüne kadar alıp bu durumu suistimal edebiliyorlar.
Fraud denen işlemler banka vb kurumsal firmaları zarara uğratabiliyor.

ios'da ise bu tarz sms okuma vs izinler verilmiyor, zaten review da uzunca bir inceleme ve kontrolden geçiyor.
Android de ise herhangi bir uygulama bir iki saat içinde play store da indirmeye hazır olarak yer alıyor.

İzin konusunu gündeme getiren uygulamalar olmuş fakat bu uygulamalar bütün uygulamalara erişim istediğinden aslında daha da büyük risk oluşturuyor! Bu da bir ikilem oluşturuyor..


Assets klasörü

assets klasörüne kullanacağımız jar video vb diğer klasörlere konmayan ama lazım olan dosyaları ekleriz.
Örneğin bir jar dosyasını: build path-configure build path add jar (assets-) ve order and export dersek projeyle paketler. Yoksa export ederken projeye dahil etmez.

Toast

tooltip gibi mesaj gösteriyor.
Toast toast = Toast.makeText() diyerek kısa yada uzun süreli bir mesaj yanıp sönüyor.
Toast.length_long : uzun süreli
Toast.length_short : kısa süreli yapmak için.

R dosyası (R.java)

Generated içindeki R.java dosyası, java dan resource lara erişimi sağlar.
setcontentview icine R.layout.id yi vererek ulaşabiliriz.

Eğer resource larda hata varsa R dosyası oluşmaz - yokolur.

UI tasarımı ve Material Design

Google ın ortaya attığı material design konusu her bir elemanın iki boyutlu kağıt benzeri maddeler şeklinde tasarlanmasını öneriyor.
Gölgeleme ve z-depth ile öne çıkarmak mümkün.
Renkler bir ana renk ve tonları, ona uygun bir accent renk ve bir de arkaplan rengi şeklinde seçiliyor.
Padding ve margin ler belirtilmiş. Resim ve text kenarlarında belirgin şekilde boşluk bırakılıyor.

Android app yazdıktan sonra nasıl test etmeli?

Tek bir AVD de test edip tamamdır demek olmuyor malesef.
En az 3 farklı AVD de ve mümkünse gerçek cihazlarda da test etmek gerek.
Bazen AVD de çalışan bir app aynı sistemin gerçeğinde çalışmayabiliyor.
AVD nin gerçeğe çok yakın olduğunu ama asla gerçek cihazın yerine geçemeyeceğini hatırda tutmakta yarar var.

AVD

AVD: Android Virtual Device demektir. Yani Android işletim sistemi kullanan bir sanal cihaz.
Emülatör bu sanal cihazı dilediğimiz gibi test amaçlı kullanabilmemizi sağlıyor.
Eclipse te yukarıda bulunan içinde android ikonu bulunan telefon simgesine tıklayınca AVD manager açılır.
Burada istediğimiz Android versiyonu ve çeşitli sistem özellikleri seçip bir sanak cihaz çalıştırabiliyoruz.
İlk açıldığında uzun süre beklemesi normaldir, panik yapmaya gerek yok.
Açılması uzun sürdüğünden bir kere açtıktan sonra işimiz bitene kadar kapatmamak en iyisi.
Sanal cihazına gerçeğinden hiç farkı yok. Aramam, sms, vb her türlü fonksiyonu simüle edebiliyor.