İlk Android uygulamam

Etiketlenen : , , , , ,

Android konusunda sadece kullanıcı değil de biraz da geliştiren tarafında yer almanın vakti geldi geçiyor. Uzun zamandır planladığım ama vakit bulamadığım ilk Android uygulama deneyimimle ilgili bloguma birşeyler yazmazsam olmaz. :) Ben elimdeki kaynaklar ve kolay bir uygulama olması için Döviz Kurları adıyla (her ne kadar Android Market’in sayısı bir elin parmaklarını geçmeyen Türkçe uygulamaları içinde bir kaç alternatif döviz uygulaması olsa da) bir uygulama geliştirmeye karar verdim. Bana ait olan http://www.doviz.gen.tr sitesine JSON olarak veri üreten bir dosya yaparak işe başladım. Amacım o JSON dosyasını çağırıp elde edeceğim verileri uygulamamda uygun kısımlara yazdırmaktı. Android ile ilgili herhangi bir kod yazmadığım gibi hiçbir java deneyimi olmayan benim bir kaç saatte yaptıklarımı http://www.doviz.gen.tr/doviz_android_1.0.4.rar adresinden indirebilirsiniz.

Uygulamayı Eclipse üzerinde hazırlıyorum. Vakit buldukça burada Eclipse, Android SDK, uygulamayı Android Market için hazır etmeyi açıklayan makalelerim olacak. Java konusunda bilgi sahibi arkadaşların Android platformuyla ilgili çaba göstermesi dileğiyle.

1.0.5 sürüm çalışmalarım:


package com.ersinkoc.doviz;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.json.JSONObject;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

import android.webkit.WebSettings;
import android.webkit.WebView;

public class DovizKurlari extends Activity {
WebView webview;

	/*
	 *
	 * Version kontrolü için json istek adresinin sonuna ?version=1.0.3 ekledim
	 *
	 */
	public static final String DOVIZURL = "http://www.doviz.gen.tr/doviz_json.asp?version=1.0.5";

	@Override
	public void onCreate(Bundle icicle) {
	    super.onCreate(icicle);

	    // layout getirme
	    setContentView(R.layout.main);

	    // girer girmez veri güncellemesi
	    veriGuncelle();

	    // Güncelle butonuna tıklandığını dinletiyorum
	    final Button guncelTut = (Button) findViewById(R.id.guncelle);
	    guncelTut.setOnClickListener(new View.OnClickListener() {
	    public void onClick(View v) {
	            veriGuncelle();
	    }
	    });

	    // Çıkış butonuna tıklandığını dinletiyorum
	    final Button cikisYap = (Button) findViewById(R.id.cikis);
	    cikisYap.setOnClickListener(new View.OnClickListener() {
	    public void onClick(View v) {
	        DovizKurlari.this.finish();
	    }
	    });

	    // Site butonuna tıklandığını dinletiyorum
	    final Button siteGosterme = (Button) findViewById(R.id.siteGoster);
	    siteGosterme.setOnClickListener(new View.OnClickListener() {
	    public void onClick(View v) {
	        siteGoster();
	    }
	    });

	}

	// menü oluştur
	public boolean onCreateOptionsMenu(Menu menu){
		MenuInflater inflater = getMenuInflater();
		inflater.inflate(R.menu.menu, menu);
		return true;
	}

	// menüde basılan seçeneklere göre işlemler
	public boolean onOptionsItemSelected (MenuItem item){
		switch (item.getItemId()){
		case R.id.geriDon:
		    setContentView(R.layout.main);
		    veriGuncelle();
			return true;

		case R.id.menuCikis:
			DovizKurlari.this.finish();
			return true;
		}
		return false;
	}

	// mobile site olayı (site yok henüz)
	public void siteGoster(){
	    webview = new WebView(this);
	    setContentView(webview);
	    WebSettings settings = webview.getSettings();
	    settings.setJavaScriptEnabled(true);
	    webview.loadUrl("http://www.doviz.gen.tr/?mobile=1");

	}

