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

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.



Sıradaki işlem "AdBuddiz-2.3.4.jar" dosyasının .pas dosyasına çevrilmiş halini indirmek ve projeye eklemek.


Artık kodlarımıza geçebiliriz. Formun var bloğuna 2 adet değişken tanımlayınız.
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.




6 Ağustos 2014 Çarşamba

Delphi Mobile ve FireMonkey Flat Button Componenti

Merhabalar,

Embarcaderonun bizlere sunmuş olduğu TButton componenti malesef benim ihtiyaçlarımı tam olarak karşılayamamaktadır.

Öncelikli sebebi TButtonun şeffaf olmasıdır.

Bu sebebden dolayı "TFlatRectButton" adını vermiş olduğum componenti yazma ihtiyacı duydum. Bu component "TRectangle" nesnesinden türetilmiştir.

Bu "TFlatRectButton" componenti biraz acemi işi oldu fakat bana buton üzerinde istediğimi yapma özelliği sundu.

Güncel Proje Linki : https://code.google.com/p/delphi-mobile-flat-button/

İndirme Linki [06/08/2014] : http://s3.dosya.tc/server26/IzVFLm/FlatButtonSet.rar.html

FmxExpress: http://www.fmxexpress.com/free-flat-rectangle-icon-button-component-for-delphi-xe6-firemonkey-on-android-and-ios/




Bunlar nelerdir?
Resimde kullanacağımız 2 özelliği çizerek gösterdim.




1- ) "Text"

Bu özellik adından da anlaşıldığı gibi butonumuzun üzerinde gözükecek olan metindir.

2-) "Settings"

Kullanacağımız özellikleri "Settings" başlığı altında topladım.
Bunlar:

"ButtonSettings": 
  Bu bölümde butonun renk ayarlarını yapabilirsiniz.
  Eğer butonun üzerine geldiğinizde renginin sizin belirlediğiniz bi renk olmasını istiyorsanız "IsHoverColor" rengini değiştirin.
 Eğer butona tıkladığınızda butonun rengi sizin belirlediğiniz bi renk olmasını istiyorsanız "IsPressedColor" rengini değiştirin.

"IconSettings":
Bu bölümde button içerisinde kullanacağınız resim ayarlarını yapabilirsiniz.
  Icon : Butonda gözükecek olan resim.
  Align: Butona eklenmiş olan resimin butonda hangi pozisyonda duracağını seçmelisiniz.

"TextSettings":
Bu bölümde butonda gözükecek olan metinin ayarlarını yapabilirsiniz.
  Font: Gözükecek olan metinin standart font ayarlarını yaptığınız bölümdür.
  TextColor: Gözükecek olan metinin rengini buradan ayarlayabilirsiniz.
  TextHorizontal: Gözükecek olan metinin yatay olarak hizalamasını buradan ayarlayabilirsiniz.
  TextVertical: Gözükecek olan metinin dikey olarak hizalamasını buradan ayarlayabilirsiniz.

Örnek Butonlar





15 Temmuz 2014 Salı

Firemonkey Çizim ve Efekt Kullanımı

Merhabalar,

Bu yazımda sizler için hazırladığım projede firemonkey üzerinde:
1-) Resime üzerine yazı yazma,
2-) Resime üzerine çizim yapma,
3-) Resim üzerine efekt uygulama.

İşlemlerini ayrıntılı bir şekilde öğrenebileceksiniz. Proje Delphi XE5 ile hazırlanmıştır.
Tekrar belirtmek isterimki kodlarımı olabildiğince basit tutmaya çalışmaktayım tecrübeye bakmaksızın herkesin anlaması için.

Örnek Görüntüler:



23 Haziran 2014 Pazartesi

Delphi Dialog ile klasör seçme



with TFileOpenDialog.Create(nil) do
try
  Options := [fdoPickFolders];
  if Execute then
  begin
    //Buradan Dönen "FileName" ile bir değişkene seçilen klasör yolunu alabilirsiniz.
  end;
finally
  Free;
end;

Delphi XE6 Admob

