Konuyu Paylaş : facebook gplus twitter

Konuyu Oyla:
  • Derecelendirme: 5/5 - 1 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Telefonu Cevaplama
#1
Merhaba arkadaşlar,

Android telefonlarda uygulamadan telefona nasıl cevap verilir ? java için aşağıdaki gibi örnek var

 end call açlışıyor ama answerRingingCall çalışmıyor firemonkeyde bunu nasıl yapacaz bilen varmıdır ?


 
public void onReceive(Context context, Intent intent) {
 Log.v(TAG, "Receving....");
 TelephonyManager telephony = (TelephonyManager) 
 context.getSystemService(Context.TELEPHONY_SERVICE);  
 try {
  Class c = Class.forName(telephony.getClass().getName());
  Method m = c.getDeclaredMethod("getITelephony");
  m.setAccessible(true);
  telephonyService = (ITelephony) m.invoke(telephony);
  //telephonyService.silenceRinger();
  telephonyService.endCall(); ////// end call açlışıyor ama answerRingingCall çalışmıyor firemonkeyde bunu nasıl yapacaz bilen varmıdır ?
 } catch (Exception e) {
  e.printStackTrace();
 }
 
}

Alıntı:
yarumdan ayrildum gözlerum nemli nemli 

rakı haramdur diye çay içtum demli demli...Heart 
Cevapla
#2
Telefonu cevaplayamazsın, root izni gerektirir.
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
Kuvvete dayanamayan adalet aciz, 
Adalete dayanamayan kuvvet zalimdir.
WWW
Cevapla
#3
root izni verip öyle yapalım o zaman Smile
Alıntı:
yarumdan ayrildum gözlerum nemli nemli 

rakı haramdur diye çay içtum demli demli...Heart 
Cevapla
#4
(27-12-2016, Saat: 11:54)esrehmaan Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlMerhaba arkadaşlar,

Android telefonlarda uygulamadan telefona nasıl cevap verilir ? java için aşağıdaki gibi örnek var

 end call açlışıyor ama answerRingingCall çalışmıyor firemonkeyde bunu nasıl yapacaz bilen varmıdır ?


 
public void onReceive(Context context, Intent intent) {
  Log.v(TAG, "Receving....");
 TelephonyManager telephony = (TelephonyManager) 
 context.getSystemService(Context.TELEPHONY_SERVICE);  
 try {
  Class c = Class.forName(telephony.getClass().getName());
  Method m = c.getDeclaredMethod("getITelephony");
  m.setAccessible(true);
  telephonyService = (ITelephony) m.invoke(telephony);
  //telephonyService.silenceRinger();
  telephonyService.endCall(); ////// end call açlışıyor ama answerRingingCall çalışmıyor firemonkeyde bunu nasıl yapacaz bilen varmıdır ?
 } catch (Exception e) {
  e.printStackTrace();
 }
 
}


Vermiş olduğunuz kod, TelephonyManager sınıfının Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol methodunu reflection kullanarak çağırıyor.
Sonrasında methoddan dönen nesnenin de endCall fonksiyonu çağırılıyor.

Bu yöntemin karşılığını bir başka platformda, belki wrapper olarak bulabilirsiniz.
Belki bahsettiğim sınıf Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol'dir.

FireMonkey (AteşŞebeği) platformu ile uğraşmadığım için şimdilik söyleyeceklerim bunlardan ibaret.
One of the major software engineering challanges is managing change.
Cevapla
#5
(27-12-2016, Saat: 13:41)kimimben Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlVermiş olduğunuz kod, TelephonyManager sınıfının Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol methodunu reflection kullanarak çağırıyor.
Sonrasında methoddan dönen nesnenin de endCall fonksiyonu çağırılıyor.

Bu yöntemin karşılığını bir başka platformda, belki wrapper olarak bulabilirsiniz.
Belki bahsettiğim sınıf Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol'dir.

FireMonkey (AteşŞebeği) platformu ile uğraşmadığım için şimdilik söyleyeceklerim bunlardan ibaret.

