Konuyu Oyla:
  • Derecelendirme: 5/5 - 1 oy
  • 1
  • 2
  • 3
  • 4
  • 5
BroadcastReceiver kullanımı
#1
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ış.
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
WWW
Cevapla


Bu Konudaki Yorumlar
BroadcastReceiver kullanımı - Yazar: AliZairov - 26-01-2017, Saat: 12:36
BroadcastReceiver kullanımı - Yazar: esrehmaan - 26-01-2017, Saat: 20:18
Cvp: BroadcastReceiver kullanımı - Yazar: CesuR - 15-12-2021, Saat: 11:56
Cvp: BroadcastReceiver kullanımı - Yazar: AliZairov - 15-12-2021, Saat: 20:24

Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Pasfmt-rad Code Formatter kurulumu ve kullanımı Mr.X 4 264 10-04-2026, Saat: 16:22
Son Yorum: Mr.X
  Mikrotik – Lazarus-Delphi API Kullanımı SercanTEK 7 5.871 18-08-2024, Saat: 13:32
Son Yorum: SercanTEK
  CxGrid CustomDrawCell kullanımı 3ddark 5 7.110 10-06-2020, Saat: 17:59
Son Yorum: 3ddark
  Özelleştirilmiş ayarlarıyla Skype (ver.8) kullanımı sabanakman 1 2.836 31-01-2019, Saat: 07:55
Son Yorum: hi_selamlar



Konuyu Okuyanlar: 1 Ziyaretçi