30 Mayıs 2014 Cuma

Android Push Notification Tutorial

Yav arkadaş bi push notification entegre etmek bu kadar zor olur mu ya. Google'ın dökümanlarını pek sevmedim o yüzden daha iyi bir tutorial arayışına girdim. Meret Android için iOS kadar basit değil. Bulabildiğim en iyi tutorial'ı sizinle paylaşıyorum. Başka tutorial'leri de takip etmeye çalıştım ama bu adım adım uygulamayı gösteriyor.
http://hmkcode.com/android-google-cloud-messaging-tutorial/

Ayrıca bu api'yi kullanmak için C# ile bir örnek WinForms uygulaması hazırladım. Umarım beğenirsiniz. Uygulamayla ilgili herhangi bir sorunuz için lütfen mail atın.
http://www.dogancoruh.com/files/GCMSender.zip

14 Mayıs 2014 Çarşamba

Android ve müşterinin cihazında hata düzeltme :)

Uygulamayı hazırladınız ama müşteri uzakta (mesela siz Ankara o İstanbul'da) ve müşteri bi noktadan sonra uygulamanın kapandığını söylüyor. ADB'ye cihazı bağlamanıza imkan yok çünkü müşteri kilometrelerce uzakta, e kargoyla da yollatamazsınız :) Napıcaksınız? Cevap basit: Müşteriye Log Collector kurduracaksınız :) Ben kendi kıçımı kurtarmak için MX Log Collector kullandım ama siz başka bir tanesini de Google Play'den indirtip kullanabilirsiniz. Yapmanız gereken log collector'ı kurdurup ardından uygulamayı bir kez daha göçertmesini sağlatmanız. Sonra da Log Collector yazılımıyla size mail atması.

Gelen veri şöyle birşey oluyor:

05-14 22:26:19.749   496   496 D SignalClusterView: wifi: VISIBLE sig=2130837743 act=2130837721
05-14 22:26:19.749   496   496 D SignalClusterView: mobile1: VISIBLE sig=2130837711 act=0 typ=2130837668
05-14 22:26:19.749   496   496 D SignalClusterView: mobile2: VISIBLE sig=0 act=0 typ=2130837668
05-14 22:26:19.749   496   496 D SignalClusterView: wifi: VISIBLE sig=2130837743 act=2130837721
05-14 22:26:19.749   496   496 D SignalClusterView: mobile1: VISIBLE sig=2130837711 act=0 typ=2130837668
05-14 22:26:19.749   496   496 D SignalClusterView: mobile2: VISIBLE sig=0 act=0 typ=2130837668
05-14 22:26:19.749   496   496 D StatusBar-NetworkControllerDS: changing data overlay icon id to 2130837721
05-14 22:26:19.769   366   436 D KeyguardViewMediator: setHidden false
05-14 22:26:19.789   366   436 D KeyguardViewMediator: setHidden false
05-14 22:26:19.799   366   436 D KeyguardViewMediator: setHidden false
05-14 22:26:19.819   366   436 D KeyguardViewMediator: setHidden false
05-14 22:26:19.839   366   436 D KeyguardViewMediator: setHidden false
05-14 22:26:19.849   366   436 D KeyguardViewMediator: setHidden false
05-14 22:26:19.859   366   383 I power   : *** release_dvfs_lock : lockType : 1
05-14 22:26:19.859   366   383 D PowerManagerService: releaseDVFSLockLocked : all DVFS_MIN_LIMIT are released
05-14 22:26:19.869   366   436 D KeyguardViewMediator: setHidden false
05-14 22:26:19.889   366   436 D KeyguardViewMediator: setHidden false
05-14 22:26:19.899   366   436 D KeyguardViewMediator: setHidden false
05-14 22:26:19.989   366  2158 D KeyguardViewMediator: setHidden false
05-14 22:26:20.019 13997 13997 D AndroidRuntime: Shutting down VM
05-14 22:26:20.019 13997 13997 W dalvikvm: threadid=1: thread exiting with uncaught exception (group=0x40c17a68)
05-14 22:26:20.059 13997 13997 E AndroidRuntime: FATAL EXCEPTION: main
05-14 22:26:20.059 13997 13997 E AndroidRuntime: java.lang.UnsupportedOperationException
05-14 22:26:20.059 13997 13997 E AndroidRuntime:     at android.view.GLES20Canvas.clipPath(GLES20Canvas.java:424)
05-14 22:26:20.059 13997 13997 E AndroidRuntime:     at com.trendin.trendin.controls.RoundedImageView.onDraw(RoundedImageView.java:43)
05-14 22:26:20.059 13997 13997 E AndroidRuntime:     at android.view.View.draw(View.java:11097)
05-14 22:26:20.059 13997 13997 E AndroidRuntime:     at android.view.View.getDisplayList(View.java:10536)
05-14 22:26:20.059 13997 13997 E AndroidRuntime:     at android.view.ViewGroup.drawChild(ViewGroup.java:2864)
05-14 22:26:20.059 13997 13997 E AndroidRuntime:     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2503)
05-14 22:26:20.059 13997 13997 E AndroidRuntime:     at android.view.View.getDisplayList(View.java:10534)
05-14 22:26:20.059 13997 13997 E AndroidRuntime:     at android.view.ViewGroup.drawChild(ViewGroup.java:2864)
05-14 22:26:20.059 13997 13997 E AndroidRuntime:     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2503)
05-14 22:26:20.059 13997 13997 E AndroidRuntime:     at android.view.View.getDisplayList(View.java:10534)
05-14 22:26:20.059 13997 13997 E AndroidRuntime:     at android.view.ViewGroup.drawChild(ViewGroup.java:2864)
05-14 22:26:20.059 13997 13997 E AndroidRuntime:     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2503)
05-14 22:26:20.059 13997 13997 E AndroidRuntime:     at android.view.View.getDisplayList(View.java:10534)