XE6 Admob


 Merhabalar, Bu yazımda sizlere Embarcadero'nun bizlere sunmuş olduğu nimetlerden bir tanesinden bahsetmek istiyorum. XE6 Admob sayesinde artık uygulamalarından para kazanmak gibi düşüncesi olanlara şimdiden söyliyim gözünüzü çok yükseklere dikmeyin :) Burada Admob hesap nasıl açılır UnitID nasıl bulunur gibi anlatımlara girmek istemiyorum Hz. Google'a sorabilirsiniz size seve seve yardımcı olacaktır :) Örnek projemiz için bize lazım olan ekipman: 1 Adet Android Cihaz :) Formumuza Eklenecek olan elemanlar: 1-) TBannerAd 2-)Label 3-)Button İşlemlere başlamadan önce "INTERNET" ve "ACCESS_NETWORK_STATE" yetkilerinin açılmış olması gerektiğini unutmayalım. Görselliğe uyması için TBannerAd nesnemizin Align özelliğini Top yaptıktan sonra formumuza labeli ve butonu yerleştiriyoruz. Formun OnCreate Eventine:
BannerAd1.AdUnitID := 'ADMOB ID BURAYA';

Buton İçerisine :
BannerAd1.LoadAd;

Ve biraz işe aksiyon katmak istersek Reklamın ne kadar zaman boyunca izlendiğini labelimize yazdıralım. Bu iş için öncelikle "Var" bloğumuz altına "ActionBeginDate: TDateTime; WastedSeconds: Integer;" değişkenlerini tanımlıyoruz. TBannerAd nesnemizin Event sekmesinden OnActionCanBegin  içerisine  admobun aktif olduğu saati kayıt etmesi için: OnActionCanBegin
ActionBeginDate := Now;

Ve reklamlar arası geçiş, Reklama tıklanma vb. eventler olduğu zaman bu TBannerAd nesnemizin OnActionDidFinish Eventine yansayacaktır ve bizde bunu yakalıyalım: OnActionDidFinish
var
Seconds: Integer;
begin
Seconds := SecondsBetween(ActionBeginDate, Now);
WastedSeconds := WastedSeconds + Seconds;
Label1.Text := IntToStr(WastedSeconds) + ' boyunca reklam izlenmiş ve bitmiş.'


 Bu sayede Loglarımızı da tutmuş olabiliriz. Ayrıca yazılımcı kusursuz değildir "UnitID" olsun başka birşey olsun TBannerAd nesnesinde de olabilir birçok sorun cıkabilir bunun için TBannerAd nesnesinin "OnDidFail" eventine yazacağımız kodlar TBannerAd nesnesinde herhangi bir hata çıktığı anda aktif olacak olan eventtir. OnDidFail
Label1.Text := 'Hata : ' + Error;

Delphi IDE üzerinde yapacağımız değişiklikler bu kadardır sıradaki ve son işlemimiz "AndroidManifest.template.xml" dosyası içerisindedir.  <activity>  tagının bitim </activity>nin bir alt satırına aşağıda verdiğimi eklemeniz gerekmektedir. "<activity android:name="com.google.ads.AdActivity" android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"/>"

Delphi Variantın tipini öğrenme

Merhabalar, Bazen size dönecek olan variantın tipini bilmediğiniz zamanlar olur ozamanlarda aşağıdaki yazdıklarımı bilmeyen arkadaşlar için tam bir kabûs zamanıdır. Sadece variantı procedure'ye parametre olarak verirseniz size tipini söyleyecektir sizde bunu projenizde istediğiniz gibi değiştirip kullanabilirsiniz.

procedure ShowVariantType(varVar: Variant);
var
typeString : string;
begin

// Gelen variantın hangi tipe sahip olduğunu stringimize atıyoruz
case VarType(varVar) of
varEmpty : typeString := 'varEmpty';
varNull : typeString := 'varNull';
varSmallInt : typeString := 'varSmallInt';
varInteger : typeString := 'varInteger';
varSingle : typeString := 'varSingle';
varDouble : typeString := 'varDouble';
varCurrency : typeString := 'varCurrency';
varDate : typeString := 'varDate';
varOleStr : typeString := 'varOleStr';
varDispatch : typeString := 'varDispatch';
varError : typeString := 'varError';
varBoolean : typeString := 'varBoolean';
varVariant : typeString := 'varVariant';
varUnknown : typeString := 'varUnknown';
varByte : typeString := 'varByte';
varWord : typeString := 'varWord';
varLongWord : typeString := 'varLongWord';
varInt64 : typeString := 'varInt64';
varStrArg : typeString := 'varStrArg';
varString : typeString := 'varString';
varAny : typeString := 'varAny';
varTypeMask : typeString := 'varTypeMask';
end;