	public void veriGuncelle(){

		// layout üzerinde işlem yapacağım bileşenleri tanımlama
	    EditText dolarText = (EditText) findViewById(R.id.dolarKuru);
	    EditText euroText = (EditText) findViewById(R.id.euroKuru);
	    EditText dolar2Text = (EditText) findViewById(R.id.dolarKuru2);
	    EditText euro2Text = (EditText) findViewById(R.id.euroKuru2);
	    TextView guncellemeZamani = (TextView) findViewById(R.id.sonGuncelleme);
	    TextView sonKayitText = (TextView) findViewById(R.id.sonKayit);

	    // güncelleme anında her bölüme ... koydurmaca
	    dolarText.setText("...");
	    euroText.setText("...");
	    dolar2Text.setText("...");
	    euro2Text.setText("...");
	    sonKayitText.setText("...");

	    // Bir web isteği oluşturma
	     HttpClient webIstemci = new DefaultHttpClient();
	     HttpGet webGetir = new HttpGet(DOVIZURL);
	     HttpResponse gelenCevap;
	        try {
	        	gelenCevap = webIstemci.execute(webGetir);
	            HttpEntity birim  = gelenCevap.getEntity();
	            if (birim != null) {
	                InputStream gelenVeri = birim.getContent();
	                String sonuc = convertStreamToString(gelenVeri);

	                JSONObject jsonVeri=new JSONObject(sonuc);

	                /*
	                 * Eski sürüme örnek veri:
	                 * {"dolar":"1.4970","euro":"1.9290","dolar2":"1.4980","euro2":"1.9300","ddolar":"1.5000","deuro":"1.9290","ddolar2":"1.5010","deuro2":"1.9300","sonkayit":"Kur G\u00FCncelli\u011Fi : 4 Eyl\u00FCl 2010 Cumartesi , 11:30","guncelleme":"04.09.2010 12:20:58 itibariyle g\u00FCncellendi! Kulland\u0131\u011F\u0131n\u0131z yaz\u0131l\u0131m\u0131n daha g\u00FCncel s\u00FCr\u00FCm\u00FC bulunmu\u015Ftur. Yeni s\u00FCr\u00FCm numaras\u0131 1.0.3"}
	                 *
	                 * Düzgün sürümle alınan veri:
	                 * {"dolar":"1.4970","euro":"1.9290","dolar2":"1.4980","euro2":"1.9300","ddolar":"1.5000","deuro":"1.9290","ddolar2":"1.5010","deuro2":"1.9300","sonkayit":"Kur G\u00FCncelli\u011Fi : 4 Eyl\u00FCl 2010 Cumartesi , 11:30","guncelleme":"04.09.2010 12:21:21 itibariyle g\u00FCncellendi!"}
	                 *
	                 */

	                // json verimizden isim isim veri toplamaca
	                String dolar = jsonVeri.getString("dolar");
	                String euro = jsonVeri.getString("euro");
	                String dolar2 = jsonVeri.getString("dolar2");
	                String euro2 = jsonVeri.getString("euro2");
	                String sonGuncellemeVakti = jsonVeri.getString("guncelleme");
	                String sonKayitTarihi = jsonVeri.getString("sonkayit");

	                // ekranda gerekli yerlere veriyi koymaca
	                dolarText.setText(dolar.toString());
	                euroText.setText(euro.toString());
	                dolar2Text.setText(dolar2.toString());
	                euro2Text.setText(euro2.toString());
	                sonKayitText.setText(sonKayitTarihi.toString());
	                guncellemeZamani.setText(sonGuncellemeVakti.toString());

	                gelenVeri.close();
	            }
	        }catch(Exception e){
	                // internet bağlantısı veya gelen veride hata olursa diye ekrana uyarı koydum
	                guncellemeZamani.setText("Güncelleme başarısız!\nInternet bağlantınızı kontrol edip, tekrar deneyiniz!");
	                Logger.getLogger(DovizKurlari.class.getName()).log(Level.SEVERE, null, e);
	        }

	}

	public String convertStreamToString(InputStream is) {
		// gelen veriyi string yapıya çevirmece
	    BufferedReader reader = new BufferedReader(new InputStreamReader(is));
	    StringBuilder sb = new StringBuilder();
	    String line = null;
	    try {
	      while ((line = reader.readLine()) != null) {
	          sb.append(line).append("\n");
	      }
	    } catch (IOException e) {
	    } finally {
	      try {
	          is.close();
	      } catch (IOException e) {
	      }
	    }
	    return sb.toString();
	}

}