Bu verideki problemi kırmızıyla işaretledim. Müşterinin makinasında OpenGL grafik hızlandırıcı clipPath komutunu desteklemiyor. Bundan dolayı kendi yazdığım RoundedImageView bileşenimdeki canvas.clipPath işleminden önce setLayerType(LAYER_TYPE_SOFTWARE, null); yaptım. Bu işlemle çizdirme işlemleri Software olarak yapıldığı için tüm sorunlar bir anda yok oluverdi :) Umarım sizin de işinize yarar.

11 Mayıs 2014 Pazar

Zoom'lanabilir ImageView

Zoom'lanabilir bir ImageView ararken en sonunda bu koda karar kıldım. Layout'unuz içinde sadece ImageView tag'inizi com.dogancoruh.pinchimageview.PinchImageView ile değiştirin yeter. Örneğin bir namespace'i olmadığı için kendi namespace'imi verdim.

Klavye açık gelmesin

Activity ekrana geldiğinde eğer ilk kontrolünüz bir EditText ise otomatik edittext'e focus olunduğu için klavyenin otomatik açıldığını göreceksiniz. Kapatmak basit, AndroidManifest.xml dosyasında ilgili activity'nin xml nodunu bulun ve attribute olarak           android:windowSoftInputMode="stateHidden" ekleyin. Böylece ilk geldiğinde klavye açılmayacak ama EditText içine dokunursanız açılacaktır. :) Bu kadar.

1 Mayıs 2014 Perşembe

R resource dosyamda hata var ve derlemiyor

R dosyanız eğer oluşmuyorsa nedeni belkide uygun olmayan dosya isimleri olabilir. Özellikle iOS development yapıyorsanız ve benim gibi @2x suffix'li resim dosyalarını drawable-hdpi klasörüne kopyalayıp hızlı şekilde F2 ile isimlerini @2x olmaksızın versiyonlarına çevirirken bir tanesini unursanız eclipse garip ve aniden R resource dosyası sorunları vermeye başlıyor. O arada da kahve almaya gitmişseniz olayın neden kaynaklandığını anlamanız zaman alabilir :) Dosya isimlerine dikkat :)