// Stringimize attığımız tipi artık ekranda gösterebiliriz
ShowMessage('Variantın tipi '+typeString);
end;

KAYNAK için tıklayınız!

XE5 - XE6 Android QR Code Okuma

Merhabalar,




Bu yazımda sizlere XE5 Android QR Code Okuma'dan bahsedeceğim ve tabiki siz isterseniz sadece QR yerine normal barcode bile okuyabilirsiniz size kalmış sadece göndereceğiniz parametre ile alakalı. Bu olay için kendime bir .pas dosyası hazırlamıştım, konu hiçbir şekilde bi yerden alıntı değildir. Lafı uzatmadan kodlarımıza geçelim. Hazırladığım .pas dosyasını buradan indirebilirsiniz!. Aşağıdaki kod parçalarını gerekli yerlere yazarsanız tam teşekkürlü bir Qr Code okucusunu XE5 üzerinden kullanmış olacaksınız. Ek olarak XE5'de Qr veya Barcode okumak için ZXing Barcode Scanner  programının cihazınızda yüklü olması gerekmektedir. Programın linki.

Aşağıdaki QR Codu okutabilirsiniz.


Uses
Android.QRCode
,FMX.Platform.Android
,FMX.Helpers.Android
,AndroidApi.JNI.GraphicsContentViewText
,AndroidApi.JNI.JavaTypes
,Androidapi.JNI.Net;

//Form Var
QRCodeScanner: TQRCode;

//FormCreate
QRCodeScanner := TQRCode.Create;
ZxingControl;

//FormDestroy
QRCodeScanner.Free;

//Scan Button - Tara Butonu
var
  Intent: jIntent;
begin

//İlk gönderilen parametre hangi Tür kod okutacağınızdır. Seçenekler:
//cmPRODUCT_MODE, cmQR_CODE_MODE, cmSCAN_MODE

  QRCodeScanner.Scan(cmQR_CODE_MODE, procedure(const Str: String)
  begin
    TThread.Synchronize(TThread.CurrentThread, procedure
    begin
      Memo1.Text := Str;
    end);
  end);

Ek olarak yazacağınız program için cihazda ZXing Barcode Scanner programının var olup olmadığını kendi kullandığım bir procedure ile kontrol etmiştim onuda sizler ile paylaşıyorum.

procedure ZxingControl;
  function GetZXingIntent: JIntent;
  const
    GOOGLE_ZXING = 'com.google.zxing.client.android.SCAN';
   GOOGLE_ZXING_PACKAGE = 'com.google.zxing.client.android';
 begin
    Result := TJIntent.JavaClass.init(StringToJString(GOOGLE_ZXING)); 
    Result.setPackage(StringToJString(GOOGLE_ZXING_PACKAGE)); 
  end;

  function IsIntentCallable(const AIntent: JIntent): Boolean;
  var
    LJPackageManager: JPackageManager; 
  begin
    Result := False; 
    if Assigned(AIntent) then 
    begin 
      LJPackageManager := SharedActivityContext.getPackageManager; 
      Result := LJPackageManager.queryIntentActivities(AIntent, 
      TJPackageManager.JavaClass.MATCH_DEFAULT_ONLY).size <> 0; 
    end; 
  end;

  procedure OpenURL(const AURL: string);
  var
    LIntent: JIntent; 
  begin
    LIntent := TJIntent.JavaClass.init(TJIntent.JavaClass.ACTION_VIEW, 
    TJnet_Uri.JavaClass.parse(StringToJString(AURL))); 
    MainActivity.startActivity(LIntent); 
  end;

Var
  LIsZXingCallable: Boolean;
begin //ANA BEGİN
  LIsZXingCallable := IsIntentCallable(GetZXingIntent);
  if not LIsZXingCallable then
  begin
    MessageDlg('Cihazda ZXing bulunamadı lütfen yükleyiniz!',TMsgDlgType.mtError,[TMsgDlgBtn.mbOK] , 0); 
    OpenURL('https://play.google.com/store/apps/details?id=com.google.zxing.client.android&hl=tr'); 
    MainActivity.finish(); 
  end;
