26-01-2017, Saat: 12:36
(Son Düzenleme: 15-12-2021, Saat: 20:26, Düzenleyen: AliZairov.
Sebep: link
)
Merhaba. 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.
BroadcastReceiver nedir?
Uygulamada gelen çağrı, kısa mesaj ve s. dinleme yapmak için kullanılır.
Orjinal java kodu. Native bağlantısı yapılmış.
Kodu java2op çevirilmiş referans hali.
Ve son olarak ayrı bir pas dosyasında java bağlantı işlemleri ve çalışacak kod kısmı.
Örnek hazır proje: BroadcastReceiver.zip
Detaylı bilgi için: BroadcastReceiver
BroadcastReceiver nedir?
Uygulamada gelen çağrı, kısa mesaj ve s. dinleme yapmak için kullanılır.
Orjinal java kodu. Native bağlantısı yapılmış.
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.
Örnek hazır proje: BroadcastReceiver.zip
Detaylı bilgi için: BroadcastReceiver

