delphi background service etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
delphi background service etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

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.

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

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);

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.

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.



Ek olarak yapılması gereken 2 ayar vardır bunlar:



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.

28 Haziran 2014 Cumartesi

Delphi Android Uygulamayı arka planda devam ettirme

Merhabalar bu işlem sayesinde programdan çıkmak yerine uygulamayı arka planda sürdürmeye devam etmektedir. Kodu şahsen denemedim deneyen Ali Yıldırım arkadaşımıza teşekkürler.


Uses FMX.VirtualKeyboard,FMX.Platform, FMX.Helpers.Android;

procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word; var KeyChar: Char;
  Shift: TShiftState);
Var
  keyboard: IFMXVirtualKeyboardService;
begin
  if (Key = vkHardwareBack) then
  Begin
 
    keyboard := TPlatformServices.Current.GetPlatformService(IFMXVirtualKeyboardService) as IFMXVirtualKeyboardService;
 
    if  TVirtualKeyboardState.Visible in keyboard.VirtualKeyBoardState then   Exit;
 
    SharedActivity.moveTaskToBack(True);
 
    Key := 0;
 
  End;
end;