end;

Delphi MD5 Şifreleme

Merhabalar, İlk defa yakın bir süre önce kendi projemde gerek duymamdan kaynaklanan sebeblerden dolayı araştırınca Delphinin MD5 şifreleme için kendi kütüphanelerinin olduğunu fark ettim ve bunu sizlerle paylaşmak istedim. Kullanımı çok basitir. Örnek kod ile göstermeye çalışacağım.

Uses IdHashMessageDigest; // Mutlaka ekliyoruz.

 

//Kullanımı

//Örneğin site ismimizi MD5 teknik ile şifreleyelim

IdMD5.HashStringAsHex('brsatalay.com');

//Dönen değer aşağıdakidir.

{E3BACBDA1115398D93FC2EFC06DA663E}

procedure TForm10.Md5ButtonClick(Sender: TObject);
var
IdMD5: TIdHashMessageDigest5;
begin
IdMD5 := TIdHashMessageDigest5.Create;
try
Memo1.Text := Memo1.Text + IdMD5.HashStringAsHex(edit1.Text) + #13+#10;
finally
IdMD5.Free;
end;
end;

DbGrid hücre renklendirme

DbGrid hücre renklendirme

Merhabalar, Eski yazılarımın bir tanesinde Cxgrid üzerinden renklendirmeyi anlatmıştım şimdi sıra Dbgrid'de hücre renklendirmeye geldi. Bunun için DbGridin DrawColumnCell  eventine girip önce işlemi yapacağımız Alan adının koşulunu sağlamalıyız bunun için if sorgumuzu aşağıdaki şekilde yazıyoruz.
if Column.FieldName = AnimesQryStates.FieldName then  //Benim alan adım States sizinki farklı birşey olabilir.

Sıra geldi bu Alanın değerlerinin koşullarını ele almaya mesela 3 tane Statümüz olsun Messenger gibi düşünelim (Uygun,Dışarda,Meşgul) durumlarımızı sırasıyla (0,1,2)  şeklinde değerler aldığını varsayarak renklendirme için kodlarımıza geçiyoruz.
case AnimesQryStates.AsInteger of //Ben case yaptım daha kısa anlasılır isteyen if sorguları ile uzatabilir
0: DBGrid1.Canvas.Brush.Color:=clGreen; // Durum Uygun ise
1: DBGrid1.Canvas.Brush.Color:=clYellow;// Durum Dışarda ise
2: DBGrid1.Canvas.Brush.Color:=clRed;// Durum Meşgul ise
end;


Android Google Play Store Manuel Uygulama Yükleme

Selamlar bu yazımda resimler ile XE5'de hazırladığımız uygulamanın nasıl Google Play Store için sitesinden yüklendiğini anlatacağım. Bu adımları izlerken google play hesabınızın var olduğunu kabul ediyorum, olmayanlar googleden araştırıp kolayca açabilirler. Göndereceğimiz APK; provizyon alınmış ve imzalanmış olması gerekmektedir. Yani DEBUG halindeki değil RELEASE halinde olmak zorunda. Resimler anlatıma başlayalım: Adım 1: Resimde gördüğünüz adımları tek tek uygulayalım.



Adım 2: Uygulamamızı kaydettiğimiz dizi içerisinden "\Android\Release\Akdeniz\bin" dosyasının içine kadar girelim ve 2. resimde gördüğünüz .apk dosyasını kolaylık olması için masasütüne kopyalayalım.



Adım 3: https://play.google.com/apps/publish/‎ adresine giriş yapılır. Adım 4: Ekranın orta kısmında gelen aşağıdaki resimdede göreceğiniz gibi "Yeni uygulama ekle" butonuna basarak APK yükleme sayfası açılır.



Adım 5: Ekrana gelen yerden uygulama dili ve uygulamamızın Google Play Store'de gözükmesini istediğiniz ismi yazılır ve APK yükle butonuna basılır.



