Konuyu Paylaş : facebook gplus twitter

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: Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
Detaylı bilgi için: Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
WWW
Cevapla
#2
Tşkler Ali Kardeş
Alıntı:
yarumdan ayrildum gözlerum nemli nemli 

rakı haramdur diye çay içtum demli demli...Heart 
Cevapla

Konuyu Paylaş : facebook gplus twitter





Konuyu Okuyanlar: 1 Ziyaretçi