Merhabalar,
Embarcaderonun sitesinde bulduğum birşeyi paylaşmak istiyorum ama ne kadar çalışabilirliği var test etmeden anlamak bi hayli zor. Elimde embarcaderonun desteklemediği cihaz olmadığından test edemedim demek daha doğru olacaktır.
Olay şu deployment kısmından aşağıdaki ayaların kliğini kaldırınca her cihazın uygulamayı açacağını belirtmekteler.
Local Name: libnative-activity.so
Remote Path: library\lib\armeabi\
Bu olayı deneyip sonucunu bu başlık altına yorum olarak yazarsanız çok müteşekkir olurum.
Orjinal konu: http://docwiki.embarcadero.com/RADStudio/XE7/en/Running_Your_Android_Application_on_an_Android_Device
Kişisel web adresimdeki bloğuma gelen saldırılar sebebi ile kapatmış bulunmaktayım. Oradaki bütün paylaşımlarımı bu bloğuma tek tek ekledim ve paylaşımlarıma kendi çapımda buradan devam ediyorum.. Takip edenlere teşekkürler bilgi paylaştıkça çoğalır..
26 Aralık 2014 Cuma
8 Aralık 2014 Pazartesi
Sms 160 karekter çözümü
Merhabalar,
Sizlere Ahmet Yilmaz isimli arkadaştan aldığım bir kodu paylaşmak istiyorum.
Sms ile uğraşan arkadaşların başına %90 gelmiştir bu olay 160 karakter sınırı şuana kadar kendim test edemedim ama sizler kullanabilirsiniz.
Sizlere Ahmet Yilmaz isimli arkadaştan aldığım bir kodu paylaşmak istiyorum.
Sms ile uğraşan arkadaşların başına %90 gelmiştir bu olay 160 karakter sınırı şuana kadar kendim test edemedim ama sizler kullanabilirsiniz.
Procedure Kisamesaj(Telefon,Mesajmetni:String); var smsManager: JSmsManager; smsTo: JString; Parts:JArrayList; begin smsManager:= TJSmsManager.JavaClass.getDefault; smsTo := StringToJString(Telefon); parts:= smsManager.divideMessage(StringToJString(Mesajmetni)); smsManager.sendMultipartTextMessage(smsTo,nil,Parts, nil, nil); End;
3 Aralık 2014 Çarşamba
Asus Zenfone 5
Merhabalar,
Biraz önceki bir testimde şans eseri "Asus Zenfone 5" (intel x86 işemci) isimli cihazda deneme yaptık ve delphi android uygulamamız sorunsuz çalıştı.
Cihazın özellikleride bana gayet başarılı geldi aşağıdaki linkten cihazın özelliklerini inceleyebilirsiniz.
http://www.gsmarena.com/asus_zenfone_5-5952.php
Biraz önceki bir testimde şans eseri "Asus Zenfone 5" (intel x86 işemci) isimli cihazda deneme yaptık ve delphi android uygulamamız sorunsuz çalıştı.
Cihazın özellikleride bana gayet başarılı geldi aşağıdaki linkten cihazın özelliklerini inceleyebilirsiniz.
http://www.gsmarena.com/asus_zenfone_5-5952.php
27 Kasım 2014 Perşembe
Delphi Android AdBuddiz reklam ağı kullanımı
Merhabalar,
Uzun bir aradan sonra çoğu kişinin bilmediği bir reklam ağının delphi android için uyarlamasını yapmıştım onu paylaşmak istiyorum. Aktif projem olmadığı için deneme fırsatı bulamadım, fakat AdBuddiz.com yetkilileri ile yaptığımız görüşmelerde eğer yanlış hatırlamıyorsam indirme başına bile para verdiklerini belirtmişlerdi.
Uzun lafı keselim uygulamaya geçelim.
Sizlerin uğraşmaması için Java2OP ile çevirdiğim sdknın pas dosyasını aşağıda link olarak paylaşacağım. Asıl gerekli olan "AdBuddiz-2.3.4.jar" dosyası bunun için;
https://publishers.adbuddiz.com/pub_portal/login?path=/pub_portal/apps
linkine üyelik açın ve giriş yapın. Giriş yapınca istediğiniz gibi dolaşabilirsiniz fakat ben işi kısa kesip asıl görmeniz gereken yerin linkini veriyorum açınız.
https://publishers.adbuddiz.com/pub_portal/support/java
"Download" butonondan gerekli .jar dosyasını indirin. İndirmiş olduğunuz resmi aşağıdaki resimde gördüğünüz "Libraries" bölümüne sağ tıklayarak ekleyiniz.
Artık kodlarımıza geçebiliriz. Formun var bloğuna 2 adet değişken tanımlayınız.
Bunlar:
Formun craete eventinden reklam ağımızın bilgilerini ayarlamalıyız.
Tanımlarımız bittiğine göre artık yapmamız gerek tek şey butondan reklam clasımızı çağırmak:
Button içerisine:
Artık formumuzla ilgili herşeyi bitirdiğimize göre son ayarlar olarak "AndroidManifest.template.xml" dosyasının izinlerini ve activity eklemelerini yapabiliriz.
AndroidManifest.template.xml açınız:
"<%uses-permission%>" olarak gördüğünüz yerin hemen altına aşağıdaki 3 izini ekleyin.
Not: Yukarıdaki "Publisher Key"i nasıl alacağınızı öğrenmek istiyorsanız https://publishers.adbuddiz.com/pub_portal/login?path=/pub_portal/apps adresini açın ve ekrandaki "Add app" butonuna basarak yeni bir apk için Publisher keyinizi alınız.
Aşağıdaki resimde butona basıldığında çıkan AdBuddiz'in test reklamıdır.
Uzun bir aradan sonra çoğu kişinin bilmediği bir reklam ağının delphi android için uyarlamasını yapmıştım onu paylaşmak istiyorum. Aktif projem olmadığı için deneme fırsatı bulamadım, fakat AdBuddiz.com yetkilileri ile yaptığımız görüşmelerde eğer yanlış hatırlamıyorsam indirme başına bile para verdiklerini belirtmişlerdi.
Uzun lafı keselim uygulamaya geçelim.
Sizlerin uğraşmaması için Java2OP ile çevirdiğim sdknın pas dosyasını aşağıda link olarak paylaşacağım. Asıl gerekli olan "AdBuddiz-2.3.4.jar" dosyası bunun için;
https://publishers.adbuddiz.com/pub_portal/login?path=/pub_portal/apps
linkine üyelik açın ve giriş yapın. Giriş yapınca istediğiniz gibi dolaşabilirsiniz fakat ben işi kısa kesip asıl görmeniz gereken yerin linkini veriyorum açınız.
https://publishers.adbuddiz.com/pub_portal/support/java
"Download" butonondan gerekli .jar dosyasını indirin. İndirmiş olduğunuz resmi aşağıdaki resimde gördüğünüz "Libraries" bölümüne sağ tıklayarak ekleyiniz.
Sıradaki işlem "AdBuddiz-2.3.4.jar" dosyasının .pas dosyasına çevrilmiş halini indirmek ve projeye eklemek.
AdBuddizApi.pas : https://www.mediafire.com/?emd568wz8asrtvg
Bunlar:
var AdBuddiz: TJAdBuddiz; AdBuddizLogLevel: TJAdBuddizLogLevel;
Formun craete eventinden reklam ağımızın bilgilerini ayarlamalıyız.
begin AdBuddiz.JavaClass.setLogLevel(AdBuddizLogLevel.JavaClass.Info); AdBuddiz.JavaClass.setPublisherKey(StringToJString('Buraya Publisher Key')); AdBuddiz.JavaClass.setTestModeActive; AdBuddiz.JavaClass.cacheAds(SharedActivity); end;
Tanımlarımız bittiğine göre artık yapmamız gerek tek şey butondan reklam clasımızı çağırmak:
Button içerisine:
AdBuddiz.JavaClass.showAd(SharedActivity);
Artık formumuzla ilgili herşeyi bitirdiğimize göre son ayarlar olarak "AndroidManifest.template.xml" dosyasının izinlerini ve activity eklemelerini yapabiliriz.
AndroidManifest.template.xml açınız:
"<%uses-permission%>" olarak gördüğünüz yerin hemen altına aşağıdaki 3 izini ekleyin.
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />bunları ekledikten sonra aşağıda "</activity>" olan yerin hemen altına aşağıdaki activity'i ekleyin.
<activity android:name="com.purplebrain.adbuddiz.sdk.AdBuddizActivity" android:theme="@android:style/Theme.Translucent" />İşlemlerimiz bu kadardır.
Not: Yukarıdaki "Publisher Key"i nasıl alacağınızı öğrenmek istiyorsanız https://publishers.adbuddiz.com/pub_portal/login?path=/pub_portal/apps adresini açın ve ekrandaki "Add app" butonuna basarak yeni bir apk için Publisher keyinizi alınız.
Aşağıdaki resimde butona basıldığında çıkan AdBuddiz'in test reklamıdır.
Etiketler:
AdBuddiz delphi,
Adbuddiz sdk,
Barış atalay,
Delphi,
delphi android,
delphi IOS,
FireMonkey,
kodbank,
Mobil Uygulama,
XE7,
XE7 Admob,
XE7 Google Admob,
XE7 Google Reklam
28 Ekim 2014 Salı
Delphi Android JSON Helper Component
Merhabalar,
Kişisel hazırladığım bir projede kullanmak için geliştirdiğim bir componenttir.
Yapısı delphinin Query yapısına benzemektedir.
"while,EOF,BOF,NEXT,FieldbyName" gibi özellikleri kullanabilirsiniz.
Ek olarak Sort özelliği ile JSON verisindeki fieldlere göre sıralamaları düzenleyebilirsiniz.
Örnek JSON dosyasının linki: http://mangakafe.com/json.txt
Linkteki yapıyı inceleyince fark edeceksiniz ki yapı JSON Array olmalıdır.
Kullanımı:
1-) JSONHelper1.JSON : Hem websitesindeki json linkini hemde JSON text dosyasını kullanabilirsiniz.
2-) JSONHelper1.Active: True seçeneği seçildiği zaman "Sort able Field" bölümü aktif olur ve JSON verinizi gerçek bir query gibi kullanabilirsiniz.
3-) JSONHelper1.SaveFile: JSON veriyi istenilen bir dizine kayıt etmek için kullanılır.
4-) JSONHelper1.GetJson: JSON veriyi istenildiği anda bir değişkene tanımlamak için kullanılır.
5-) JSONHelper1.FromFile: JSON veriyi kayıt edildiği yerden okumak için kullanılır.
6-) TimeOut : Bağlantı zaman aşımı süresidir ve milisaniye cinsindedir. 5000 ms = 5 Saniye.
Etiketler:
android json,
Barış atalay,
component,
delphi android,
delphi android json helper,
Delphi XE5 - XE6 - XE7,
JSON,
JSON Helper,
RAD Studio XE7,
x-superobject,
XE7,
xsuperobject
22 Ekim 2014 Çarşamba
Delphi Android Broadcast Receiver ile Bluetooth Kontrol
Merhabalar,
Bu yazımda daha önceden paylaşmış olduğum Broadcast Receiver Componenti ile birlikte Bluetooth kontrolünü nasıl yapabileceğinizden bahsedicem.
Şimdi projenize bahsetmiş olduğum Broadcast Receiver Componenti ekleyin kullanımını kendi başlığında öğrenebilirsiniz ek olarak dinlenmesini istediğimiz yayını ekleyeceğiz.
Bu sayede bluetooth yayınında bir değişiklik olursa projemize bunu yakalaması için talimat verdik fakat eksik birşey kaldı oda uygulamada "Bluetooth" iznini true yapmak.
Son olarak "OnReceive" eventine aşağıdaki kodları ekleyiniz.
Bu yazımda daha önceden paylaşmış olduğum Broadcast Receiver Componenti ile birlikte Bluetooth kontrolünü nasıl yapabileceğinizden bahsedicem.
Şimdi projenize bahsetmiş olduğum Broadcast Receiver Componenti ekleyin kullanımını kendi başlığında öğrenebilirsiniz ek olarak dinlenmesini istediğimiz yayını ekleyeceğiz.
BroadcastReceiver1.Add('android.bluetooth.adapter.action.STATE_CHANGED');
Bu sayede bluetooth yayınında bir değişiklik olursa projemize bunu yakalaması için talimat verdik fakat eksik birşey kaldı oda uygulamada "Bluetooth" iznini true yapmak.
Son olarak "OnReceive" eventine aşağıdaki kodları ekleyiniz.
case Intent.getIntExtra(StringToJString('android.bluetooth.adapter.extra.STATE'),-1) of 10://STATE_OFF begin ShowMessage('Bluetooth kapalı.',TToastLength.ShortToast); end; 11://STATE_TURNING_ON begin ShowMessage('Bluetooth açılıyor.',TToastLength.ShortToast); end; 12://STATE_ON begin ShowMessage('Bluetooth açık.',TToastLength.ShortToast); end; 13://STATE_TURNING_OFF begin ShowMessage('Bluetooth kapanıyor.',TToastLength.ShortToast); end; end;
Etiketler:
android internet,
android internet bağlantısı,
Barış atalay,
Bluetooth Kontrol,
Delphi,
delphi android,
delphi broadcast receiver,
Delphi XE5 - XE6 - XE7,
internet connection,
RAD Studio XE7,
XE7
Delphi Android Broadcast Receiver ile internet Kontrol
Merhabalar,
Bu yazımda daha önceden paylaşmış olduğum Broadcast Receiver Componenti ile birlikte internet kontrolünü nasıl yapabileceğinizden bahsedicem.
Neden böyle birşeye ihtiyacımız olabilir diye soran olursa, İnternet üzerinden işlem yapan bir uygulama yaptığınızı düşünün tam servere istek gönderilmeden önce internet gitme ihtimali olma şansı çok büyük
böyle bir durumda uygulama içerisinde önlem almak isteyebilirsiniz.
Başka bir ihtimal düşünelim dosya indirme hakkında bir uygulama yaptınız fakat sadece wifi aktifken indirme özelliği eklemek istiyorsunuz bunun gibi network olaylarını dinlemeniz gerekebilir.
Lafı fazla uzatmadan gerekli pas dosyasını en alta linkini ve direk kod olarak veriyorum onu indirin ve projenize dahil edin.
Şimdi projenize bahsetmiş olduğum Broadcast Receiver Componenti ekleyin kullanımını kendi başlığında öğrenebilirsiniz ek olarak dinlenmesini istediğimiz yayını ekleyeceğiz.
bu sayede network yayınında bir değişiklik olursa projemize bunu yakalaması için talimat verdik fakat eksik birşey kaldı oda uygulamada "Access network state" iznini true yapmak.
Uses bloğuna "NetworkState.Android" pas dosyamızı tanımlıyoruz.
Son olarak "OnReceive" eventine aşağıdaki kodları ekleyiniz.
NetworkState.Android.pas indirme Linki: https://www.mediafire.com/?3gxl3zdvmtquflu
Bu yazımda daha önceden paylaşmış olduğum Broadcast Receiver Componenti ile birlikte internet kontrolünü nasıl yapabileceğinizden bahsedicem.
Neden böyle birşeye ihtiyacımız olabilir diye soran olursa, İnternet üzerinden işlem yapan bir uygulama yaptığınızı düşünün tam servere istek gönderilmeden önce internet gitme ihtimali olma şansı çok büyük
böyle bir durumda uygulama içerisinde önlem almak isteyebilirsiniz.
Başka bir ihtimal düşünelim dosya indirme hakkında bir uygulama yaptınız fakat sadece wifi aktifken indirme özelliği eklemek istiyorsunuz bunun gibi network olaylarını dinlemeniz gerekebilir.
Lafı fazla uzatmadan gerekli pas dosyasını en alta linkini ve direk kod olarak veriyorum onu indirin ve projenize dahil edin.
Şimdi projenize bahsetmiş olduğum Broadcast Receiver Componenti ekleyin kullanımını kendi başlığında öğrenebilirsiniz ek olarak dinlenmesini istediğimiz yayını ekleyeceğiz.
BroadcastReceiver1.Add('android.net.conn.CONNECTIVITY_CHANGE');
bu sayede network yayınında bir değişiklik olursa projemize bunu yakalaması için talimat verdik fakat eksik birşey kaldı oda uygulamada "Access network state" iznini true yapmak.
Uses bloğuna "NetworkState.Android" pas dosyamızı tanımlıyoruz.
Son olarak "OnReceive" eventine aşağıdaki kodları ekleyiniz.
var NetworkInfo: TNetworkState; begin if NetworkInfo.GetState = TState.Wifi then ShowMessage('Wifi aktif') else if NetworkInfo.GetState = TState.Mobile then ShowMessage('3G aktif') else if NetworkInfo.GetState = TState.NotConnect then ShowMessage('İnternet Yok')
NetworkState.Android.pas indirme Linki: https://www.mediafire.com/?3gxl3zdvmtquflu
unit NetworkState.Android; interface {$IFDEF ANDROID} type TState = (Wifi,Mobile,NotConnect); TNetworkState = class private function IsConnected: Boolean; function IsWifiConnected: Boolean; function IsMobileConnected: Boolean; public function GetState: TState; end; {$ENDIF} implementation {$IFDEF ANDROID} uses System.SysUtils, Androidapi.JNIBridge, Androidapi.JNI.GraphicsContentViewText, Androidapi.JNI.JavaTypes, FMX.Helpers.Android, AndroidApi.Helpers; type JConnectivityManager = interface; JNetworkInfo = interface; JNetworkInfoClass = interface(JObjectClass) ['{E92E86E8-0BDE-4D5F-B44E-3148BD63A14C}'] end; [JavaSignature('android/net/NetworkInfo')] JNetworkInfo = interface(JObject) ['{6DF61A40-8D17-4E51-8EF2-32CDC81AC372}'] {Methods} function isAvailable: Boolean; cdecl; function isConnected: Boolean; cdecl; function isConnectedOrConnecting: Boolean; cdecl; end; TJNetworkInfo = class(TJavaGenericImport) end; JConnectivityManagerClass = interface(JObjectClass) ['{E03A261F-59A4-4236-8CDF-0068FC6C5FA1}'] {Property methods} function _GetTYPE_WIFI: Integer; cdecl; function _GetTYPE_WIMAX: Integer; cdecl; function _GetTYPE_MOBILE: Integer; cdecl; {Properties} property TYPE_WIFI: Integer read _GetTYPE_WIFI; property TYPE_WIMAX: Integer read _GetTYPE_WIMAX; property TYPE_MOBILE: Integer read _GetTYPE_MOBILE; end; [JavaSignature('android/net/ConnectivityManager')] JConnectivityManager = interface(JObject) ['{1C4C1873-65AE-4722-8EEF-36BBF423C9C5}'] {Methods} function getActiveNetworkInfo: JNetworkInfo; cdecl; function getNetworkInfo(networkType: Integer): JNetworkInfo; cdecl; end; TJConnectivityManager = class(TJavaGenericImport ) end; JWifiManager = interface; JWifiInfo = interface; JWifiManagerClass = interface(JObjectClass) ['{69F35EA7-3EB9-48AA-B7FC-4FFD0E7D712F}'] function _GetACTION_PICK_WIFI_NETWORK: JString; function _GetEXTRA_WIFI_INFO: JString; function _GetWIFI_STATE_CHANGED_ACTION: JString; property ACTION_PICK_WIFI_NETWORK: JString read _GetACTION_PICK_WIFI_NETWORK; property EXTRA_WIFI_INFO: JString read _GetEXTRA_WIFI_INFO; property WIFI_STATE_CHANGED_ACTION: JString read _GetWIFI_STATE_CHANGED_ACTION; end; [JavaSignature('android/net/wifi/WifiManager')] JWifiManager = interface(JObject) ['{DA7107B9-1FAD-4A9E-AA09-8D5B84614E60}'] function isWifiEnabled: Boolean; cdecl; function setWifiEnabled(enabled: Boolean):Boolean; cdecl; //function getConfiguredNetworks : JList;cdecl; function getConnectionInfo: JWifiInfo; cdecl; end; TJWifiManager = class(TJavaGenericImport ) end; JWifiInfoClass = interface(JObjectClass) ['{2B1CE79F-DE4A-40D9-BB2E-7F9F118D8C08}'] function _GetLINK_SPEED_UNITS:JString; property LINK_SPEED_UNITS: JString read _GetLINK_SPEED_UNITS; end; [JavaSignature('android/net/wifi/WifiInfo')] JWifiInfo = interface(JObject) ['{4F09E865-DB04-4E64-8C81-AEFB36DABC45}'] function getBSSID: JString; cdecl; function getHiddenSSID: Boolean; cdecl; function getIpAddress: integer; cdecl; function getLinkSpeed: integer; cdecl; function getMacAddress: JString; cdecl; function getNetworkId: integer; cdecl; function getRssi: integer; cdecl; function getSSID: JString; cdecl; end; TJWifiInfo= class(TJavaGenericImport ) end; function GetWifiManager: JWifiManager; var WifiManagerNative: JObject; begin WifiManagerNative := SharedActivityContext.getSystemService(TJContext.JavaClass.WIFI_SERVICE); if not Assigned(WifiManagerNative) then raise Exception.Create('Could not locate Wifi Service'); Result := TJWifiManager.Wrap((WifiManagerNative as ILocalObject).GetObjectID); if not Assigned(Result) then raise Exception.Create('Could not access Wifi Manager'); end; function GetConnectivityManager: JConnectivityManager; var ConnectivityServiceNative: JObject; begin ConnectivityServiceNative := SharedActivityContext.getSystemService(TJContext.JavaClass.CONNECTIVITY_SERVICE); if not Assigned(ConnectivityServiceNative) then raise Exception.Create('Could not locate Connectivity Service'); Result := TJConnectivityManager.Wrap((ConnectivityServiceNative as ILocalObject).GetObjectID); if not Assigned(Result) then raise Exception.Create('Could not access Connectivity Manager'); end; { TPlatformNetworkState } function TNetworkState.IsConnected: Boolean; var ConnectivityManager: JConnectivityManager; ActiveNetwork: JNetworkInfo; begin ConnectivityManager := GetConnectivityManager; ActiveNetwork := ConnectivityManager.getActiveNetworkInfo; Result := Assigned(ActiveNetwork) and ActiveNetwork.isConnected; end; function TNetworkState.IsMobileConnected: Boolean; var ConnectivityManager: JConnectivityManager; MobileNetwork: JNetworkInfo; begin ConnectivityManager := GetConnectivityManager; MobileNetwork := ConnectivityManager.getNetworkInfo(TJConnectivityManager.JavaClass.TYPE_MOBILE); Result := MobileNetwork.isConnected; end; function TNetworkState.IsWifiConnected: Boolean; var ConnectivityManager: JConnectivityManager; WiFiNetwork: JNetworkInfo; begin ConnectivityManager := GetConnectivityManager; WiFiNetwork := ConnectivityManager.getNetworkInfo(TJConnectivityManager.JavaClass.TYPE_WIFI); Result := WiFiNetwork.isConnected; end; function TNetworkState.GetState: TState; begin if not IsConnected then Result := NotConnect else if IsMobileConnected then Result := Mobile else if IsWifiConnected then Result := Wifi end; {$ENDIF} end.
Etiketler:
android internet,
android internet bağlantısı,
Barış atalay,
Delphi,
delphi android,
delphi broadcast receiver,
Delphi XE5 - XE6 - XE7,
internet connection,
RAD Studio XE7,
XE7
20 Ekim 2014 Pazartesi
Delphi Android Broadcast Receiver Component
Merhabalar,
Bu component yardımı ile telefonunuzdaki yayınları yakalayabileceksiniz.
Not: Classes.dex ile ilgili hiçbir ayar yapmanıza gerek yoktur, standart bir component kurulumu ile aynı işlemleri yapmanız yeterlidir.
Proje XE6 ve XE7 üzerinde test edilmiştir.
Proje dosyaların içerisinde sizler için bir örnek hazırladım bu örnek sayesinde gelen çağıyı yapan numarayı yakalayabiliyorsunuz.
Nedir bu yayın türü sorular için: http://developer.android.com/reference/android/content/BroadcastReceiver.html
Kullanımı:
1-) BroadcastReceiver1.RegisterReceive : Yayın alıcıları açar ve dinleme işlemini başlatır.
2-) BroadcastReceiver1.Add(''): Dinlenmesini istediğiniz intentleri bu şekilde ekleyiniz.
3-) BroadcastReceiver1.SendBroadcast(''): Manuel olarak bir yayın göndermek isterseniz buraya yazınız.
4-) "OnReceive" Event.Yayın dinlediğiniz yayınlarda herhangi bir hareketlenme olursa bu event tetiklenir ve içerisindeki kodları çalıştırır.
Not: On KitKat only system services are allowed to send broadcast
Sorularınız ve önerileriniz çerçevesinde geliştirilmesi yapılabilecek güzel bir componenttir.
Bu component yardımı ile telefonunuzdaki yayınları yakalayabileceksiniz.
Not: Classes.dex ile ilgili hiçbir ayar yapmanıza gerek yoktur, standart bir component kurulumu ile aynı işlemleri yapmanız yeterlidir.
Proje XE6 ve XE7 üzerinde test edilmiştir.
Proje dosyaların içerisinde sizler için bir örnek hazırladım bu örnek sayesinde gelen çağıyı yapan numarayı yakalayabiliyorsunuz.
Nedir bu yayın türü sorular için: http://developer.android.com/reference/android/content/BroadcastReceiver.html
Kullanımı:
1-) BroadcastReceiver1.RegisterReceive : Yayın alıcıları açar ve dinleme işlemini başlatır.
2-) BroadcastReceiver1.Add(''): Dinlenmesini istediğiniz intentleri bu şekilde ekleyiniz.
3-) BroadcastReceiver1.SendBroadcast(''): Manuel olarak bir yayın göndermek isterseniz buraya yazınız.
4-) "OnReceive" Event.Yayın dinlediğiniz yayınlarda herhangi bir hareketlenme olursa bu event tetiklenir ve içerisindeki kodları çalıştırır.
Not: On KitKat only system services are allowed to send broadcast
Sorularınız ve önerileriniz çerçevesinde geliştirilmesi yapılabilecek güzel bir componenttir.
Etiketler:
Barış atalay,
Delphi,
delphi android,
delphi background service,
delphi broadcast receiver,
delphi dynamic broadcast receiver,
Delphi XE5 - XE6 - XE7,
RAD Studio XE7,
XE7
13 Ekim 2014 Pazartesi
Wifi Üzerinden DEBUG
Merhabalar,
Konu anlatımı tamamen cyber-warrior formundan "tavşanlılı" arkadaşıma aittir.
WiFi üzerinden debug işlemini basitçe anlatmaya çalıştım.
Telefonunuza WiFi ADB yazılımını kurun.Zaten tek buton var.
Aktif ettiğinizde wifi üzerinden bağlantı kuruyorsunuz telefonun ip adresine.
Delphi üzerinden de bu cihaz yada cihazlar hedef aygıt listesine otomatik olarak geliyor.
PlatformSDK klasörünüz neredeyse o dizinde ilgili komutları çalıştırıp işlemi tamamlayabilirsiniz.
Örnek yol: C:\Users\Public\Documents\Embarcadero\Studio\14.0\PlatformSDKs\adt-bundle-windows-x86-20131030\sdk\platform-tools
Gerisi resimlerde.
Konu anlatımı tamamen cyber-warrior formundan "tavşanlılı" arkadaşıma aittir.
WiFi üzerinden debug işlemini basitçe anlatmaya çalıştım.
Telefonunuza WiFi ADB yazılımını kurun.Zaten tek buton var.
Aktif ettiğinizde wifi üzerinden bağlantı kuruyorsunuz telefonun ip adresine.
Delphi üzerinden de bu cihaz yada cihazlar hedef aygıt listesine otomatik olarak geliyor.
PlatformSDK klasörünüz neredeyse o dizinde ilgili komutları çalıştırıp işlemi tamamlayabilirsiniz.
Örnek yol: C:\Users\Public\Documents\Embarcadero\Studio\14.0\PlatformSDKs\adt-bundle-windows-x86-20131030\sdk\platform-tools
Gerisi resimlerde.
İşi biraz daha abartıp modemden port yönlendirip işyerinden de uygulama test ettim sıkıntısız çalıştı.
İnternet bağlantı hızınıza göre gecikmeler olabiliyor.
Hepinize kolay gelsin.
Delphi Mobile Youtube Component
Merhabalar,
Projelerinde Youtube hesaplarındaki videoları paylaşmak isteyen arkadaşlarımız olabilir.
Onlar için küçük bir component hazırladım.
TMS bu componenti ve bir çoğunu para ile pazarladığı için kendi projelerimde ihtiyaç durumunda hazırlayıp paylaşımlarda bulunmayı düşünüyorum.
Componentin yapısı:
YouTubeId kısmına youtube videosunun id kısmını yani eşittir(=)'den sonrasını oraya
yazdığınızda ve GetDesign seçeneği "True" ise aşağıda göreceğiniz gibi otomatik olarak video bilgilerini görebilirsiniz.
XE6 ile test edilmiştir.
2-) Youtube1.Download: Öncelikle "Youtube1.DownloadFolder" ile indireceğiniz yeri belirtmelisiniz. Sonrasında videonun indirilebilir çözünürlüklerini seçenek olarak gösterir ve seçimden sonra indirme işlemi başlar.
"OnDownload" eventi içerisinde indirilen videonun yüzdesini ve o an indirilen dosya boyutunu görebilirsiniz.
Projelerinde Youtube hesaplarındaki videoları paylaşmak isteyen arkadaşlarımız olabilir.
Onlar için küçük bir component hazırladım.
TMS bu componenti ve bir çoğunu para ile pazarladığı için kendi projelerimde ihtiyaç durumunda hazırlayıp paylaşımlarda bulunmayı düşünüyorum.
Componentin yapısı:
YouTubeId kısmına youtube videosunun id kısmını yani eşittir(=)'den sonrasını oraya
yazdığınızda ve GetDesign seçeneği "True" ise aşağıda göreceğiniz gibi otomatik olarak video bilgilerini görebilirsiniz.
XE6 ile test edilmiştir.
Not : Örnekler proje dosyasının içerisindedir:
Kullanımı:
1-) Youtube1.Play : Öncelikle videonun oynatılabilir çözünürlüklerini seçenek olarak gösterir.
Sonrasında youtube videosunu cihazınıza oynatılabilir video olarak yayın yapar ve açılan seçeneklerde videoyu oynatabilecek uygulamaları görebilirsiniz.
Örnek:
2-) Youtube1.Download: Öncelikle "Youtube1.DownloadFolder" ile indireceğiniz yeri belirtmelisiniz. Sonrasında videonun indirilebilir çözünürlüklerini seçenek olarak gösterir ve seçimden sonra indirme işlemi başlar.
"OnDownload" eventi içerisinde indirilen videonun yüzdesini ve o an indirilen dosya boyutunu görebilirsiniz.
11 Ekim 2014 Cumartesi
Office 2013 Crack
Merhabalar,
Bazı arkadaşların işine yarayabileceği kanısındayım. Sizde bilirsiniz ki Türk halkı kolay kolay lisanslı ürün kullanmaz gerek maaş ortalamasından dolayı gerekse başka sebebler.
Kurulumdan sonra yüklenen exeyi açtığınıda üsteki resimdeki gelecektir soldaki Kırmızı butonlu resime basarsanız crack işlemi gerçekleşir.
İndirme Linki[23/10/2014]: https://www.mediafire.com/?k2q5p0afctd95od
Saygılar :)
Bazı arkadaşların işine yarayabileceği kanısındayım. Sizde bilirsiniz ki Türk halkı kolay kolay lisanslı ürün kullanmaz gerek maaş ortalamasından dolayı gerekse başka sebebler.
Kurulumdan sonra yüklenen exeyi açtığınıda üsteki resimdeki gelecektir soldaki Kırmızı butonlu resime basarsanız crack işlemi gerçekleşir.
İndirme Linki[23/10/2014]: https://www.mediafire.com/?k2q5p0afctd95od
Saygılar :)
8 Ekim 2014 Çarşamba
Delphi Android Dinamik Broadcast Receiver Oluşturma Kaynak Kodları
Merhabalar,
Component hali için aşağıdaki linki ziyaret edin.
http://brsatalay.blogspot.com.tr/2014/10/delphi-android-broadcast-receiver.html
http://brsatalay.blogspot.com.tr/2014/10/delphi-android-dinamik-broadcast.html
Linkinde hazırladığım yazının kaynak kodlarını bu başlık altında paylaşıyorum.
Kaynak kodları paylaşmayı pek sevmesemde, bu konudaki kodların paylaşılması taraftarıyım.
İndirme Linki[08/10/2014]: http://s3.dosya.tc/server28/AvCpPt/DinamicBradcastReceiver.rar.html
Component hali için aşağıdaki linki ziyaret edin.
http://brsatalay.blogspot.com.tr/2014/10/delphi-android-broadcast-receiver.html
http://brsatalay.blogspot.com.tr/2014/10/delphi-android-dinamik-broadcast.html
Linkinde hazırladığım yazının kaynak kodlarını bu başlık altında paylaşıyorum.
Kaynak kodları paylaşmayı pek sevmesemde, bu konudaki kodların paylaşılması taraftarıyım.
İndirme Linki[08/10/2014]: http://s3.dosya.tc/server28/AvCpPt/DinamicBradcastReceiver.rar.html
3 Ekim 2014 Cuma
Delphi Android Dinamik Broadcast Receiver oluşturma ve Servis kullanımı
Merhabalar,
Component hali için aşağıdaki linki ziyaret edin.
http://brsatalay.blogspot.com.tr/2014/10/delphi-android-broadcast-receiver.html
Öncelikle şimdiden iyi bayramlar dilerim herkese :)
Bu yazımda android dünyasından yine bişiler kurcalarken, benim pek işime yarıyacak yer bulamadım ama bir dostun işine yarayabileceği birşeyi paylaşmak isterim.
Nedir bu Broadcast Receiver Buraya Tıklayınız!
İnsan bu konunun devamını okuyorsa ve kullanmak istiyorsa yeteri kadar bilgisi ve fikrinin olduğunu varsayarak devam ediyorum.
Bu örnek projede kendimiz uygulama içerisinden bir yayın yapacağız ve bu yaptığımız yayını aynı uygulama içerisinde yakalayacağız.
Projeyi XE6 üzerinde yapmış bulunmaktayım.
Hali hazırda http://brsatalay.blogspot.com.tr/2014/08/delphi-android-foreground.html linkindeki anlattığım olayları yapmışsanız classes.dex dosyası aynı dosyadır.
Aşağıdaki linklerden eksik olan dosyalarını tedarik edebilirsiniz
Toast.pas ve ActivityReceiverU.pas : http://s3.dosya.tc/server28/JRMhZO/Units.rar.html
Gerekli java dosyaları :http://s3.dosya.tc/server28/cBusGJ/java.rar.html
Projemize java dosyası içerisindeki output klasöründeki classes.dex dosyasını deploy ediyoruz.
Deploy işlemi hakkında bilgisi olmayanlar linki incelesinler: http://brsatalay.blogspot.com.tr/2014/08/delphi-classesdex-deploy.html
Sabit değişken olarak yayınlayacağımız bazı Yayın kodlarını ekleyelim
Eksik kütüphaneleri uses bloğuna ekleyin.
Formun OnKeyUp eventine aşağıdaki kodu yazarak geri tusuna basıldığında uygulamamızı arka planda calısması için ayarlayalım
Formun var bloğuna aşağıdaki değişkenleri ekleyiniz.
Formumuzun private tanım alanına aşağıdaki değişkenleri ekleyin.
"ApplicationEventHandler" proceduresinin içerisi aynı aşağıdaki gibi olmalıdır.
Formun onCreate eventine aşağıdaki kodları yazınız.
Şimdid gelelim "ApplicationEventHandler" proceduresinin içerisindeki 2 olaya. BecameActive devreye girdiğinde yani uygulamamız Active olduğu anda ReceiverAta proceduresi calısacak ki buda yayın alıcıları aktif yaparak cihazdaki o an yayınlanan şeyleri dinlemek için.
WillTerminate ise tersi durumda yayın dinleyicileri kaldırmak için.
Formun onDestroy eventine program sonlandırıldıgında yaratılan nesneyi serbest bırakmak için gerekli kodu yazalım. Android ortamda otomatik serbest bırakıldıgını varsayıyorum ama ne olur ne olmaz işi şansa bırakmamak gerek.
Ve şimdi sıra geldi son işlemimize bunun için Forma 1 tane buton yerleştirin ve içerisine aşağıdaki kodları ekleyiniz. Aşağıdaki kodlarda göreceğiniz üzere Const olarak tanımladığımız PERMISSION değişkenini yayına gönderdik ve butona bastığımızda en üsteki gibi yakalanan yayın toast olarak gösterilecektir.
Component hali için aşağıdaki linki ziyaret edin.
http://brsatalay.blogspot.com.tr/2014/10/delphi-android-broadcast-receiver.html
Öncelikle şimdiden iyi bayramlar dilerim herkese :)
Bu yazımda android dünyasından yine bişiler kurcalarken, benim pek işime yarıyacak yer bulamadım ama bir dostun işine yarayabileceği birşeyi paylaşmak isterim.
Nedir bu Broadcast Receiver Buraya Tıklayınız!
İnsan bu konunun devamını okuyorsa ve kullanmak istiyorsa yeteri kadar bilgisi ve fikrinin olduğunu varsayarak devam ediyorum.
Bu örnek projede kendimiz uygulama içerisinden bir yayın yapacağız ve bu yaptığımız yayını aynı uygulama içerisinde yakalayacağız.
Projeyi XE6 üzerinde yapmış bulunmaktayım.
Hali hazırda http://brsatalay.blogspot.com.tr/2014/08/delphi-android-foreground.html linkindeki anlattığım olayları yapmışsanız classes.dex dosyası aynı dosyadır.
Aşağıdaki linklerden eksik olan dosyalarını tedarik edebilirsiniz
Toast.pas ve ActivityReceiverU.pas : http://s3.dosya.tc/server28/JRMhZO/Units.rar.html
Gerekli java dosyaları :http://s3.dosya.tc/server28/cBusGJ/java.rar.html
Projemize java dosyası içerisindeki output klasöründeki classes.dex dosyasını deploy ediyoruz.
Deploy işlemi hakkında bilgisi olmayanlar linki incelesinler: http://brsatalay.blogspot.com.tr/2014/08/delphi-classesdex-deploy.html
Sabit değişken olarak yayınlayacağımız bazı Yayın kodlarını ekleyelim
Const (* EXAMPLES *) PERMISSION = 'com.DynamicBroadcastReceiver.intent.action.deneme'; //Manuel BATTERY = 'android.intent.action.BATTERY_CHANGED'; INTERNET = 'WIFI_STATE_CHANGED_ACTION'; CALL = 'android.intent.action.PHONE_STATE'; //Gelen aramalar için
Eksik kütüphaneleri uses bloğuna ekleyin.
Androidapi.JNI.GraphicsContentViewText, FMX.Helpers.Android ,AndroidApi.Helpers ,FMX.Platform.Android ,FMX.Platform
,ToastAndroid
,ActivityReceiverU
Formun OnKeyUp eventine aşağıdaki kodu yazarak geri tusuna basıldığında uygulamamızı arka planda calısması için ayarlayalım
if Key = vkHardwareBack then begin Key := 0; MainActivity.moveTaskToBack(True); Toast('Arka plan',TToastLength.ShortToast); end;
Formun var bloğuna aşağıdaki değişkenleri ekleyiniz.
ServiceReceiver: TJBroadcastReceiver; FReceiver: JBroadcastReceiver;
Formumuzun private tanım alanına aşağıdaki değişkenleri ekleyin.
AppEvents: IFMXApplicationEventService; function ApplicationEventHandler(AAppEvent: TApplicationEvent;AContext: TObject): Boolean;
"ApplicationEventHandler" proceduresinin içerisi aynı aşağıdaki gibi olmalıdır.
case AAppEvent of TApplicationEvent.BecameActive: begin ReceiverAta; end; TApplicationEvent.WillTerminate: begin ReceiverKaldir; end; TApplicationEvent.EnteredBackground: MainActivity.moveTaskToBack(True); end; Result := True;
Formun onCreate eventine aşağıdaki kodları yazınız.
if TPlatformServices.Current.SupportsPlatformService (IFMXApplicationEventService, IInterface(AppEvents)) then AppEvents.SetApplicationEventHandler(ApplicationEventHandler);
Şimdid gelelim "ApplicationEventHandler" proceduresinin içerisindeki 2 olaya. BecameActive devreye girdiğinde yani uygulamamız Active olduğu anda ReceiverAta proceduresi calısacak ki buda yayın alıcıları aktif yaparak cihazdaki o an yayınlanan şeyleri dinlemek için.
WillTerminate ise tersi durumda yayın dinleyicileri kaldırmak için.
//ReceiverKaldir içerisi if FReceiver <> nil then SharedActivity.UnregisterReceiver(FReceiver); //ReceiverAta içerisi var Filter: JIntentFilter; begin FReceiver := TJActivityReceiver.Create; Filter := TJIntentFilter.Create; Filter.addAction(StringToJString(PERMISSION)); Filter.addAction(StringToJString(CALL));//YAKALAMAK İSTEDİĞİNİZ YAYINLAR BURAYA EKLENİR. SharedActivity.RegisterReceiver(FReceiver, Filter);
Formun onDestroy eventine program sonlandırıldıgında yaratılan nesneyi serbest bırakmak için gerekli kodu yazalım. Android ortamda otomatik serbest bırakıldıgını varsayıyorum ama ne olur ne olmaz işi şansa bırakmamak gerek.
ServiceReceiver.Free;
Ve şimdi sıra geldi son işlemimize bunun için Forma 1 tane buton yerleştirin ve içerisine aşağıdaki kodları ekleyiniz. Aşağıdaki kodlarda göreceğiniz üzere Const olarak tanımladığımız PERMISSION değişkenini yayına gönderdik ve butona bastığımızda en üsteki gibi yakalanan yayın toast olarak gösterilecektir.
var Inx: JIntent; begin Inx := TJIntent.Create; Inx.setAction(StringToJString(PERMISSION)); SharedActivityContext.sendBroadcast(Inx);
2 Ekim 2014 Perşembe
Delphi Türkiye Merkez Bankası Döviz Kurlarını Okuma
Merhabalar,
Geçtiğimiz günlerde merkez bankası döviz kurları için kullanılan Html sayfasını kapatmış bulunmakta. Bunu bazı eski firmalar .xml servisleri açılmadan önce kullandığı için bu yenilik sayesinde artık xml yapısına geçmelidirler.
Bu durum için bir procedure hazırladım. Bu procedure için forma 1 tane "XMLDocument" nesnesi yerleştirmelisiniz.
Aşağıda dönen verileri almanız için gerekli notları bıraktım onları istediğiniz gibi txt dosyası içerisine kaydedebilirsiniz artık.
Geçtiğimiz günlerde merkez bankası döviz kurları için kullanılan Html sayfasını kapatmış bulunmakta. Bunu bazı eski firmalar .xml servisleri açılmadan önce kullandığı için bu yenilik sayesinde artık xml yapısına geçmelidirler.
Bu durum için bir procedure hazırladım. Bu procedure için forma 1 tane "XMLDocument" nesnesi yerleştirmelisiniz.
Aşağıda dönen verileri almanız için gerekli notları bıraktım onları istediğiniz gibi txt dosyası içerisine kaydedebilirsiniz artık.
//Kullanımı: DovizIslemleri(XMLDocument1); Uses Vcl.ExtActns; procedure DovizIslemleri(XMLComp: TXMLDocument); var I: Integer; S, LocalFile, tmpUrl: String; HeaderNode, CurrNode: IXMLNode; {$REGION 'Gerekli Fonksiyonlar'} function DownloadURLFile(const UrlFile, LocalFile : TFileName) : boolean; begin Result:=True; with TDownLoadURL.Create(nil) do try URL:=UrlFile; Filename:=LocalFile; try ExecuteTarget(nil); except Result:=False; end; finally Free; end; end; function Kontrol(xDate:String;Url: String): String; var D1, D2, Tmp: String; begin Tmp := FormatDateTime('t',Now); if (Trim(xDate) = '') or (StrToTime(Tmp) < StrToTime('15:30')) then //2. koşulun sebebi saat 15:30 dan önce her zaman bir önceki günün değeri gelir Url := Format(Url,['today']) else begin D1 := FormatDateTime('yyyymm', StrToDate(xDate)); D2 := FormatDateTime('ddmmyyyy', StrToDate(xDate)); Tmp := D1 + '/' + D2 ; Url := Format(Url,[Tmp]); end; Result := Url; end; {$ENDREGION} begin try LocalFile := IncludeTrailingPathDelimiter(ExtractFilePath(Application.ExeName)) + 'temp.TMB.xml'; tmpUrl := Kontrol(DateToStr(Date),'http://www.tcmb.gov.tr/kurlar/%s.xml'); Screen.Cursor:=crHourglass; try if not DownloadURLFile(tmpUrl, LocalFile) then begin Screen.Cursor:=crDefault; Raise Exception.CreateFmt('İnternet ile ilgili bir problem ile karşılaşıldı lütfen tekrar deneyiniz..',[]); Exit; end; if not FileExists(LocalFile) then begin Screen.Cursor:=crDefault; raise exception.Create('Xml İndirilemedi!'); Exit; end; XMLComp.Active := False; XMLComp.FileName := LocalFile; XMLComp.Active:=True; HeaderNode := XMLComp.DocumentElement; S := HeaderNode.Attributes['Tarih'];// Tarih for i := 0 to HeaderNode.ChildNodes.Count - 1 do begin CurrNode := HeaderNode.ChildNodes.Get(I); {$REGION 'Dönenler'} (* //PARA KODU CurrNode.Attributes['Kod'] //<Unit> CurrNode.ChildNodes.Get(0).NodeValue; //<Isim> CurrNode.ChildNodes.Get(1).NodeValue; //<CurrencyName> CurrNode.ChildNodes.Get(2).NodeValue; //<ForexBuying> CurrNode.ChildNodes.Get(3).NodeValue; //<ForexSelling> CurrNode.ChildNodes.Get(4).NodeValue; //<BanknoteBuying> CurrNode.ChildNodes.Get(5).NodeValue; //<BanknoteSelling> CurrNode.ChildNodes.Get(6).NodeValue; //<CrossRateUSD> CurrNode.ChildNodes.Get(7).NodeValue; //<CrossRateUSD> CurrNode.ChildNodes.Get(8).NodeValue; *) {$ENDREGION} end; finally DeleteFile(LocalFile); Screen.Cursor:=crDefault; end; except on E: Exception do ShowMessage(E.Message); end;//try end;
1 Ekim 2014 Çarşamba
Barış ATALAY - Linkedin
Merhabalar,
Linkedin üzerinden benimle bağlantı kurmak isteyenler olursa bana aşağıdaki linkten ulaşabilirler.
Bunu yeni öğrendim ki çevre demek herşeymiş tek başına ağzınla kuş tutsan boş.
Saygılar :)
tr.linkedin.com/pub/barış-atalay/88/347/546/
Linkedin üzerinden benimle bağlantı kurmak isteyenler olursa bana aşağıdaki linkten ulaşabilirler.
Bunu yeni öğrendim ki çevre demek herşeymiş tek başına ağzınla kuş tutsan boş.
Saygılar :)
tr.linkedin.com/pub/barış-atalay/88/347/546/
29 Eylül 2014 Pazartesi
Delphi Android Run-time nesne hareketi
Merhabalar,
Örneğimiz için form ekranına 1 adet TImage nesnesi yerleştirmeniz ve içerisine resim yüklemeniz yeterlidir.
Test amaçlı rastgele bir nesne daha eklemeniz de gerek. Çünkü yerini değiştireceğimiz TImage nesnesi, o eklediğimiz resmin üzerine geldiğinde donuyormu onu test etmek için.
İlk olarak Uses kısmına gerekli kütüphaneyi ekleyelim:
Sıradaki işlem "private" bölümüne aşağıdaki değişkenleri tanımlayınız. Tercih sebebi olarak genel var bloğunada tanımlayabilirsiniz.
Bu TImage nesnemizin uyladığımız işlemleri kullanabilmesi için "AutoCapture" özelliğinin daima true olması gerekmektedir. Formun OnCreate bölümüne aşağıdaki kodu ekleyiniz.
DraggableImage.AutoCapture := True;
Sıradaki işlemimiz parmağımızın resmin üzerine geldiğini algılaması ve bu durumda tanımladığımız FPressed değişkenini true yapmak. Bunun için resmin OnMouseDown eventine aşağıdaki kodu ekleyiniz.
Şimdi parmağımızın resimde olmadığı durumu değişkenimize aktarmaya geldi onun için resmin OnMouseUp eventine aşağıdaki kodu ekleyiniz.
Ve son olarak resmin OnMouseMove eventine hareket işlemleri için gerekli kod bloğumuzu ekliyoruz.
Örneğimiz için form ekranına 1 adet TImage nesnesi yerleştirmeniz ve içerisine resim yüklemeniz yeterlidir.
Test amaçlı rastgele bir nesne daha eklemeniz de gerek. Çünkü yerini değiştireceğimiz TImage nesnesi, o eklediğimiz resmin üzerine geldiğinde donuyormu onu test etmek için.
İlk olarak Uses kısmına gerekli kütüphaneyi ekleyelim:
System.Math.Vectors
Sıradaki işlem "private" bölümüne aşağıdaki değişkenleri tanımlayınız. Tercih sebebi olarak genel var bloğunada tanımlayabilirsiniz.
FStartPos: TPointF; FPressed: Boolean;
Bu TImage nesnemizin uyladığımız işlemleri kullanabilmesi için "AutoCapture" özelliğinin daima true olması gerekmektedir. Formun OnCreate bölümüne aşağıdaki kodu ekleyiniz.
DraggableImage.AutoCapture := True;
Sıradaki işlemimiz parmağımızın resmin üzerine geldiğini algılaması ve bu durumda tanımladığımız FPressed değişkenini true yapmak. Bunun için resmin OnMouseDown eventine aşağıdaki kodu ekleyiniz.
FPressed := True; FStartPos := TPointF.Create(X, Y);
Şimdi parmağımızın resimde olmadığı durumu değişkenimize aktarmaya geldi onun için resmin OnMouseUp eventine aşağıdaki kodu ekleyiniz.
FPressed := False;
Ve son olarak resmin OnMouseMove eventine hareket işlemleri için gerekli kod bloğumuzu ekliyoruz.
var MoveVector: TVector; begin if FPressed then begin MoveVector := TVector.Create(X - FStartPos.X, Y - FStartPos.Y, 0); MoveVector := DraggableImage.LocalToAbsoluteVector(MoveVector); if DraggableImage.ParentControl <> nil then MoveVector := DraggableImage.ParentControl.AbsoluteToLocalVector(MoveVector); DraggableImage.Position.Point := DraggableImage.Position.Point + MoveVector.ToPointF; end; Not: www.fire-monkey.ru formundaki bir yazıdan anladığım kadarı ile uyguladığım bir uygulamadır.
20 Eylül 2014 Cumartesi
Delphi Android, IOS ve Windows Download Manager
Merhabalar,
Delphi ile android kullanımının kolaylaştırılması amacına ve kendimi biraz daha fazla geliştirmek için birşeyler hazırlamaya karar verdim. Aklıma indirme olayları ile ilgili birşeyler hazırlamak geldi.
Pek anlatabileceğim birşey yoktur Component görsel birşey sergilemiyor örnek Demoyu proje içerisinde bulablirsiniz. Eş zamanlı olarak indirmeye destek veriyor ve 3lü aynı anda denedim eğer problemler ile karşılaşanlar bildirim yaparsa üst versiyonlara geliştirmekten zevk alırım.
İndirme Linki[08/10/2014]: http://s3.dosya.tc/server28/WxLYLA/DownloadManager.rar.html
Svn: https://code.google.com/p/delphi-android-download-manager/
Update 2:[08/10/2014]
XE5 Support,
Create Auto Download Manager Items,
Package Download
Create Auto Package Manager Items,
Update 1:[22/09/2014]
procedure StopAll
procedure StopDownload(const Index: Integer)
Demo içerisinde örnek yapıldı.
http://s3.dosya.tc/server28/HpCgFO/DownloadManager.rar.html
Delphi ile android kullanımının kolaylaştırılması amacına ve kendimi biraz daha fazla geliştirmek için birşeyler hazırlamaya karar verdim. Aklıma indirme olayları ile ilgili birşeyler hazırlamak geldi.
Pek anlatabileceğim birşey yoktur Component görsel birşey sergilemiyor örnek Demoyu proje içerisinde bulablirsiniz. Eş zamanlı olarak indirmeye destek veriyor ve 3lü aynı anda denedim eğer problemler ile karşılaşanlar bildirim yaparsa üst versiyonlara geliştirmekten zevk alırım.
İndirme Linki[08/10/2014]: http://s3.dosya.tc/server28/WxLYLA/DownloadManager.rar.html
Svn: https://code.google.com/p/delphi-android-download-manager/
Update 2:[08/10/2014]
XE5 Support,
Create Auto Download Manager Items,
Package Download
Create Auto Package Manager Items,
Update 1:[22/09/2014]
procedure StopAll
procedure StopDownload(const Index: Integer)
Demo içerisinde örnek yapıldı.
http://s3.dosya.tc/server28/HpCgFO/DownloadManager.rar.html
Auto Create Download Manager Items
Package Download
Auto Create Package Manager Items
19 Eylül 2014 Cuma
Delphi Android Cihaz Dil öğrenme
Merhabalar,
Embarcaderonun formunda gezinirken bir soruya verilen cevaptan aldığım kodları sizlerle paylaşıyorum.
Sadece Android platformda denedim MACOS olanlar kendileri deneyip yoruma bilgilendirmeyi yapabilirler.
Embarcaderonun formunda gezinirken bir soruya verilen cevaptan aldığım kodları sizlerle paylaşıyorum.
Sadece Android platformda denedim MACOS olanlar kendileri deneyip yoruma bilgilendirmeyi yapabilirler.
function GetOSLangID: String; {$IFDEF MACOS} var Languages: NSArray; begin Languages := TNSLocale.OCClass.preferredLanguages; Result := TNSString.Wrap(Languages.objectAtIndex(0)).UTF8String; {$ENDIF} {$IFDEF ANDROID} var LocServ: IFMXLocaleService; begin if TPlatformServices.Current.SupportsPlatformService(IFMXLocaleService, IInterface(LocServ)) then Result := LocServ.GetCurrentLangID; {$ENDIF} end;
Delphi Android Custom Dialogs
Merhabalar,
Sizlerle ihtiyaçtan doğan ve android üzerinde(Native) .xml ile oluşturulabilen bu mesajları ekranlarını paylaşmak istiyorum.
Tam olarak nedir bunlar?
Yeri geldiğinde cihazın o ekranına (Edit,combo,trackbar) yerleştirmek için yer kalmadığını veya ekranın görüntüsünde ciddi tutarsızlık olduğunda kullanabileceğiniz araçlardır.
Örnek: Edit nesnenize tıklandığı anda açılacak bir Combo nesnesi ile biren fazla seçim ile atama yapabilirsiniz.
Kullandıkça anlayacaksınız ki daha fazla yerlerde de kullanılabilecek bir yapıdadır.
Parent olarak "TCustomEdit" class'ından türemiş nesneleri verebiliyorsunuz.
Eğer ComboboxSettings ve TrackBarSettings bölümlerindeki ReturnText alanı True olursa otomatik olarak parenti olan nesneye dönen değeri yazacaktır.
Update 4:[30/09/2014]
XE5 Desteği ve örneği eklendi.
Update 3:[29/09/2014]
Listview kullanımı için geliştirme yapıldı.
Update 2:[26/09/2014]
Menu türü eklendi.
Update 1:[22/09/2014]
OnPopUpClose Eventi Eklendi. Demo içerisinde örnek yapıldı.
Indirme Linki[30/09/2014]: http://s3.dosya.tc/server28/5LfgIz/CustomDialogs.rar.html
Svn: https://code.google.com/p/delphi-android-custom-dialog/
Sizlerle ihtiyaçtan doğan ve android üzerinde(Native) .xml ile oluşturulabilen bu mesajları ekranlarını paylaşmak istiyorum.
Tam olarak nedir bunlar?
Yeri geldiğinde cihazın o ekranına (Edit,combo,trackbar) yerleştirmek için yer kalmadığını veya ekranın görüntüsünde ciddi tutarsızlık olduğunda kullanabileceğiniz araçlardır.
Örnek: Edit nesnenize tıklandığı anda açılacak bir Combo nesnesi ile biren fazla seçim ile atama yapabilirsiniz.
Kullandıkça anlayacaksınız ki daha fazla yerlerde de kullanılabilecek bir yapıdadır.
Parent olarak "TCustomEdit" class'ından türemiş nesneleri verebiliyorsunuz.
Eğer ComboboxSettings ve TrackBarSettings bölümlerindeki ReturnText alanı True olursa otomatik olarak parenti olan nesneye dönen değeri yazacaktır.
Update 4:[30/09/2014]
XE5 Desteği ve örneği eklendi.
Update 3:[29/09/2014]
Listview kullanımı için geliştirme yapıldı.
Update 2:[26/09/2014]
Menu türü eklendi.
Update 1:[22/09/2014]
OnPopUpClose Eventi Eklendi. Demo içerisinde örnek yapıldı.
Indirme Linki[30/09/2014]: http://s3.dosya.tc/server28/5LfgIz/CustomDialogs.rar.html
Svn: https://code.google.com/p/delphi-android-custom-dialog/
Sadece XE6 ve üst versiyonlar destekler
12 Eylül 2014 Cuma
Delphi Android Apk Boyut Sorunu Hakkında
Merhabalar,
Sizde boş bir proje derlediğimiz zaman neden bu kadar çok boyuta sahip olduğunu merak ediyorsunuzdur hatta daha da meraklılarımız bu sorunun cevabını bence bulmuştur.
Cevabı bende sanırım buldum gibi gibi.
Yaptığım şey bir .apk dosyasının kodlarını yardımcı programlar ile açmak oldu.
Açınca gördüklerim karşısında biraz şaşırmadım da değil hani :)
Aşağıdaki resimden de göreceğiniz üzere bizim yazdığımız showmessage('Hello World');
projesi derlenirken bile embarcadero aynı anda apk dosyasına kendi hazırladığı kütüphaneleri dahil edince doğal olarak bi hayli dosya boyutunda da artış oluyor.
Ve dostlar eğer biraz kendinizi kasarsanız bu dosyaları kullanamazsınız diye birşey yok.
İleride bunlar hakkında projeler yapıp arkaplan servislerini delphi içerisinden yönetilebilirdiğini test edicem :)
Sizde boş bir proje derlediğimiz zaman neden bu kadar çok boyuta sahip olduğunu merak ediyorsunuzdur hatta daha da meraklılarımız bu sorunun cevabını bence bulmuştur.
Cevabı bende sanırım buldum gibi gibi.
Yaptığım şey bir .apk dosyasının kodlarını yardımcı programlar ile açmak oldu.
Açınca gördüklerim karşısında biraz şaşırmadım da değil hani :)
Aşağıdaki resimden de göreceğiniz üzere bizim yazdığımız showmessage('Hello World');
projesi derlenirken bile embarcadero aynı anda apk dosyasına kendi hazırladığı kütüphaneleri dahil edince doğal olarak bi hayli dosya boyutunda da artış oluyor.
Ve dostlar eğer biraz kendinizi kasarsanız bu dosyaları kullanamazsınız diye birşey yok.
İleride bunlar hakkında projeler yapıp arkaplan servislerini delphi içerisinden yönetilebilirdiğini test edicem :)
9 Eylül 2014 Salı
Delphi Android QR Okuyucu Proje
Merhabalar,
Bir arkadaşımız önce paylaştığım bir yazıdaki qr okuyucu projesini derleyememiş onun için hazırladığım hazır bir projedir.
İçerisindekiler:
~Delphi Android Qr Okuyucu,
~Android cihazdaki uygulama varmı kontrolü,
~Android Url Açma.
Not: Bu projenin çalışması için cihazda "Zxing" barcod okuyucunun mevcut olması gerekmektedir. Proje içerisinde bu uygulamanın kontrolü yapılmaktadır yani eğer yok ise indirmeyi zorunlu kıldık.
İndirme Linki[09/09/2014]: http://s3.dosya.tc/server27/Shm1Js/Qr_Okuyucu.rar.html
Bir arkadaşımız önce paylaştığım bir yazıdaki qr okuyucu projesini derleyememiş onun için hazırladığım hazır bir projedir.
İçerisindekiler:
~Delphi Android Qr Okuyucu,
~Android cihazdaki uygulama varmı kontrolü,
~Android Url Açma.
Not: Bu projenin çalışması için cihazda "Zxing" barcod okuyucunun mevcut olması gerekmektedir. Proje içerisinde bu uygulamanın kontrolü yapılmaktadır yani eğer yok ise indirmeyi zorunlu kıldık.
İndirme Linki[09/09/2014]: http://s3.dosya.tc/server27/Shm1Js/Qr_Okuyucu.rar.html
EKRAN GÖRÜNTÜSÜ
8 Eylül 2014 Pazartesi
X-SuperObject Örnekleri
Merhabalar,
Bir arkdaşımız için hazırladığım birkaç tane X-SuperObject örneğini bu başlık alında paylaşıcam.
Bu örneklerde neler var?
~JSON içerisinde koşula bağlı arama,
~JSON Listeleme,
~IMember(ICast) kullanımı
Amacım kullanılabilirliği hakkında bilgi ve örnek vermektir. İçeriği kendinize göre uyarlayıp türlü işlemler yapabilirsiniz.
Konu altında yapamadığınız bir durum olursa yazabilirsiniz ve örnekler ile sorununu çözebiliriz.
İyi çalışmalar.
İndirme Linki[08/09/2014]: http://s3.dosya.tc/server27/0ifDt1/SuperObject_Ornekleri.rar.html
Bir arkdaşımız için hazırladığım birkaç tane X-SuperObject örneğini bu başlık alında paylaşıcam.
Bu örneklerde neler var?
~JSON içerisinde koşula bağlı arama,
~JSON Listeleme,
~IMember(ICast) kullanımı
Amacım kullanılabilirliği hakkında bilgi ve örnek vermektir. İçeriği kendinize göre uyarlayıp türlü işlemler yapabilirsiniz.
Konu altında yapamadığınız bir durum olursa yazabilirsiniz ve örnekler ile sorununu çözebiliriz.
İyi çalışmalar.
İndirme Linki[08/09/2014]: http://s3.dosya.tc/server27/0ifDt1/SuperObject_Ornekleri.rar.html
ÖRNEK EKRAN GÖRÜNTÜSÜ
Delphi Android Native Progress Dialog
Merhabalar,
Delphinin örnek kod dosyalarını karıştırırken bu konu hakkında yapılmış örnekler buldum fakat birden fazla konu aynı projede oldugundan sadeleştirme gereği duydum.
Gelelim bu olay tam olarak nedir?
Android’de uygulamamız arkaplanda bir şeylerle meşgulken kullanıcıya o sırada bir uyarı verilmesini ve kullanıcının arkada işleyen konu hakkında bilgi sahibi olmasını isteyebiliriz. Çünkü bu esnada kullanıcıyı bilgilendirmezsek programın takıldığını yada kendisine verilen işlemi yerine getirmediğini düşünüp uygulamayı kapatabilir, telefonundan kaldırabilir.
Aşağıdaki linkten ingilizcesi olanlar detaylı olarak okuyabilirler.
http://developer.android.com/reference/android/app/ProgressDialog.html
Sadeleştirdiğim .pas dosyası ile sadece parametre girerek istediğimiz şekilde bunu kullanabileceğiz.
Kullanımı:
En sonda gördüğünüz Boolean olan parametre dialogun "Geri" tuşuna basılınca kapanıp kapanmayacağına karar verdiğiniz parametredir.
İndirme Linki[08/09/2014]: http://s3.dosya.tc/server27/5iLWmo/Androidapi.Dialogs.rar.html
İndirme Linki[02/07/2015] : http://www.mediafire.com/download/6y0od3okb9b8c08/Androidapi.Dialogs.pas
Delphinin örnek kod dosyalarını karıştırırken bu konu hakkında yapılmış örnekler buldum fakat birden fazla konu aynı projede oldugundan sadeleştirme gereği duydum.
Gelelim bu olay tam olarak nedir?
Android’de uygulamamız arkaplanda bir şeylerle meşgulken kullanıcıya o sırada bir uyarı verilmesini ve kullanıcının arkada işleyen konu hakkında bilgi sahibi olmasını isteyebiliriz. Çünkü bu esnada kullanıcıyı bilgilendirmezsek programın takıldığını yada kendisine verilen işlemi yerine getirmediğini düşünüp uygulamayı kapatabilir, telefonundan kaldırabilir.
Aşağıdaki linkten ingilizcesi olanlar detaylı olarak okuyabilirler.
http://developer.android.com/reference/android/app/ProgressDialog.html
Sadeleştirdiğim .pas dosyası ile sadece parametre girerek istediğimiz şekilde bunu kullanabileceğiz.
Kullanımı:
En sonda gördüğünüz Boolean olan parametre dialogun "Geri" tuşuna basılınca kapanıp kapanmayacağına karar verdiğiniz parametredir.
//Başlatma: StartWait('Başlık','Metin',False); //Durdurma: StopWait;
İndirme Linki[08/09/2014]: http://s3.dosya.tc/server27/5iLWmo/Androidapi.Dialogs.rar.html
İndirme Linki[02/07/2015] : http://www.mediafire.com/download/6y0od3okb9b8c08/Androidapi.Dialogs.pas
ÖRNEK GÖRÜNTÜ
5 Eylül 2014 Cuma
Delphi Android Sqlite ve Listview kullanımı
Merhabalar,
Bir arkadaşımız istediği için küçük bir proje hazırladım.
Projede:
~SQLite Ekleme,Silme ve Sorgulama işlemleri,
~Listview kullanımı.
bu iki konuyu görebileceksiniz.
İndirme Linki: http://s3.dosya.tc/server27/EPe5dy/SQL_Proje.rar.html
Edit : 21.02.2017
Linkleri yenileme imkanım yoktur. Aşağıdaki linkten daha detaylı bilgi alabilirsiniz.
http://brsatalay.blogspot.com.tr/2014/07/mobile-sifre-takip-uygulamas-kaynak.html
Bir arkadaşımız istediği için küçük bir proje hazırladım.
Projede:
~SQLite Ekleme,Silme ve Sorgulama işlemleri,
~Listview kullanımı.
bu iki konuyu görebileceksiniz.
İndirme Linki: http://s3.dosya.tc/server27/EPe5dy/SQL_Proje.rar.html
Edit : 21.02.2017
Linkleri yenileme imkanım yoktur. Aşağıdaki linkten daha detaylı bilgi alabilirsiniz.
http://brsatalay.blogspot.com.tr/2014/07/mobile-sifre-takip-uygulamas-kaynak.html
EKRAN GÖRÜNTÜLERİ
23 Ağustos 2014 Cumartesi
Delphi Android Foreground
Merhabalar,
Sizelere bu sefer biraz cihazda görsellik yaratacak ve projenizi daha profesyonel gösterecek bir şeyler hazırladım. Bunun tam olarak ne olduğunu anlamak için "Android Foreground" kelimelerini Google üzerinden aratıp tam anlamlı açıklamalara erişebilirsiniz ben eksik bilgi verip kafanızı karıştırmak istemem.
Bu işleme yaptığım bir örneğin resmini koyarak tam anlamı ile göstermek istiyorum.
Bu "AndroidManifest.template.xml" ayarı için yapılması gereken
1-) Manifest dosyasını açınız.
2-)
<receiver android:name="com.embarcadero.firemonkey.notifications.FMXNotificationAlarm"/>
satırını bulunuz ve hemen altına boş bır satır açarak vereceğim metini yapıştırınız.
3-) <service android:name="com.barisatalay.foreground.ForegroundServis"
android:persistent="true"
android:enabled="true">
</service>
4-) Eğer doğru olarak eklediyseniz kodlar bu resimdeki gibi gözükmeli.
5- ) Resimdeki şekilde projemizi önce Clean sonra Compile yapıyoruz
Sizelere bu sefer biraz cihazda görsellik yaratacak ve projenizi daha profesyonel gösterecek bir şeyler hazırladım. Bunun tam olarak ne olduğunu anlamak için "Android Foreground" kelimelerini Google üzerinden aratıp tam anlamlı açıklamalara erişebilirsiniz ben eksik bilgi verip kafanızı karıştırmak istemem.
Bu işleme yaptığım bir örneğin resmini koyarak tam anlamı ile göstermek istiyorum.
Resim 1
Resim 2
Kodların orjinalini Embarcaderonun formunda bir soruya verilen cevaptaki linten indirdim fakat çoğu zaman üşengeç bir millet olduğumuzdan bütün bu .pas dosyalarını projeye dahil edecez de ayarlamaları yapacas da bizim için büyük iş :)
Bende bunları düşünerek bütün pas dosyalarını 1 component üzerinde birleştirdim ve yapmamız gereken sadece componenti tutup formun üzerine bırakmak ve .StartService proceduresini çalıştırmak.
Eğer biraz meraklıysanız ve android arka plan servisleri ile ilgili uygulamalar geliştirmek isterseniz .pas dosyalarının içeriğini karıştırmanızı öneririm. Çünkü hazırlayan arkadaş android cihazın yaptığı yayınları yakalama gibi olayları güzelce anlatmış orada.
İndirme Linki[23/08/2014] : http://s3.dosya.tc/server27/voioDy/ForegroundService.rar.html
Ek olarak yapılması gereken 2 ayar vardır bunlar:
1-) Classes.dex Ayarı http://brsatalay.blogspot.com.tr/2014/08/delphi-classesdex-deploy.html
2-) AndroidManifest.template.xml ayarı
Bu "AndroidManifest.template.xml" ayarı için yapılması gereken
1-) Manifest dosyasını açınız.
2-)
<receiver android:name="com.embarcadero.firemonkey.notifications.FMXNotificationAlarm"/>
satırını bulunuz ve hemen altına boş bır satır açarak vereceğim metini yapıştırınız.
3-) <service android:name="com.barisatalay.foreground.ForegroundServis"
android:persistent="true"
android:enabled="true">
</service>
4-) Eğer doğru olarak eklediyseniz kodlar bu resimdeki gibi gözükmeli.
5- ) Resimdeki şekilde projemizi önce Clean sonra Compile yapıyoruz
Tüm bu işlemleri tamamladığınızda Foreground olayının başarı ile çalıştığını göreceksiniz.
Bütün bunlarda da hata yapma olasılığınızı düşünerek component klasörlerinin içerisine "Demo" adında klasörde sizler için örnek bir proje hazırladım.
İyi çalışmalar.
Delphi Classes.dex Deploy
Merhabalar,
Bu yazı "Delphi Android Foreground" başlığı için bir ara yazıdır ve burada android cihaz için classes.dex dosyasını nasıl deploy edildiğini öğreneceğiz.
İşlemlerimize resimleri takip ederek devam ediyoruz.
1-) sırasıyla adımları izleyerek projemizi daha önce compile etmediysek bu işlemler ile gerekli dosyaların yaratılmasını sağlıyoruz.
2-) Project>>Deployment seçerek gerekli menü açılır
3-)
1- numarada gördüğünüz satır orjinal delphinin hazırlamış olduğu classes.dex dosyasıdır ve onun seçimini iptal ediyoruz.
2- 2 numarası ile gösterilen yere tıklayıp component dosyalarının içerisindeki "dex" klasörünün içerisindeki "classes.dex" dosyasını seçiyoruz.
3- Mavi ile seçili satır yüklediğimiz classes.dex dosyasıdır ve sizdeki ayalarında aynı bu resimde gördüğünüz gibi olması için gerekli düzenlemeleri yapın.
4-) Deploy butonuna basarak işleminizi tamamlayın.
Bu yazı "Delphi Android Foreground" başlığı için bir ara yazıdır ve burada android cihaz için classes.dex dosyasını nasıl deploy edildiğini öğreneceğiz.
İşlemlerimize resimleri takip ederek devam ediyoruz.
1-) sırasıyla adımları izleyerek projemizi daha önce compile etmediysek bu işlemler ile gerekli dosyaların yaratılmasını sağlıyoruz.
2-) Project>>Deployment seçerek gerekli menü açılır
1- numarada gördüğünüz satır orjinal delphinin hazırlamış olduğu classes.dex dosyasıdır ve onun seçimini iptal ediyoruz.
2- 2 numarası ile gösterilen yere tıklayıp component dosyalarının içerisindeki "dex" klasörünün içerisindeki "classes.dex" dosyasını seçiyoruz.
3- Mavi ile seçili satır yüklediğimiz classes.dex dosyasıdır ve sizdeki ayalarında aynı bu resimde gördüğünüz gibi olması için gerekli düzenlemeleri yapın.
4-) Deploy butonuna basarak işleminizi tamamlayın.
19 Ağustos 2014 Salı
Delphi Formdaki nesnelerde gezinti
Merhabalar,
Zaman zaman lazım olan ve çabuk unutulan bir işlemi unutmamak için paylaşmak istiyorum.
Amacımız formdaki nesneler arasında taborder'larına göre yön tuşlarıyla veya tab tuşuyla gezinti.
1-) Formun KeyPreview özelliğini True yapınız
2-) Formun Object Inpector'den "ActiveControl" seçeneğinde ilk olarak hangi nesnede olmasını istiyorsanız onu seçin.
3-) Formun "OnKeyDown" eventine aşağıdaki kodu yazınız.
Zaman zaman lazım olan ve çabuk unutulan bir işlemi unutmamak için paylaşmak istiyorum.
Amacımız formdaki nesneler arasında taborder'larına göre yön tuşlarıyla veya tab tuşuyla gezinti.
1-) Formun KeyPreview özelliğini True yapınız
2-) Formun Object Inpector'den "ActiveControl" seçeneğinde ilk olarak hangi nesnede olmasını istiyorsanız onu seçin.
3-) Formun "OnKeyDown" eventine aşağıdaki kodu yazınız.
if (Key = VK_RETURN) or (Key = VK_DOWN) then SelectNext(ActiveControl,True,True); if Key = VK_UP then SelectNext(ActiveControl,False,True);
13 Ağustos 2014 Çarşamba
XE6 PushEvents ve KinveyProvider Kullanımı
Merhabalar,
Aslında pek ilgi olmadığı için blogda paylaşım yapmayı bıracaktım, fakat Tahsin abi sağolsun arayıp paylaşımlardan dolayı teşekkür etti ve bende takip eden olduğunu anca o zaman farkına varmış oldum. Tahsin abiye selamlar buradan.
Gelelim asıl konumuza;
Bir çok arkadaşımız veritabanı entegreli uygulamalar yapmakta bunların çeşitli türleri mevcut google play üzerinde. Uygulamalarımız kullanıcı karşısına çıktıkça yenilenmeden duramayacağı için kullanıcılara bildirimler yapılması şarttır.
Bu bildirimleri Mail, Sms vs. birçok yöntemle yapabilirsiniz.
Ama bunların daha iyisi olarak android dünyasının bizlere sunmuş olduğu "Notification" olayı mevcuttur. Delphi XE5 ile bu işlemi Embarcadero bizlere component tadında sunmuş ve işlerimizi kolaylaştırmıştır. Fakat bence unuttular veya yetiştiremediler şöyle birşey var ki uygulama kapalı olduğu zamanda bu componentin çalışmaması başta bizleri hayal kırıklığına uğratmıştı.
"Brian Long" adlı geliştiricinin bloğunu inceleyenler bu kişinin bir takım java kodlarını delphi proje ile beraber derleyip background servisi yazdığını görmüştür fakat ben bir türlü tam anlamı ile anlayamamış ve o background servisi ile uygulamamdaki Notification componentini tetikleyememiştim.
Embarcadero XE6 sürümü ile bize birtakım componentler daha sunmuştur "BAAS Client" grubu altındaki bu componentler bizlere biraz önce bahsettiğim notification olayını Kinvey.com(Android) veya Parse.com(IOS) aracılığı ile hiç uğraşmadan kolay bir şekilde tetikliyebilmemizi sağlamaktadır.
Bu işlemide Google android mesaj servisi sayesinde yapmaktadır.
İşin kısası: Masaüstündeki exeden mesajınızı ve başlığını yazıyorsunuz Mobil cihazınıza bildirim olarak düşüyor :)
Neden bu kadar şeyi açıklama gereği duydum bende bilmiyorum fakat parmaklar yazdı derler ya o oldu işte.
Projemize ilk önce "Kinvey.com" da üyelik aldığınızı varsayarak başlıyorum. Daha bunu yapmayanlar için biraz önce yazdığım makaleden yararlanabilirler
Linki: http://brsatalay.blogspot.com.tr/2014/08/kinveycom-uyelik-alma-ve-kullanc.html
Gerekli Componentleri aşağıdaki resimde görebilirsiniz.
Öncekle 1 şey yaptırmak istiyorum tabi tercihe kalmıs KinveyProviderin aktif olayını istediğiniz gibide yapabilirsiniz ben checkboxun click olayı ile bağlamak istiyorum.
Toolbardan "View" sekmesine tıklayınız ve açılan menüden "LiveBindings Designer"i açınız aşağıda bir bölüm açıldıgını göreceksiniz.
Bu bölümde yapmanız gereken tek birşey var Chekbox'un altındaki "IsChecked" yazan yeri mouse ile tutup "PushEvents" ın Active yazan yerinin üstüne bırakmanız yani arada bir köprü(link) oluşturacas ki entegre calıssın.
Şimdi bu ekrani kapatabilirsiniz.
"PushEvents" componentinin "AutoActive" özelliğini false yapalım ki bu checkboxla aktifleştirelim
Ekranda gördüğünüz resimdeki KinveyProvider componentinin bazı ayarları vardır sıradaki işlemimiz önceki konularda oluşturdugumuz hesaplar ve kodları bu providere tanımlamak.
GCMAppOD = http://brsatalay.blogspot.com.tr/2014/08/google-messaging-service-ayarlamalar.html
Bu linkteki 2. resimdeki "Project Number"
AppKey, AppSecret, MasterSecret = Kinvey.com girişinde sağ alta mevcuttur
Username, Password = http://brsatalay.blogspot.com.tr/2014/08/kinveycom-uyelik-alma-ve-kullanc.html adresindeki konuda oluşturduğumuz kullanıcıdır.
Resimdeki gibi Atamaları yapınız
Evet sıradaki atamaları bitirdiğimize göre sıradaki işlemimiz bu servisin yayınladığı mesajı yakalamaktır.
Java kodlarında olsa bir yığın kod yazmamız gerekecekti fakat işte delphiyi bu sebeble seviyorum bizim için zaman kaybetmememiz için standart kodları kendi hallediyor.
Evet olayı bölmeden devam..
"PushEvents" componentinin Event sekmesine gelerek sırayla eventlerimizi tanımlayalım.
Evet kod kısmımız *.pas dosyası içerisinde bu kadar sorabilirsiniz "BildirimGonder" proceduresini neden tanımladın sebebi şu:
Uygulama kapalıyken bildirim sekmesine ileti düşer fakat uygulama açıkken herhangi bir "Notification" algısı çalışmadığı için bu işlemi manuel olarak yapmamız gerekmektedir.
Sıradaki işlemimizde "AndroidManifest.template.xml" içerisine uygulama izinleri ve servis ayarları gibi atamaları yapacağız.
"AndroidManifest.template.xml" dosyasını açıyoruz ve "<%uses-permisson%>" metini bulup altına biraz yer açıyoruz ki şu kodları yapıştırabilelim..
Nedir bu kodlar derseniz permission yazısından anlayabileceğiniz gibi kullanacağımız işlemlerin izinleridir bu şekil manuel ayarlamak yerine Delphi içerisinden seçerekte atayabilirsiniz tercih size kalmış.
Şimdi biraz aşağılardaki
kodları bulun ve hemen altına şu kodları yapıştırın.
Bu kodlar yanlış anlamadıysam google messaj servisinden gelen yayını dinliyor
Son olarak şu kodu ekleyiniz.
Sıradaki ve son işlemimiz Mesajımızı göndermektir :)
Bu işlem için Kinvey.com'a giriyoruz ve resimdeki adımları izleyerek Mesaj gönderme ekranına geliyoruz.
Aşağıda gördüğünüz yerdeki yazı alanına istediğinizi yazarak uygulamanızın kapalı oldugu cihaza notification bildirimi gönderebilirsiniz.
Makalelerimi takip ettiğiniz için teşekkürler. Pek takip eden olduğunu var saymıyorum ama ilgi gösterilirse bu notification gönderme işlemini masaüstü bilgisayardan nasıl gönderildiği ile ilgili yazı yazabilirim isteğe bağlı..
Bu resimde gönderdiğimiz metni görebilirsiniz :)
Aslında pek ilgi olmadığı için blogda paylaşım yapmayı bıracaktım, fakat Tahsin abi sağolsun arayıp paylaşımlardan dolayı teşekkür etti ve bende takip eden olduğunu anca o zaman farkına varmış oldum. Tahsin abiye selamlar buradan.
Gelelim asıl konumuza;
Bir çok arkadaşımız veritabanı entegreli uygulamalar yapmakta bunların çeşitli türleri mevcut google play üzerinde. Uygulamalarımız kullanıcı karşısına çıktıkça yenilenmeden duramayacağı için kullanıcılara bildirimler yapılması şarttır.
Bu bildirimleri Mail, Sms vs. birçok yöntemle yapabilirsiniz.
Ama bunların daha iyisi olarak android dünyasının bizlere sunmuş olduğu "Notification" olayı mevcuttur. Delphi XE5 ile bu işlemi Embarcadero bizlere component tadında sunmuş ve işlerimizi kolaylaştırmıştır. Fakat bence unuttular veya yetiştiremediler şöyle birşey var ki uygulama kapalı olduğu zamanda bu componentin çalışmaması başta bizleri hayal kırıklığına uğratmıştı.
"Brian Long" adlı geliştiricinin bloğunu inceleyenler bu kişinin bir takım java kodlarını delphi proje ile beraber derleyip background servisi yazdığını görmüştür fakat ben bir türlü tam anlamı ile anlayamamış ve o background servisi ile uygulamamdaki Notification componentini tetikleyememiştim.
Embarcadero XE6 sürümü ile bize birtakım componentler daha sunmuştur "BAAS Client" grubu altındaki bu componentler bizlere biraz önce bahsettiğim notification olayını Kinvey.com(Android) veya Parse.com(IOS) aracılığı ile hiç uğraşmadan kolay bir şekilde tetikliyebilmemizi sağlamaktadır.
Bu işlemide Google android mesaj servisi sayesinde yapmaktadır.
İşin kısası: Masaüstündeki exeden mesajınızı ve başlığını yazıyorsunuz Mobil cihazınıza bildirim olarak düşüyor :)
Neden bu kadar şeyi açıklama gereği duydum bende bilmiyorum fakat parmaklar yazdı derler ya o oldu işte.
Projemize ilk önce "Kinvey.com" da üyelik aldığınızı varsayarak başlıyorum. Daha bunu yapmayanlar için biraz önce yazdığım makaleden yararlanabilirler
Linki: http://brsatalay.blogspot.com.tr/2014/08/kinveycom-uyelik-alma-ve-kullanc.html
Gerekli Componentleri aşağıdaki resimde görebilirsiniz.
Öncekle 1 şey yaptırmak istiyorum tabi tercihe kalmıs KinveyProviderin aktif olayını istediğiniz gibide yapabilirsiniz ben checkboxun click olayı ile bağlamak istiyorum.
Toolbardan "View" sekmesine tıklayınız ve açılan menüden "LiveBindings Designer"i açınız aşağıda bir bölüm açıldıgını göreceksiniz.
Bu bölümde yapmanız gereken tek birşey var Chekbox'un altındaki "IsChecked" yazan yeri mouse ile tutup "PushEvents" ın Active yazan yerinin üstüne bırakmanız yani arada bir köprü(link) oluşturacas ki entegre calıssın.
Şimdi bu ekrani kapatabilirsiniz.
"PushEvents" componentinin "AutoActive" özelliğini false yapalım ki bu checkboxla aktifleştirelim
Ekranda gördüğünüz resimdeki KinveyProvider componentinin bazı ayarları vardır sıradaki işlemimiz önceki konularda oluşturdugumuz hesaplar ve kodları bu providere tanımlamak.
GCMAppOD = http://brsatalay.blogspot.com.tr/2014/08/google-messaging-service-ayarlamalar.html
Bu linkteki 2. resimdeki "Project Number"
AppKey, AppSecret, MasterSecret = Kinvey.com girişinde sağ alta mevcuttur
Örnek
Username, Password = http://brsatalay.blogspot.com.tr/2014/08/kinveycom-uyelik-alma-ve-kullanc.html adresindeki konuda oluşturduğumuz kullanıcıdır.
Resimdeki gibi Atamaları yapınız
Evet sıradaki atamaları bitirdiğimize göre sıradaki işlemimiz bu servisin yayınladığı mesajı yakalamaktır.
Java kodlarında olsa bir yığın kod yazmamız gerekecekti fakat işte delphiyi bu sebeble seviyorum bizim için zaman kaybetmememiz için standart kodları kendi hallediyor.
Evet olayı bölmeden devam..
"PushEvents" componentinin Event sekmesine gelerek sırayla eventlerimizi tanımlayalım.
procedure TMainScreen.PushEventsDeviceTokenRequestFailed(Sender: TObject; const AErrorMessage: string); begin //DeviceTokenRequestFailed Eventi hata anında tetiklenir. Memo1.Lines.Add('Hata Var!'); BildirimMemo.Lines.Add(AErrorMessage);//Bu değişken sayesinde dönen hata mesajını yakalayabilirsiniz. BildirimMemo.Lines.Add(''); end; procedure TMainScreen.PushEventsPushReceived(Sender: TObject; const AData: TPushData); begin//Sorunsuz iletişim anında burası tetiklenir. BildirimGonder(AData.Message);//Bu değişkene Kinvey.com adresinden gönderdiğiniz mesaj gelecektir. end; procedure TMainScreen.BildirimGonder(T: String); var Notification: TNotification; begin if NotificationCenter.Supported then begin Notification := NotificationCenter.CreateNotification; try Notification.Name := 'Mesaj Başlığı'; Notification.AlertBody := T; Notification.FireDate := Now; NotificationCenter.ScheduleNotification(Notification); finally Notification.DisposeOf; end; end end;
Evet kod kısmımız *.pas dosyası içerisinde bu kadar sorabilirsiniz "BildirimGonder" proceduresini neden tanımladın sebebi şu:
Uygulama kapalıyken bildirim sekmesine ileti düşer fakat uygulama açıkken herhangi bir "Notification" algısı çalışmadığı için bu işlemi manuel olarak yapmamız gerekmektedir.
Sıradaki işlemimizde "AndroidManifest.template.xml" içerisine uygulama izinleri ve servis ayarları gibi atamaları yapacağız.
"AndroidManifest.template.xml" dosyasını açıyoruz ve "<%uses-permisson%>" metini bulup altına biraz yer açıyoruz ki şu kodları yapıştırabilelim..
<!-- GCM connects to Google Services. --> <uses-permission android:name="android.permission.INTERNET" /> <!-- GCM requires a Google account. --> <uses-permission android:name="android.permission.GET_ACCOUNTS" /> <!-- Keeps the processor from sleeping when a message is received. --> <uses-permission android:name="android.permission.WAKE_LOCK" /> <!-- Creates a custom permission so only this app can receive its messages. NOTE: the permission *must* be called PACKAGE.permission.C2D_MESSAGE, where PACKAGE is the application's package name. --> <permission android:name="%package%.permission.C2D_MESSAGE" android:protectionLevel="signature" /> <uses-permission android:name="%package%.permission.C2D_MESSAGE" /> <!-- This app has permission to register and receive data message. --> <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
Nedir bu kodlar derseniz permission yazısından anlayabileceğiniz gibi kullanacağımız işlemlerin izinleridir bu şekil manuel ayarlamak yerine Delphi içerisinden seçerekte atayabilirsiniz tercih size kalmış.
Şimdi biraz aşağılardaki
</intent-filter> </activity>
kodları bulun ve hemen altına şu kodları yapıştırın.
<receiver android:name="com.embarcadero.gcm.notifications.GCMNotification" android:exported="true" android:permission="com.google.android.c2dm.permission.SEND" > <intent-filter> <action android:name="com.google.android.c2dm.intent.RECEIVE" /> <category android:name="%package%" /> </intent-filter> </receiver>
Bu kodlar yanlış anlamadıysam google messaj servisinden gelen yayını dinliyor
Son olarak şu kodu ekleyiniz.
<service android:name="com.embarcadero.gcm.notifications.GCMIntentService" />
Sıradaki ve son işlemimiz Mesajımızı göndermektir :)
Bu işlem için Kinvey.com'a giriyoruz ve resimdeki adımları izleyerek Mesaj gönderme ekranına geliyoruz.
Aşağıda gördüğünüz yerdeki yazı alanına istediğinizi yazarak uygulamanızın kapalı oldugu cihaza notification bildirimi gönderebilirsiniz.
Makalelerimi takip ettiğiniz için teşekkürler. Pek takip eden olduğunu var saymıyorum ama ilgi gösterilirse bu notification gönderme işlemini masaüstü bilgisayardan nasıl gönderildiği ile ilgili yazı yazabilirim isteğe bağlı..
Bu resimde gönderdiğimiz metni görebilirsiniz :)
Kaydol:
Kayıtlar (Atom)