Konuyu Oyla:
  • Derecelendirme: 5/5 - 1 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Java İle Android Program Tetikleme
#1
Information 
Herkese selamlar,

Bu makalemde sizlere Java ile uygulamanızı nasıl tetikleyeceğinizi anlatacağım. Rus bir eleman sağolsun(Rusçada olsa resimlerden falan anlamaya çalıştım) makalesinden yapmış olduğu aşamaları sizinle de paylaşmak istedim. 

İlk olarak mantığını anlamak gerekirse bir Java dosyası derlemesi yapacağız ve Delphi IDE'si aracılığı ile library bölümüne ekleyeceğiz. Sonrasında bu dosyayı tetikleyerek, uygulamamızın açılmasını sağlayacağız.

Exclamation  1. Aşama: Java Derleme

 Bu aşamada bir klasör oluşturarak daha rahat çalışmanızı tavsiye ediyorum. Notepad uygulamasını(veya başka bir düzenleme programı. Ben EditPlus3 kullanıyorum.) açararak aşağıda ki Java derleme kodlarınız yazıyoruz.

@echo off
setlocal

if x%ANDROID% == x set ANDROID=E:\Program Files (x86)\Embarcadero\Studio\19.0\PlatformSDKs\android-sdk-windows
set ANDROID_PLATFORM=%ANDROID%\platforms\android-27
set PROJ_DIR=%CD%
set VERBOSE=0

echo.
echo Compiling the Java service activity source files
echo.
mkdir output 2> nul
mkdir output\classes 2> nul
if x%VERBOSE% == x1 SET VERBOSE_FLAG=-verbose
javac -source 1.7 -target 1.7 %VERBOSE_FLAG% -Xlint:deprecation -cp %ANDROID_PLATFORM%\android.jar -d output\classes src\com\ServiceExample\ServisExample.java

echo.
echo Creating jar containing the new classes
echo.
mkdir output\jar 2> nul
if x%VERBOSE% == x1 SET VERBOSE_FLAG=v
jar c%VERBOSE_FLAG%f output\jar\ServisExample.jar -C output\classes com

echo.
echo Now we have the end result, which is output\jar\ServisExample.jar

:Exit

pause

endlocal

Exclamation Önemli Not: Belirtilmiş olan olan SDK ve Java yollarını kendinize göre ayarlamanız gerekmektedir. Şu anda benim standart olarak kullanmış olduğum yerler mevcut.

Idea İpucu: Kısayoldan "Delphi IDE> Tools> Options> SDK Manager" bölümünden tanımlı yolları bulabilirsiniz. 

Exclamation Önemli Not: Java derlemesi için gerekli komutları tanımlamanız gerekmektedir. "Bilgisayar> Özellikler> Gelişmiş> Ortam Değişkenleri" yolunu takip ederek, "Path" bölümünü düzenlemeniz gerekmektedir. Aşağıdaki resimde göründüğü gibi Java/bin klasörünü tanımlıyorsunuz. Unutmayın ki; her yol belirtilişinde ";" kullanılmaktadır.


nOOVrM.png

"Build" olayını hallettiğimize göre artık gerekli dosyaları oluşturabiliriz. "Build" kodunda belirtlien "src\com\ServiceExample\ServisExample.java" yoluna göre klasör açalım(İsteğe bağlı olarak kısaltılıp, değiştirilebilir.). En son klasörün içine ".java" uzantılı bir dosya ekleyelim(Herhangi bir editör ile). Java dosyamızın içeriği aşağıda bulunmaktadır.

package com.ServiceExample;
 
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

public class ServisExample extends BroadcastReceiver {
   public void onReceive(Context context, Intent intent) {
           Intent TestLauncher = new Intent();
           TestLauncher.setClassName(context, "com.embarcadero.firemonkey.FMXNativeActivity");
           TestLauncher.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
           context.startActivity(TestLauncher);
   }
}

 Burada bir "Intent" oluşturulup TestLauncher olarak tanımlanıyor. Sonrasında FLAG_ACTIVITY_NEW_TASK ile yeni bir işlem(uygulamamızın açılması için) oluşturup. Context.StartActivity komutu ile TestLauncher tanımlı uygulamayı tetikliyor. 

Exclamation Önemli Not: Belirtlien Class ismine dikkat etmeniz gerekmekte şu anda "ServisExample" olarak tanımlı. Bu tanımı Delphi'de çağırma işleminde kullanacağız.

Bu işlemlerin ardından artık "Build.bat" dosyamızı çalıştırmamız da bir sorun yok. Dosya çalıştıktan sonra; otomatik oluşan "output\jar" yolunda Delphi'de kullanacağımız Java kütüphanesi oluşmuş olarak görmeniz gerekmektedir.

  Java kısmı biter  Blush 


Exclamation 2. Aşama: Delphi Kısmı
 
Delphi'yi açarak işlemlerimize başlayalım. Hemen bir Android uygulama oluşturup, formumuzun içine bir tane buton ekleyelim. 

jyyPaG.png

"Project Manager> TargetPlatforms> Android - Android SDK xx> Libraries" yolunu izleyerek, oluşturmuş olduğumuz ".jar" dosyasını projemize ekliyoruz. Bu aşamalardan sonra yapmamız gereken küçük bir değişiklik olacak. Projemizi bir "Build" edelim. Proje klasörüne gittiğimizde bir dosya göreceksiniz; "AndroidManifest.template.xml" adlı dosyayı editör ile açıp gerekli düzenlemeleri yapın.