Adım 6: %100 olup APK dosyanız yüklendikten sonra ayarlarını yapacağınız kısım açılır bu kısmı ben önce doldurduğum için bilgi amaçlı tek ekran resmi yüklüyorum fakat resimde kırmızı kutu içerisine alınmış 1. numaralı yere tıkladığınızda göreceğiniz üzerine uygulamanızın yayınlanması için zorunlu doldurmanız gereken yerleri orada size söylecektir. Eğer orada yazan zorunlu yerleri tamamlarsanız yine aynı  yere basınca göreceksiniz ki uygulama yayınlamaya müsait hâle gelmiştir. Yayınla butonuna basınca ortalama 1-3 saat arası bir sürede uygulamanız Google Play Store'de hizmete açılmış olacaktır.

 

XE5 Chat Ekranı | Whatsapp gibi

XE5 Chat Ekranı | Whatsapp gibi

Merhabalar, Bu yazımda whatsapp, facebook vb. uygulamalardaki chat ekranı yapısını anlatacağım. Sizde Rad Studio'nun XE5 ile bize sağladığı platform seçekleri ile birçok uygulama geliştirmişsinizdir ve bazılarımız da TCP Client Server yapısı veya vb.  yapılar ile kendilerine veya şirketlerine özel sohbet sistemi  yazmaya karar vermiştir. Fakat Rad Studionun bize chat için özel bir component sağladığı söylenemez bunu üzerine herkes kendi başının çaresine bakmaya çalışmaktadır. Yabancı kaynaktan bulduğum bu yapıyı tek bir procedure altında belirli parametreleri verip istediğimiz şekilde yönetmek için ve daha basite indirgeyip sizlerle paylaşmak için kolları sıvamış bulunmaktayım bakarsınız ileriki günlerde bunu componente dökebilirim :) Herşey zaman meselesi.. Neyse biz konumuza dönelim:



//ÖRNEK KULLANIM

NewMessage('R',// R= Sağdan  L= Soldan
           'Bu mesaj sağ tarafta çıkan bir mesajdır. www.brsatalay.com', // Mesajımız
           ChatScreen,//TVertScrollBox'un namesi
           Image1,// Gözükmesini istediğiniz resim, profil resmi olabilir.
           Self);/ Formumuzun adı

 

procedure NewMessage(IO, Messages: String; Parent: TVertScrollBox; Image: TImage;Form:TForm);
var
CR: TCalloutRectangle;
L: TText;
TmpImg: TImage;
begin
CR := TCalloutRectangle.Create(Form);
CR.Parent := Parent;
CR.Align := TAlignLayout.alTop;

if IO = 'R' then CR.CalloutPosition := TCalloutPosition.cpRight
else
if IO = 'L' then CR.CalloutPosition := TCalloutPosition.cpLeft;

CR.Margins.Top := 10;
CR.Margins.Bottom := 10;
CR.Margins.Left := 5;
CR.Height := 55;

L := TText.Create(Form);
L.Parent := CR;
L.Align := TAlignLayout.alClient;
L.Text := Messages;
L.Margins.Right := 15;
if IO = 'R' then
L.Margins.Left := 5
else if IO = 'L' then
L.Margins.Left := 15;
L.Width := CR.Width-20;

L.WordWrap := True;
L.AutoSize := True;

TmpImg := TImage.Create(Form);
TmpImg.Parent := CR;

if IO = 'R' then TmpImg.Align := TAlignLayout.alLeft
else
if IO = 'L' then TmpImg.Align := TAlignLayout.alRight;

TmpImg.Bitmap.Assign(Image.Bitmap);
TmpImg.Width := 65;
end;

 Kaynak

XE5 Android GetVersion | Application Version

XE5 Android GetVersion

Merhabalar bu yazıda uygulamamızın içerisinden info, about us gibi kendi uygulamamız bilgilerini listelediğimiz ekran için versiyon bilgisini native olarak bulmayı öğreneceğiz. Böyle bir olay için android sınıflarından "JPackageManager" kullanmamız gerekmektedir. Ben bu işi fonksiyon ile çağırdım sizde istediğiniz gibi kullanabilirsiniz.

uses// Eklenecek Kütüphaneler
Androidapi.JNI.JavaTypes,
FMX.Helpers.Android,
Androidapi.JNI.GraphicsContentViewText;

 

