Merhaba. Media olayını şimdilik bir kenara bırakıyorum. Geçen yıl androidde
BroadcastReceiver kullanmak için tüm yapılmış sonradan yeni sürümlerde çalışmamış örnekleri taplayıp inceliyerek kendim yeni sürümlere uyumlusunu hazırlamıştım. Bu konuyla ilgisi ve konuya irerleme katacağını düşünüyorum. Sistemi kısaca özetlesem delphi pas dosyasındakı kodu javadakı ilgili yerde javada kod yazmadan kullanmıştım. Bu tür kaynaklar yetersiz olduğundan olayı örnek projeye taşımağı düşündüm. Test için yapmak istediğim boş bir android projesi java ile delphiye enteqre ederek delphideki kodlarla projeyi kullanma. TurboCocoa bu alt yapıyı kullanıyor kodlarına bakınca kendisine özel kod yazdığını gördüm. Kodlar bunlar.
Orjinal java kodu. Native bağlantısı yapılmış. Java konusunda çok bilgim yok malesef.
package com.zairovsoft;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
public class Receiver extends BroadcastReceiver
{
public native void NativeReceiver(Context paramContext, Intent paramIntent);
public void onReceive(Context paramContext, Intent paramIntent)
{
NativeReceiver(paramContext, paramIntent);
}
}
Kodu java2op çevirilmiş referans hali.
unit jnilibrary;
interface
uses
Androidapi.JNIBridge,
Androidapi.JNI.GraphicsContentViewText;
type
JReceiver = interface;//com.zairovsoft.Receiver
JReceiverClass = interface(JBroadcastReceiverClass)
['{01E6D5D7-662C-4CA5-8D6E-715250DE9012}']
end;
[JavaSignature('com/zairovsoft/Receiver')]
JReceiver = interface(JBroadcastReceiver)
['{94C6F451-984F-4766-94B8-DE9087D4C4C2}']
end;
TJReceiver = class(TJavaGenericImport<JReceiverClass, JReceiver>) end;
implementation
procedure RegisterTypes;
begin
TRegTypes.RegisterType('jnilibrary.JReceiver', TypeInfo(jnilibrary.JReceiver));
end;
initialization
RegisterTypes;
end.
Ve son olarak ayrı bir pas dosyasında java bağlantı işlemleri ve çalışacak kod kısmı.
unit uReceiver;
interface
uses
System.SysUtils,
System.Classes,
FMX.Helpers.Android,
Androidapi.Helpers,
Androidapi.JNI,
Androidapi.JNIBridge,
Androidapi.JNI.GraphicsContentViewText,
Androidapi.JNI.JavaTypes,
Androidapi.JNI.Telephony,
Androidapi.JNI.Os,
Androidapi.JNI.Widget,
jnilibrary;
type
TReceiver = class(TJavaGenericImport<JReceiverClass, JReceiver>)
protected
constructor _Create;
public
class function Create: JReceiver;
procedure OnReceive(Context: JContext; Intent: JIntent);
end;
var
FReceiver: TReceiver;
FContext: JContext;
FIntent: JIntent;
implementation
{$REGION 'NativeReceiver'}
procedure ReceiverOnReceiveThreadSwitcher;
begin
FReceiver.OnReceive(FContext, FIntent);
end;
procedure NativeReceiver(PEnv: PJNIEnv; This: JNIObject;
JNIContext, JNIReceivedIntent: JNIObject); cdecl;
begin
FContext := TJContext.Wrap(JNIContext);
FIntent := TJIntent.Wrap(JNIReceivedIntent);
TThread.Synchronize(nil, ReceiverOnReceiveThreadSwitcher);
end;
procedure RegisterDelphiNativeMethods;
var
PEnv: PJNIEnv;
ReceiverClass: JNIClass;
NativeMethod: JNINativeMethod;
begin
PEnv := TJNIResolver.GetJNIEnv;
NativeMethod.Name := 'NativeReceiver';
NativeMethod.Signature := '(Landroid/content/Context;Landroid/content/Intent; )V';
NativeMethod.FnPtr := @NativeReceiver;
ReceiverClass := TJNIResolver.GetJavaClassID('com.zairovsoft.Receiver');
if ReceiverClass <> nil then
begin
PEnv^.RegisterNatives(PEnv, ReceiverClass, @NativeMethod, 1);
PEnv^.DeleteLocalRef(PEnv, ReceiverClass);
end;
end;
{$ENDREGION}
{ TReceiver }
constructor TReceiver._Create;
begin
inherited;
end;
class function TReceiver.Create: JReceiver;
begin
Result := inherited Create;
FReceiver := TReceiver._Create;
end;
procedure TReceiver.OnReceive(Context: JContext; Intent: JIntent);
procedure ShowToast(Msg: string);
begin
CallInUiThread(
procedure
begin
TJToast.JavaClass.makeText(
TAndroidHelper.Context,
StrToJCharSequence(Msg),
TJToast.JavaClass.LENGTH_LONG).show;
end);
end;
var
S: string;
begin
S := JStringToString(Intent.getStringExtra(StringToJString('incoming_number')));
if Length(S) > 0 then
ShowToast('In coming call number: ' + S)
else
ShowToast('No Number..');
end;
initialization
RegisterDelphiNativeMethods;
end.