JQQr05.png

Exclamation Önemli Not: Resim göründüğü bölümde Java kodumuzu yazarken kullanmış olduğum(ilk satırda ki koddan bahsediyorum) "package com.ServiceExample" kodu ile Class olarak tanımladığımız "ServisExample" isimlerini birleştirerek Class yapımızı tanımlıyoruz. 

bkz. (Birleşimi; com.ServiceExample.ServisExample).

  Devam edelim...

Şimdi ise Android sistemin takvim metodunu kullanarak, fonksiyonumuzu oluşturuyoruz ki mili saniyeyi, saniyeye çevirebilelim.

function getTimeAfterInSecs(Seconds: Integer): Int64;
var
 Calendar: JCalendar;
begin
 Calendar := TJCalendar.JavaClass.getInstance;
 Calendar.add(TJCalendar.JavaClass.SECOND, Seconds);
 Result := Calendar.getTimeInMillis;
end;

 Bu fonksiyonumuzu ekledikten sonra artık rahatça kodumuzu yazabiliriz.

procedure TfrmMain.Button1Click(Sender: TObject);
var
 Intent: JIntent;
 PendingIntent: JPendingIntent;
begin
 Intent := TJIntent.Create;
 Intent.setClassName(TAndroidHelper.Context, StringToJString('com.embarcadero.firemonkey.FMXNativeActivity'));
 PendingIntent := TJPendingIntent.JavaClass.getActivity(TAndroidHelper.Context, 1, Intent, 0);
 TAndroidHelper.AlarmManager.&set(TJAlarmManager.JavaClass.RTC_WAKEUP, getTimeAfterInSecs(10),
   PendingIntent);
end;

Prosedürü açıklayacak olursam; bu prosedür ile biz yazmış olduğumuz Java dosyamızda ki kodu time ile tetikleyip, RTC_WAKEUP ile çalıştırıyoruz. Java dosyamızda "Intent" ile işlem yaptığımız için Delphi ile de "Intent" yapısını kullanarak bir nevi iletişime geçmesini sağlıyoruz. StringToJString ile Class ismini alıyor ve işimize bakıyoruz. "getTimeAfterInSecs(10)" kodu ile 10 saniye sonra programımızın açılmasını istediğimizi bildiriyoruz. Sonrasında ise işlemlerimiz tamam...

Bu makale bir servis niteliği taşımaz. Sadece tetikleme niteliği taşır ve bu işlemler ile programınızı "RECEIVE_BOOT_COMPLETED" iznini ve "BOOT_COMPLETED" eylemini yakalayarak işleminizi gerçekleştirebilirsiniz.

Bu araştırma için yaklaşık 5 günlük bir zaman harcadım. Bu araştırmalarımda bana yardımcı olan;

Uğur PARLAYAN (Çeviri için)  Blush

Fesih ARSLAN (İpin ucunu elime verdiği için)  Big Grin

gonulali (Kaynak yardımı için)  Heart

   Teşekkür ederim...

Şimdi biraz bu olay hakkında konuşmaya gelirsek. Delphi'nin bu konu hakkında biraz yetersiz kaldığını düşünüyorum çünkü herhangi bir dilden yardım almadan bağımsız olarak (en azından bu kadar uğraştırmadan) olayı halletmesi gerekirdi. Yani birkaç sürüme artık bu olaya el atması gerek çünkü önemli konulardan bir tanesi. 

Umarım bu makale ile umarım yardımcı olabilmişimdir. Ben aşağıya yine de incelemeniz bakımından bırakayım.

Kaynak Dosyalar | GitHub


Blush  Destek için GitHub üzerinden projeyi yıldızlayabilir ve REP puanı ile süsleyebilirsiniz. 

m22lvR.png


Yaralandığım Kaynaklar:

DelphiFMAndroid
Blog.Blong


Saygılarımla,
İyi çalışmalar.
kisisel_logo_dark.png
WWW
Cevapla


Bu Konudaki Yorumlar
Java İle Android Program Tetikleme - Yazar: Halil Han BADEM - 17-02-2018, Saat: 22:55
Cvp: Java İle Android Program Tetikleme - Yazar: Fesih ARSLAN - 17-02-2018, Saat: 23:26
Cvp: Java İle Android Program Tetikleme - Yazar: Fesih ARSLAN - 17-02-2018, Saat: 23:37
Cvp: Java İle Android Program Tetikleme - Yazar: Fesih ARSLAN - 18-02-2018, Saat: 00:31

Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Android Uygulama İkonu ARM 2 400 11-11-2025, Saat: 12:15
Son Yorum: ARM
  Android SDK kajmerantime 1 385 28-10-2025, Saat: 14:53
Son Yorum: cinarbil
  Android El Terminali Barkod Okuyucu Verisi tuna 0 334 17-10-2025, Saat: 01:07
Son Yorum: tuna
  Android işlem öneriliyor uyarısı! Coban 9 1.863 07-08-2025, Saat: 12:07
Son Yorum: RAD Coder
  FMX Android Adaptive Icons kullanabilir miyiz? egeven 1 2.157 30-06-2025, Saat: 21:46
Son Yorum: emozgun



Konuyu Okuyanlar: 1 Ziyaretçi