aşağıdaki kodu kullanarak gelen aramayı yada giden aramayı kapatabiliyorum ancak  endcall yerine answerRingingCall  yazınca çalışmıyor. Bahsettiğinizi denedim ancak olmadı maalesef

  telephonyService:= TAndroidHelper.Context.getSystemService(TJContext.JavaClass.TELEPHONY_SERVICE);
   classTelephony := TJOwnLang_Class.JavaClass.forName(telephonyService.getClass.getName);
   methodGetITelephony:= classTelephony.getDeclaredMethod(StringToJString('getITelephony'), nil);
   methodGetITelephony.setAccessible(True);

   telephonyInterface := methodGetITelephony.invoke(telephonyService, nil);
   telephonyInterfaceClass := TJOwnLang_Class.JavaClass.forName(telephonyInterface.getClass.getName);
   methodEndCall:= telephonyInterfaceClass.getDeclaredMethod(StringToJString('endCall'), nil);
   methodEndCall.invoke(telephonyInterface, nil);
Alıntı:
yarumdan ayrildum gözlerum nemli nemli 

rakı haramdur diye çay içtum demli demli...Heart 
Cevapla
#6
(27-12-2016, Saat: 13:45)esrehmaan Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye Olaşağıdaki kodu kullanarak gelen aramayı yada giden aramayı kapatabiliyorum ancak  endcall yerine answerRingingCall  yazınca çalışmıyor. Bahsettiğinizi denedim ancak olmadı maalesef

  telephonyService:= TAndroidHelper.Context.getSystemService(TJContext.JavaClass.TELEPHONY_SERVICE);
    classTelephony := TJOwnLang_Class.JavaClass.forName(telephonyService.getClass.getName);
   methodGetITelephony:= classTelephony.getDeclaredMethod(StringToJString('getITelephony'), nil);
   methodGetITelephony.setAccessible(True);

   telephonyInterface := methodGetITelephony.invoke(telephonyService, nil);
   telephonyInterfaceClass := TJOwnLang_Class.JavaClass.forName(telephonyInterface.getClass.getName);
   methodEndCall:= telephonyInterfaceClass.getDeclaredMethod(StringToJString('endCall'), nil);
   methodEndCall.invoke(telephonyInterface, nil);

Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
    /**
    * End call if there is a call in progress, otherwise does nothing.
    *
    * @return whether it hung up
    */
   boolean endCall();

Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
    /**
    * Answer the currently-ringing call.
    *
    * If there's already a current active call, that call will be
    * automatically put on hold.  If both lines are currently in use, the
    * current active call will be ended.
    *
    * TODO: provide a flag to let the caller specify what policy to use
    * if both lines are in use.  (The current behavior is hardwired to
    * "answer incoming, end ongoing", which is how the CALL button
    * is specced to behave.)
    *
    * TODO: this should be a oneway call (especially since it's called
    * directly from the key queue thread).
    */
   void answerRingingCall();

Dokümantasyona gözatmanızda fayda var.
One of the major software engineering challanges is managing change.
Cevapla
#7
Hocam göz attım ama pek anlamadım. Şöyle bi açıklasan sana zahmet
Alıntı:
yarumdan ayrildum gözlerum nemli nemli 

rakı haramdur diye çay içtum demli demli...Heart 
Cevapla
#8
Selamün Aleyküm;

Öncelikle Formumuza 1 adet Edit ve 1 adet Button yerleştirelim ve Edit'in name'ini txtTelefonNumarasi olarak değiştirelim. txtTelefonNumarasi'nın şu özelliklerini şu şekilde değiştirelim:

KillFocusByReturn : true yapın,
KeyboardType : PhonePad yapın,
ReturnKeyType : Go yapın.

Ardından uses'a şu unit'leri ekleyelim:
uses FMX.Platform, FMX.PhoneDialer;
Daha sonra Project > Options > Uses Permissions sekmesinden Call phone ve Read phone state alanlarına tik atalım:

uses_permissions.png

Ardından TForm1 sınıfını şu şekilde düzenleyelim:
type

 TForm1 = class(TForm)

   Button1: TButton;

   txtTelefonNumarasi: TEdit;

   Layout1: TLayout;

   procedure Button1Click(Sender: TObject);

   constructor Create(AOwner: TComponent); override; // BUNU EKLEYİN!

 private

   { Private declarations }

   phoneDialerService: IFMXPhoneDialerService; // VE BUNU DA EKLEYİN!

 public

   { Public declarations }
 end;