Uygulamayı şu an Android Market üzerinde “Döviz Kurları” yazarak bulabilir veya http://www.doviz.gen.tr/DovizKurlari.apk adresinden indirebilirsiniz.

Android tercih sebeplerim ve iPhone hakkında görüşlerim.

Etiketlenen : , , , , , , , ,

Neredeyse her ortamda Android’i tercih ettiğimi dile getirmekteyim. Tekrar tekrar bunun nedenlerini anlatmaktansa, Android’i neden bir iPhone’a tercih ettiğimi maddeler halinde dile getirmek daha uygun olacak. Bu maddeler benim tercihlerimdir, detaylı bir inceleme yazısı olsaydı 100 maddeye kadar üstünlükleri yazabilirdim. :)

Android Mobil İşletim Sistemi konusunda hiç bilginiz yoksa en azından aşağıdaki linkleri incelemenizde fayda var.
http://tr.wikipedia.org/wiki/Android_(mobil_i%C5%9Fletim_sistemi)
http://www.android.com
http://www.openhandsetalliance.com

Şimdi gelelim Android’i tercih sebeplerime;

1- Kişiselleştirme
Android: Sadece duvar kağıdı koymaktan bahsetmiyorum, çeşitli widgetler (hava durumu, facebook, twitter, vs) , renk seçenekleri ve canlı duvar kağıtlarına varana kadar herşeyiyle kişiselleşen bir arayüz.
iPhone: Sadece arkaplana resim ekleme, program ikonlarını masaüstüne istediğin gibi koyabilmek. Widget desteği yok! Tüm uygulamalar masaüstünde!

2- Gerçek multitasking
Android: Arka planda bekletme değil, gerçekten aynı anda birçok programın sorunsuz çalışması. Müziği kesmeden facebook uygulamasında gezmek, Gtalk’tan arkadaşla konuşup mail yazabilmek. Hepsi aynı anda.
iPhone: Sadece stream, voip gibi kesintiye uğramaması gereken uygulamalara Apple uygulamaya izin vermişse  arka planda çalışma izni. Gerçekte programlar askıya alınıyor, geri döndüğünüzde kaldığı yerden tekrar çalışıyor. iPhone 3GS öncesi cihaz kapasiteleriyle zaten bu kadarını da yapamıyor.

3- Google servisleriyle senkronizasyon
?Android: 15 dk da bir mail kontrol değil, her saniye gmail, gtalk servisleriyle iletişimde olmak. Tüm google servisleriyle senkron halinde olmak. Kontaklarımın Gmail Contacts kısmıyla eşleşmesi. Latitude widget, takvim vs vs. Kısacası Google hayatınızın heryerindeyse Android yeter.
iPhone: Evet senkron var ama tam değil, mailleri daha erken okumak için sık sık kendiniz bakmanız gerekiyor. Gtalk’ı açık tutmak için sadece Gtalk’ı görebileceğiniz programı açmanız gerek, hiç kapatmadan.

4- Geliştirme ortamı, uygulama geliştirme süreci ve Android Market politikaları
Android: Yazılım geliştirmek için yeni bir dil öğrenmek gerekmiyor. Windows, Linux veya Mac ortamında yazılım geliştirmek muhteşem. Cihazın tüm nimetlerinden yararlanan bir SDK. Yazılımı anında kullanabilmek ve dağıtabilmek. Android Market’e aynı gün içinde ekleyebilmek hatta para kazanmak.
iPhone: Objective-C öğrenmek zorundasınız, Sadece Mac ortamında ve xCode ile uygulama geliştirebilirsiniz. Uygulamanızı AppStore dışında dağıtamazsınız. AppStore’a kabul edilmek için bir ay veya daha uzun beklemeniz gerekebilir. Bir çok veriye erişiminize izin vermeyen SDK. Kabul edilmezse uygulama boşagiden emekler.

5- Cihaz seçenekleri
Android: Mesela bütçeniz  500 TL ise 500 TL lık bir Android bulabilirken, bütçemde sınır yoksa en iyi donanıma sahip telefona olabiliyorum. Şu an 100′ün üzerinde Android destekli telefon var ve artıyor. Tabletleri saymıyorum bile. 100 $a bile tablet keyfi yaşayabilirsiniz.
iPhone: Malesef 500 TL’a bir iPhone alabilmeniz 2. el ve en az 2 senelik bir model için geçerli. Her yıl sadece biraz daha gelişmiş bir model çıkmakta, seçenek sadece dış renk seçeneği kadar olabiliyor. Ha bir de iPhone 4′ün anten sorunu sayesinde renkli kanser bileziği takınca şekil oluyor cihazlar. :)