Function GetVersion: String;
var
PackageManager: JPackageManager;
PackageInfo : JPackageInfo;
begin
PackageManager := SharedActivity.getPackageManager;
PackageInfo := PackageManager.getPackageInfo(SharedActivityContext.getPackageName(), TJPackageManager.JavaClass.GET_ACTIVITIES);
Result := JStringToString(PackageInfo.versionName);
end;

  Not: Kodu stackoverflow.com adresinde gezinirken ilgimi çeken bir konuda bulmuştum konu linkinide veriyorum. Link

XE5 Android Native Takvim ve Etkinliklere erişim

Öncelikle Android 4.0 (API Level 14)'nin indirilmiş olması gerekmektedir. Eğer Apileriniz hazır ise kodlara geçebiliriz.
uses
  Androidapi.JNI.GraphicsContentViewText,
  FMX.Helpers.Android,
  Androidapi.JNI.JavaTypes;

procedure TForm1.Button1Click(Sender: TObject);
var
  Intent: JIntent;
  Calendar: JCalendar;
begin
  Calendar := TJCalendar.JavaClass.getInstance;
  Intent := TJIntent.Create;
  Intent.setType(StringToJString('vnd.android.cursor.item/event'));
  intent.putExtra(StringToJString('beginTime'), Calendar.getTimeInMillis());
  intent.putExtra(StringToJString('allDay'), true);
  intent.putExtra(StringToJString('rrule'), StringToJString('FREQ=YEARLY'));
  intent.putExtra(StringToJString('endTime'), Calendar.getTimeInMillis()+3600*1000);
  intent.putExtra(StringToJString('title'), StringToJString('Hello from Delphi'));
  SharedActivity.startActivity(Intent);
end;
  Not: Kodu stackoverflow.com adresinde gezinirken ilgimi çeken bir konuda bulmuştum konu linkinide veriyorum. Link

XE5 Android Splash Screen

Merhabalar, Bu yazımda XE5 Android Splash Screen kullanımından bahsedeceğim. Zaman zaman uygulamanız ilk açılışta internet yavaşlığından, verileri databaseden çekerken veya benzeri sebebler ile siyah ekranda birazda olsa bir bekleme süresi yapar amacımız bunun önüne geçip bizim kendi istediğimiz bir resimin bu ekranda gösterilmesi. ilk olarak: Projemizin anadizininde "res" adında bir klasör oluşturup içerisine Splash Screen'de gözükmesini istediğiniz resmi atıyoruz ben "Loading.png" olarak yaptım. Sonrasında bir .xml dosyası oluşturacas aynı "res" klasörüne atacas ve bunun adı "styles.xml" olacak içeriği ise:
<?xml version="1.0" encoding="UTF-8"?>
<resources>
<style name="MyTheme.NoTitleBar.CustomBackground" parent="@android:Theme.Black">
<item name="android:windowBackground">@drawable/loading</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowFullscreen">true</item>
<item name="android:windowContentOverlay">@null</item>
</style>
</resources>

Projemizi açıyoruz "Project>>Deployment" tıklayınca açılan sekmede sol üsteki "Add Files" butonuna basarak "res" klasörümüzün içerisindeki 2 dosyamızı seçiyoruz. Şimdi yapmamız gereken ekrana eklenen 2 dosyanın platform özelliğini sadece "Android" yapmak, bunun için eklediğimiz dosyalara sıra ile gelip "Platform" bölümünden seçip f2 basınca dikkatinizi çekecektir browse butonu aktif olur "..." şeklinde yanında yer alır tıklarak Ekrana gelen bölümde sadece Android seçili kalacak şekilde ikisinide ayarlıyoruz. Bir sonraki aşamamız "Remote Path" ayarlamalarıdır. Biraz önce yaptığımız gibi "Remote Path" bölümünden sıra ile eklediklerimize tıkladıktan sonra f2 basın göreceksiniz ki edit moda geçerek düzeltmenize izin verecektir. Bu sayede doğrusu aşağıdakiler olacak şekilde değiştiriniz.

Loading.png                  =               res\drawable-port
styles.xml                      =                res\values