[url=http://docwiki.embarcadero.com/RADStudio/Berlin/en/Uses_Permissions][/url]
Son olarak da TForm1.Create kurucu fonksiyonunu ve Button'un tıklanma olayını şu şekilde kodlayın:
// TForm1.Create Kurucu Fonksiyonu:
constructor TForm1.Create(AOwner: TComponent);
begin
 inherited Create(AOwner);
 TPlatformServices.Current.SupportsPlatformService(IFMXPhoneDialerService, IInterface(phoneDialerService));
end;

// Button'un Tıklanma Olayı:
procedure TForm1.Button1Click(Sender: TObject);
begin
 if Assigned(phoneDialerService) then // Eğer cihaz PhoneDialer'ı destekliyorsa;
 begin
   if txtTelefonNumarasi.Text <> '' then
     phoneDialerService.Call(txtTelefonNumarasi.Text)
   else
   begin
     ShowMessage('Telefon Numarası Girin!');
     txtTelefonNumarasi.SetFocus;
   end;
 end
 else
   ShowMessage('Cihaz Telefon Aramasını Desteklemiyor!');
end;

Örnek bir ekran görüntüsü:
phone_test.jpg
Cevapla
#9
(27-12-2016, Saat: 14:16)İbrahim Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlSelamün Aleyküm;

Öncelikle Formumuza 1 adet Edit ve 1 adet Button yerleştirelim ve Edit'in name'ini txtTelefonNumarasi olarak değiştirelim. txtTelefonNumarasi'nın şu özelliklerini şu şekilde değiştirelim:

KillFocusByReturn : true yapın,
KeyboardType : PhonePad yapın,
ReturnKeyType : Go yapın.

Ardından uses'a şu unit'leri ekleyelim:
uses FMX.Platform, FMX.PhoneDialer;
Daha sonra Project > Options > Uses Permissions sekmesinden Call phone ve Read phone state alanlarına tik atalım:

uses_permissions.png

Ardından TForm1 sınıfını şu şekilde düzenleyelim:
type

 TForm1 = class(TForm)

   Button1: TButton;

   txtTelefonNumarasi: TEdit;

   Layout1: TLayout;

   procedure Button1Click(Sender: TObject);

   constructor Create(AOwner: TComponent); override; // BUNU EKLEYİN!

 private

   { Private declarations }

   phoneDialerService: IFMXPhoneDialerService; // VE BUNU DA EKLEYİN!

 public

   { Public declarations }
 end;
[url=http://docwiki.embarcadero.com/RADStudio/Berlin/en/Uses_Permissions][/url]
Son olarak da TForm1.Create kurucu fonksiyonunu ve Button'un tıklanma olayını şu şekilde kodlayın:
// TForm1.Create Kurucu Fonksiyonu:
constructor TForm1.Create(AOwner: TComponent);
begin
 inherited Create(AOwner);
 TPlatformServices.Current.SupportsPlatformService(IFMXPhoneDialerService, IInterface(phoneDialerService));
end;

// Button'un Tıklanma Olayı:
procedure TForm1.Button1Click(Sender: TObject);
begin
 if Assigned(phoneDialerService) then // Eğer cihaz PhoneDialer'ı destekliyorsa;
 begin
   if txtTelefonNumarasi.Text <> '' then
     phoneDialerService.Call(txtTelefonNumarasi.Text)
   else
   begin
     ShowMessage('Telefon Numarası Girin!');
     txtTelefonNumarasi.SetFocus;
   end;
 end
 else
   ShowMessage('Cihaz Telefon Aramasını Desteklemiyor!');
end;

Örnek bir ekran görüntüsü:
phone_test.jpg

İbrahim hocam bilgi için tşk ederim ancak benim sıkıntım arama yapmak değil aramaya cevap verme ile alakalı
Alıntı:
yarumdan ayrildum gözlerum nemli nemli 

rakı haramdur diye çay içtum demli demli...Heart 
Cevapla
#10
Son yazılan örnek arama yapmak için ama soru "aramayı nasıl cevaplarım".

(27-12-2016, Saat: 13:23)yhackup Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlTelefonu cevaplayamazsın, root izni gerektirir.
yhackup'un cevabı doğru bence.
Android+Java sayfalarına baktığımda telefonu cevaplamak için MODIFY_PHONE_STATE iznine ihtiyaç duyduğun yazıyor. Ve bu izin sadece işletim sistemi programları tarafından kullanılabiliyormuş. Üçüncü parti yazılımlar kullanamıyormuş:
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
There's no place like 127.0.0.1
WWW
Cevapla

Konuyu Paylaş : facebook gplus twitter





Konuyu Okuyanlar: 1 Ziyaretçi