6- Batarya değiştirebilme
Android: Günün ortasında yoğun kullanımımdan batarya ben bittim dediğinde şarj noktasına kilitlenmek yerine sadece yedek pili takıp güne devam etmek gibisi yok.
iPhone: Eğer batarya bitmişse şarj etmeden devam edemezsiniz. Multitasking yokken bile batarya çok erken bitiyor. Taşınabilir şarj kitleri, kılıf şeklinde bataryalar olsa da gerçekte sizi hep şarj noktasına mahkum etmekte. Batarya değişmemekte, ömrü biterse işte o zaman başlıyor hikaye.

7- Custom Rom seçenekleri
Android: Üreticinin güncellemelerini beklemeden, tercihlerime göre Custom Rom yükleyebilmek. Cihazın hakkını veren uygulamaları kullanabilmek.
iPhone: Eğer JailBreak (Custom Rom) yaparsanız garanti kapsamından çıkarılıyorsunuz. Cihaz modeli tek olsa da çok hızlı ve sürekli gelişmemekte. Custom Rom olmak da herşeyin çözümü olmuyor.

8- Flash destekli, V8 javascript motoruyla güçlendirilmiş tarayıcı
Android: Froyo (Android 2.2) sürümü ile birlikte hem tarayıcıdaki bariz hız artışı, hem de Adobe Flash 10.1 desteği ile kendi sitelerimi eksiksiz ve hızlı görebilmek. Android yapılan çoğu tarayıcı testini fark atarak kazanmıştır.
iPhone: Steve Jobs yaşadıkça Apple iOS olan cihazlarında Flash Player desteğini asla sunmayacak. Webkit kullanan Safari malesef Froyo ile gelen tarayıcıdan çok geride kalıyor. Üstelik flash eksikliği nedeniyle kendi sitemi bile göremiyorum. Ne yapayım ben öyle tarayıcıyı. :)

9- FM Radyo bulunabilirliği
Android: Radyo dinlemek için internet gerekmemesi. Çoğu Android destekli modelin içerisinde FM Radyo gelmektedir. 3.5 mm jack desteği varsa herhangi bir kulaklık bana yetmekte.
iPhone: FM Radyo dinlemek için sadece AppStore’da bulabileceğiniz internet radyosu uygulamaları var. İnsan radyo dinlemek için para vermemeli.

10- Çoklu bildirim özelliği
Android: Program yükleniyor, SMS geldi, Facebook’da arkadaş ekleme talebi geldi, Eposta geldi başta olmak üzere her türlü bildirime ekranın üstünden tutup çekerek açılan bir bölümden istediğiniz an ulaşabilmek. Gerektiğinde bu alandakilere tıklayıp detayını görebilmek, gerektiğinde tümünü silmek. Tüm bildirimler için ekranın üstünde programla ilgili ikon çıkması.
iPhone: Bildirimler ekrana popup şekline geliyor ve görüntülemek veya kapatmak dışında seçeneğiniz yok. Eğer bir süre telefondan uzaksanız ve ekran bildirimlerle dolmuşsa yandınız demektir. Bildirim alanı ayrı olmadığı için sonraya saklama şansınız yok. Veya hiç ummadığınız anda pat diye ekrana istenmeyen bir mesaj çıkabiliyorlar.

Aslında daha birçok madde var ancak benim öncelikli maddelerim bunlar. Evet iPhone bir çok yenilik getirmiştir, ancak kendini yenileme çalışmaları çok yavaş ilerlemekte. Kısıtlamalar ve fahiş fiyat politikası iPhone almamak için çok geçerli bir sebep oluyor. iPhone kötü demiyorum, iPhone Android’den geri bir sistemdir diyorum. :) Oyun oynamak için idealdir, ileride o özelliğini de kaptırabilir.  Uygulama marketinde sözde 230 bin uygulama vardır, ama Android Market’te zaten şimdiden 100 bini aşan uygulama var ve fark kapanıyor. Ancak siz kaç tane uygulama kullanmaktasınız, önemli olan budur. Ben şu an 220 uygulama kurdum ve ortalama 30 tanesini sürekli kullanıyorum (hatta aynı anda çalışabiliyorlar).