Ayarlamaları yaptıktan sonra 1 kere CTRL + F9 basınız ve "AndroidManifest.template.xml" dosyasının oluşmasını sağlayacaktır. "AndroidManifest.template.xml" dosyasının içini açın ve android:theme="%theme%" olan yeri android:theme="@style/MyTheme.NoTitleBar.CustomBackground" olarak değiştiriniz. Dosyayı kaydettikten sonra F9 basarak Keyfini çıkarabilirsiniz.   Not: Bu anlatımı bir Çin sitesinden bulmuştum suan linkini tekrar bulamadığım için kaynak gösteremiyorum.

XE5 Android IMEI Okuma

XE5 Android IMEI Okuma

Merhabalar XE5 ile zaman ilerledikçe kendi uygulamalarımızı geliştirmeye devam ediyoruz. Günü geldikçede kendimizde lisanslı uygulamalar üretme isteği er yada geç uyanacağı kesindir. Bunun için birçok çeşitli yöntemler vardır; Kullanıcı adına göre, Modeme göre veya Cihaz sayısına göre buda IMEI numaraları ile gerçekleşmektedir. IMEI NEDIR?



Bu sayede yazdığınız uygulamalarda kullanıcıların kaç hesabı olursa olsun sizin belirlediğiniz IMEI numaralarına göre bir lisanslama gerçekleştirirseniz çaresiz sınırlar içerisinde kullanmak durumunda kalacaktır. Lafı fazla uzatmadan kodumuzu paylasıyorum bir fonksiyon içerisinde yazılı olan bu kodumuzun çalışması için Uses kısmına aşağıdakileride yazmayı unutmamanız gerekmektedir.
uses
Androidapi.JNI.Telephony, Androidapi.JNI.Provider ,
Androidapi.JNIBridge, Androidapi.JNI.GraphicsContentViewText,
Androidapi.JNI.JavaTypes,FMX.Helpers.Android;

READ_PHONE_STATE permission = true  //Okumak izin sağlamış oluyoruz

function IMEIOku():String;
var
obj     : JObject;
tm      : JTelephonyManager;
strIMEI : String;
begin
obj := SharedActivityContext.getSystemService(TJContext.JavaClass.TELEPHONY_SERVICE);
if obj <> nil then
begin
tm := TJTelephonyManager.Wrap( (obj as ILocalObject).GetObjectID );
if tm <> nil then
strIMEI := JStringToString(tm.getDeviceId);
end;
if strIMEI = '' then
strIMEI := JStringToString( TJSettings_Secure.JavaClass.getString( SharedActivity.getContentResolver, TJSettings_Secure.JavaClass.ANDROID_ID ) );
Result := strIMEI;
end;

    Bu güzel örneğini bizlere sunan Muharrem ARMAN (mrmarman) hocamıza teşekkürler.

XE5 Android diğer uygulamalara TEXT gönderme

Merhabalar, Bu yazıda kendi yazdığımız uygulama üzerinden text veri kabul eden diğer uygulamalara veri göndermeyi göreceğiz. Bu uygulamalar : Facebook, Wassap, Android SMS, Google Plus vb.
  


 Ben bir procedure içine yaptım kendi uygulamamda farklı yerlerde kullanacağım için
Uses,FMX.Helpers.Android,Androidapi.JNI.GraphicsContentViewText,Androidapi.JNI.JavaTypes,FMX.Platform.Android;

 

procedure Paylas(Str: String);
var
Intent: JIntent;
begin
Intent := TJIntent.Create;
Intent.setType(StringToJString('text/plain'));// Burada göndereceğimiz verinin türünü belirtiyoruz.

//Kullanacağı Android Sınıfı SEND olacak kendiniz SENDTO sınıfınıda araştırabilirsiniz karşınıza eğlenceli şey gelecektir.
Intent.setAction(TJIntent.JavaClass.ACTION_SEND);
Intent.putExtra(TJIntent.JavaClass.EXTRA_TEXT,
StringToJString(Str)); //Göndereğimiz metni ben Str değişkenine atamıştım oradan alıyor.
MainActivity.startActivity(Intent);
end;

XE5 Android ekran ayarları

Merhabalar, Bir çoğumuz projelerimizin hizalamalarında zaman zaman sorunlarla karşılaşırız ve dikeyde ayarladıklarımız her zaman yatayda sağlıklı gözükmeye bilir. Bu sebebden dolayı projelerimizi belirli ekran durumlarında sabit kullanmamız gerekebilir. Bu ekran ayarları nelerdir:
Dikey, Ters dikey, Her zaman sağa yatay, Her zaman sola yatay.
Şimdi bu ekran ayarlarını nasıl sabitleyeceğimizi Resimler ile görelim:



        