iPhone tarafında olan ama Android tarafında olmayan aklıma neredeyse hiç madde bile gelmezken, Android tarafında olan ama iPhone’da olmayan veya asla olmayacak bir çok şey söyleyebilirim.

Ayrıca her Android-iPhone karşılaştırmaya “Kapasitif ekran, MultiTouch var mı?” sorusu ile başlayanlara da o dediğiniz 3 sene önce geçerli bir üstünlüktü, artık neredeyse her cihaz Kapasitif ve Multitouch destekli diyorum. Yani kafanızı o ekrandan kaldırıp gerçek bir araştırma yapın. Google yakın gelecekte 1 milyar cihazda Android olacağını planlıyor. Bu cihazlar illa telefon olacak diye birşey yok. Android bir otomobilde navigasyon cihazı olarak karşınıza çıkabileceği gibi salonunuzdaki televizyonda da sizi karşılayabilir.

Unutmayın, birgün herkes Android destekli cihaz kullanacak.

Technologic’de yayınlanan Android konulu röportajım

Etiketlenen : , , ,

Melih Bayram Dede tarafından hazırlanan TVNet‘de yayınlanan Technologic programında 7 Ağustos 2010 da yayınlanan “Android” konulu röportajımı izleyebilirsiniz.

Her ne kadar atladığımız çok fazla şey olsa da umarım Android ile ilgili bilmek istediklerinize cevap verebilmişimdir. Emeği geçen herkese teşekkürler.

Direk Link: http://tvnet.tv.tr/?i=8890

Eve Hoşgeldin LG GT540 Optimus

Etiketlenen : , , , , , , , , , , , , ,

Takip edenlerin bildiği üzere bir süredir LG GT540 Optimus ile ilgili bir blogger yarışmasında ben de elimden geldiğince birşeyler yapmaya çalışıyordum. Gerçi yarışma olunca tempom biraz üst seviye olur diye uyarmıştım. Blogumun bulunduğu Linux sunucumun çökmesi, planladığım yazıları yazamamak ve üstüne 3 Temmuz yedekleri dışında tüm verilerimin kurtarılamaz şekilde kaybolması bile beni yıldıramadı.  Google search cache sayesinde topladığım kendi yazdığım yazılarımla tek tek özenerek yaptığım halen masaüstümde duran resimleri tekrar birleştirip Dreamhost üzerinde ödemesi yapılmış bir hesabımda hemen http://www.lg-gt540-optimus.com alan adını alıp, aktif ettim. Sonrada blogumu kurtarıp aynı yazıları bu bloguma tek tek girdim. Bunca emekten sonra derece yapamıyorsam, şansımla ilgili sorunlar var diyecektim. :) Ama herşey beklediğim gibi oldu ve yarışmayı 1. olarak bitirdim. Ödülün maddi değeri değil birinci olmanın verdiği keyfi yaşamak çok güzel. Telefonu biraz önce Root, Market ve Youtube operasyonundan geçirip hanıma hediye edilecek hale getirdim. :) Artık aramızda bir Android meraklısı daha katılıyor. Beni bu süreçte sabırla desteklediği için çok teşekkür ederim.

LG Türkiye, Excel İletişim Danışmanlığı ve beni canı gönülden alkışlayan tüm blogger arkadaşlarıma, puanlamada eli bol davranan tüm jüri üyelerine çok çok teşekkür ederim.

Ben seneler sonra bir haftalığına tatile çıkıyorum, döndüğümde LG GT540 Optimus ile ilgili planladığım yazılarıma ve daha fazlasına buradan ulaşabilirsiniz. İlginize teşekkürler.

LG GT540 Optimus ile 15 Gün

Etiketlenen : , , , , ,


LG GT540 Optimus ile 15 gün yaşadığım tüm deneyimler ve telefonu verimli kullanabilmek için yazdığım makalelere http://www.lg-gt540-optimus.com adresinden ulaşabilirsiniz.

Android Hakkında En Büyük Türkçe Kaynak bizimhost internet hizmetleri interaktif proje tek parola burçlar vijital