XE5 Android player ile online video

Merhabalar, Gerek dışardan belirli konularda yardım alarak gerekse kendi cabalarımla XE5'i daha fazla öğrenmeye çalışırken kendimce güzel bir örnek çıkardım ve düşündüm ki birçok arkadaşımız yararlanmak isteyebilir.
Projenin içeriği:
 ~VK.comdan XSuperObject yardımı ile Json verilerini parse edip Android playerde video izleme, ~Sibnet.com dan Android playerde video izleme,
~TurkanimeTv.net video playerinden Android playerde video izleme. Hatalarım varsa düzeltenleri için teşekkürler.

İndirmek  için tıklayın. - Download!



XE5 32-bit'de Mobil Preview Sorunu

Merhabalar, Birçok arkadaşımızında başına geldiğini düşünerek bulduğumuz kücük bir şeyi sizlerle paylaşmak istiyorum. Denemeleriniz üzerine Android veya IOS ortamında hazırladığınız uygulamayı daha hızlı bir şekilde debug vs. işleminden geçirmek istediğinizde platform seçeneklerinden 32-bit seçeneği ile windows ortamında çalıştırabilirsiniz. Fakat bu 32-bit çevrildiğinde componentlerin hiç birinin orjinal şekillerinde olmadığı dikkatinizi çekecektir. Uzun lafın kısası bahsettiğim şey:

 

 İşte bu resimde görmüş olduğunuz ekran gibi. Bu olay XE5 Update 2 ile gelmiştir. Eğer ki XE5 Update 2 sürümününe güncellemeden önce 32-bit platformunu eklemişseniz ilk önce kaldırınız ve tekrar 32-bit platformunu ekleyiniz ki Project.dpr dosyamızın Uses bölümüne FMX.MobilePreview kütüphanesini ekleyebilsin.

  

 Bu kısa işlemden sonra fark edeceksiniz ki StyleLookup'dan seçtiğiniz özellikleri Windows platformdada rahatça kullanabileceksiniz.

 Kaynaklar: http://blog.marcocantu.com/blog/fmx_mobile_preview_xe5upd2.html http://docwiki.embarcadero.com/RADStudio/XE5/en/Mobile_Preview

XE5 Android Video Açma

Herkese merhaba. Bu yazıda deploy ettiğimiz videoyu cihazın kendi video playeri ile çalıştıracağız. Benzer yöntemleri internetteki kaynaklardan edinebilirsiniz fakat en doğru yöntemi bilmemiz her zaman zorunludur. Resimdeki gibi bir ekran tasarlayabilirsiniz.

 
 

 Play butonuna aşağıdaki kodları yazıyoruz
procedure TForm1.Button1Click(Sender: TObject);
var
Intent: JIntent;
FileName, DestFileName: string;
Data: Jnet_Uri;
CompName: JComponentName;
const
VIDEO_FILENAME = 'videoviewdemo.mp4';
begin
FileName := System.IOUtils.TPath.GetDocumentsPath + PathDelim + VIDEO_FILENAME;
DestFileName := TPath.GetSharedDownloadsPath + PathDelim + VIDEO_FILENAME;
// Copy the file into a public path (you can use any public path)
TFile.Copy(FileName, DestFileName, true);
Data := TJnet_Uri.JavaClass.parse(StringToJString('file://' + DestFileName));
Intent := TJIntent.Create;
Intent.setAction(TJIntent.JavaClass.ACTION_VIEW);
if CheckBox1.IsChecked then
begin
CompName := TJComponentName.JavaClass.init(StringToJString('android'),
StringToJString('com.android.internal.app.ResolverActivity'));
Intent.setComponent(CompName);
end;
Intent.setDataAndType(Data, StringToJString('video/mp4'));
try
MainActivity.startActivity(Intent);
except
on E: Exception do
begin
Label1.Text := E.Message;
end;
end;
end;
Orjinal konu için tıklayınız. İngilizcem pek iyi sayılmaz ama anlayabildiğimce sizlere anlatmaya çalıştım.