• 0
Martifan

как позвонить на iPhone?

Вопросы

доброго времени сутки

подскажите как можно позвонить на iPhone? пробую пример: Mobile_Tutorial:_Using_the_Phone_Dialer_on_Mobile_Devices_(iOS_and_Android)

и аппликация не запускается сразу вырубается это баг Delphi Berlin или это функция больше не работает?  

заранее спасибо

Изменено пользователем Martifan

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

7 ответов на этот вопрос

  • 2

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

что то не получается не могли бы написать инструкцию как все это сделать? спасибо 

я сделал вот так:

 

{**********************************************************}
{                                                          }
{           CodeGear Delphi Runtime Library                }
{                                                          }
{ Delphi-Objective-C Bridge                                }
{ Interfaces for Cocoa framework CoreTelephony             }
{                                                          }
{ Copyright (c) 2010, Apple Inc. All rights reserved.      }
{                                                          }
{ Translator: Embarcadero Technologies, Inc.               }
{ Copyright(c) 2016 Embarcadero Technologies, Inc.         }
{              All rights reserved                         }
{                                                          }
{**********************************************************}

unit iOSapi.CoreTelephony;

interface

uses Macapi.ObjectiveC, iOSapi.CocoaTypes, iOSapi.Foundation, Posix.Dlfcn;


// ===== External functions =====

var
  CoreTelephonyModule: THandle;

const
   CoreTelephonyFwk: string = '/System/Library/Frameworks/CoreTelephony.framework/CoreTelephony';
 
@@ -114,4 +120,10 @@
   Result := CocoaNSStringConst(CoreTelephonyFwk, 'CTCallStateDisconnected');
 end;

type

{$M+}
// ===== Forward declarations =====

  CTCarrier = interface;
  CTTelephonyNetworkInfo = interface;
  CTCall = interface;
  CTCallCenter = interface;

// ===== Interface declarations =====

  CTCarrierClass = interface(NSObjectClass)
    ['{FA14F6EF-18EF-4AE0-A115-5D5819B05A32}']
  end;
  CTCarrier = interface(NSObject)
    ['{7FF111BF-7573-4BD2-881F-0B614DD5C01E}']
    function allowsVOIP: Boolean; cdecl;
    function carrierName: NSString; cdecl;
    function isoCountryCode: NSString; cdecl;
    function mobileCountryCode: NSString; cdecl;
    function mobileNetworkCode: NSString; cdecl;
  end;
  TCTCarrier = class(TOCGenericImport<CTCarrierClass, CTCarrier>)  end;

  TCellularProviderNotifier = procedure(const Data: CTCarrier) of object;
  CTTelephonyNetworkInfoClass = interface(NSObjectClass)
    ['{28EB8488-EE8F-4967-B8A8-6BF96AD4382D}']
  end;
  CTTelephonyNetworkInfo = interface(NSObject)
    ['{F75CE940-A78E-4C64-812E-0576386B582D}']
    function subscriberCellularProvider: CTCarrier; cdecl;
    procedure setSubscriberCellularProviderDidUpdateNotifier(Handler: TCellularProviderNotifier); cdecl;
  end;
  TCTTelephonyNetworkInfo = class(TOCGenericImport<CTTelephonyNetworkInfoClass, CTTelephonyNetworkInfo>)  end;

  CTCallClass = interface(NSObjectClass)
    ['{1FA8C69C-57FA-4607-ACBA-547C9636312F}']
  end;
  CTCall = interface(NSObject)
    ['{31625956-A516-437B-A385-7DF292D6FB5A}']
    function callID: NSString; cdecl;
    function callState: NSString; cdecl;
  end;
  TCTCall = class(TOCGenericImport<CTCallClass, CTCall>)  end;

  TCallEventHandler = procedure(const Data: CTCall) of object;
  CTCallCenterClass = interface(NSObjectClass)
    ['{A28B0E07-ED5A-4C05-82DA-E9FE4073E14D}']
  end;
  CTCallCenter = interface(NSObject)
    ['{0FDB7AC7-B379-4E20-8D72-F1C11EA32EB6}']
    procedure setCallEventHandler(EventHandler: TCallEventHandler); cdecl;
    function currentCalls: NSSet; cdecl;
  end;
  TCTCallCenter = class(TOCGenericImport<CTCallCenterClass, CTCallCenter>)  end;

// exported string consts

function CTCallStateDialing: NSString;
function CTCallStateIncoming: NSString;
function CTCallStateConnected: NSString;
function CTCallStateDisconnected: NSString;

implementation

const
  CoreTelephonyFwk: string = '/System/Library/Frameworks/CoreTelephony.framework/CoreTelephony';

function CTCallStateDialing: NSString;
begin
  Result := CocoaNSStringConst(CoreTelephonyFwk, 'CTCallStateDialing');
end;

function CTCallStateIncoming: NSString;
begin
  Result := CocoaNSStringConst(CoreTelephonyFwk, 'CTCallStateIncoming');
end;

function CTCallStateConnected: NSString;
begin
  Result := CocoaNSStringConst(CoreTelephonyFwk, 'CTCallStateConnected');
end;

function CTCallStateDisconnected: NSString;
begin
  Result := CocoaNSStringConst(CoreTelephonyFwk, 'CTCallStateDisconnected');
end;

initialization
  CoreTelephonyModule := dlopen(MarshaledAString(libCoreTelephony), RTLD_LAZY);

finalization
  dlclose(CoreTelephonyModule);

end.

 

Изменено пользователем Martifan

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

вот мой рабочий вариант

{ ********************************************************** }
{ }
{ CodeGear Delphi Runtime Library }
{ }
{ Delphi-Objective-C Bridge }
{ Interfaces for Cocoa framework CoreTelephony }
{ }
{ Copyright (c) 2010, Apple Inc. All rights reserved. }
{ }
{ Translator: Embarcadero Technologies, Inc. }
{ Copyright(c) 2016 Embarcadero Technologies, Inc. }
{ All rights reserved }
{ }
{ ********************************************************** }

unit iOSapi.CoreTelephony;

interface

uses Macapi.ObjectiveC, iOSapi.CocoaTypes, iOSapi.Foundation;

// ===== External functions =====

const
  libCoreTelephony = '/System/Library/Frameworks/CoreTelephony.framework/CoreTelephony';

type
{$M+}
  // ===== Forward declarations =====

  CTCarrier = interface;
  CTTelephonyNetworkInfo = interface;
  CTCall = interface;
  CTCallCenter = interface;

  // ===== Interface declarations =====

  CTCarrierClass = interface(NSObjectClass)
    ['{FA14F6EF-18EF-4AE0-A115-5D5819B05A32}']
  end;

  CTCarrier = interface(NSObject)
    ['{7FF111BF-7573-4BD2-881F-0B614DD5C01E}']
    function allowsVOIP: Boolean; cdecl;
    function carrierName: NSString; cdecl;
    function isoCountryCode: NSString; cdecl;
    function mobileCountryCode: NSString; cdecl;
    function mobileNetworkCode: NSString; cdecl;
  end;

  TCTCarrier = class(TOCGenericImport<CTCarrierClass, CTCarrier>)
  end;

  TCellularProviderNotifier = procedure(const Data: CTCarrier) of object;

  CTTelephonyNetworkInfoClass = interface(NSObjectClass)
    ['{28EB8488-EE8F-4967-B8A8-6BF96AD4382D}']
  end;

  CTTelephonyNetworkInfo = interface(NSObject)
    ['{F75CE940-A78E-4C64-812E-0576386B582D}']
    function subscriberCellularProvider: CTCarrier; cdecl;
    procedure setSubscriberCellularProviderDidUpdateNotifier(Handler: TCellularProviderNotifier); cdecl;
  end;

  TCTTelephonyNetworkInfo = class(TOCGenericImport<CTTelephonyNetworkInfoClass, CTTelephonyNetworkInfo>)
  end;

  CTCallClass = interface(NSObjectClass)
    ['{1FA8C69C-57FA-4607-ACBA-547C9636312F}']
  end;

  CTCall = interface(NSObject)
    ['{31625956-A516-437B-A385-7DF292D6FB5A}']
    function callID: NSString; cdecl;
    function callState: NSString; cdecl;
  end;

  TCTCall = class(TOCGenericImport<CTCallClass, CTCall>)
  end;

  TCallEventHandler = procedure(const Data: CTCall) of object;

  CTCallCenterClass = interface(NSObjectClass)
    ['{A28B0E07-ED5A-4C05-82DA-E9FE4073E14D}']
  end;

  CTCallCenter = interface(NSObject)
    ['{0FDB7AC7-B379-4E20-8D72-F1C11EA32EB6}']
    procedure setCallEventHandler(EventHandler: TCallEventHandler); cdecl;
    function currentCalls: NSSet; cdecl;
  end;

  TCTCallCenter = class(TOCGenericImport<CTCallCenterClass, CTCallCenter>)
  end;

  // exported string consts

function CTCallStateDialing: NSString;
function CTCallStateIncoming: NSString;
function CTCallStateConnected: NSString;
function CTCallStateDisconnected: NSString;

implementation

{$IF defined(IOS) and defined(CPUARM)}

uses
  Posix.Dlfcn;
{$ENDIF IOS}

const
  CoreTelephonyFwk: string = '/System/Library/Frameworks/CoreTelephony.framework/CoreTelephony';

function CTCallStateDialing: NSString;
begin
  Result := CocoaNSStringConst(CoreTelephonyFwk, 'CTCallStateDialing');
end;

function CTCallStateIncoming: NSString;
begin
  Result := CocoaNSStringConst(CoreTelephonyFwk, 'CTCallStateIncoming');
end;

function CTCallStateConnected: NSString;
begin
  Result := CocoaNSStringConst(CoreTelephonyFwk, 'CTCallStateConnected');
end;

function CTCallStateDisconnected: NSString;
begin
  Result := CocoaNSStringConst(CoreTelephonyFwk, 'CTCallStateDisconnected');
end;

{$IF defined(IOS) and defined(CPUARM)}

var
  CoreTelephonyModule: THandle;

initialization

CoreTelephonyModule := dlopen(MarshaledAString(libCoreTelephony), RTLD_LAZY);

finalization

dlclose(CoreTelephonyModule);
{$ENDIF IOS}

end.

UPDATE Я еще в SDK прописал Framework CoreTelephony по аналогии с другими фреймворками и обновил кеш SDK

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

я все сделал кроме прописать в SDK, подскажите как это сделать спасибо можете скрины выложить

FMX.PhoneDialer как это модуль добавляю, приложения не запускается

Изменено пользователем Martifan

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
В 20.01.2017 в 09:38, Martifan сказал:

UP

сделал так :

Copy iOSapi.CoreTelephony.pas from
C:\Program Files (x86)\Embarcadero\Studio\18.0\source\rtl\ios
to your project folder

отсюда

содержимое файла заменил исходным текстом  выше от Zuby.

Пример PhoneDialer заработал на Iphone.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти


  • Похожий контент

    • От Tumaso
      Подскажите, каким образом можно прочитать входящее СМС под iOS? Для Android на форуме есть работающий пример, а вот под iOS найти не удалось.
    • От Tumaso
      Столкнулся с неожиданной проблемой в iOS при работе с файлами: любые попытки чтения существующих файлов из System.IOUtils.TPath.GetDocumentsPath и любые попытки чтения/записи файлов в System.IOUtils.TPath.GetHomePath вызывают ошибку access denied. Где что нужно прописать, чтобы решить проблему работы с файлами?
    • От Виталий Иванов
      Есть ли возможность отследить сильное нажатие на элемент ? Долгое нажатие отлавливается, а вот сильное нажатие никак может есть какие-то уловки или это в принципе не возможно ?
    • От Barbanel
      Доброго времени!
      Есть разработанное под Андроид приложение. Начальство поставило задачу выложить это же приложение в Apple AppStore.
      Было озвучено мнение что для этого необходимо купить Макбук или что-то аналогичное эппла.
      У меня нет опыта работы с эппловскими девайсами и операционками вообще, в связи с чем вопрос:
      - какое железо необходимо для нормальной и желательно комфортной разработки под iOS?
      "Свежесть" железа играет роль (год выпуска или еще чего-нить)?
      Всем спасибо!
    • От Astghik
      How to print text from Android (IOS) device ? (C++ Rad Studio 10.2)
      With USB printer and other types printers (WiFi, Bluetooth ....)
    • От Евгений Корепов
      Наткнулся тут на изящную штуку для приложения с PUSH уведомлениями на Android и Ios. Один объект, все сам делает.
      Внедрил в одно боевое приложение с 100+ тысячами установок, полет нормальный.
      Описание тут https://delphiworlds.com/2017/04/firebase-cloud-messaging-android-ios/
      Исходный код с примером на гитхабе https://github.com/DelphiWorlds/PushClient
      Использование максимально простое:
      uses DW.PushClient; .... private FPushClient: TPushClient; procedure PushClientChangeHandler(Sender: TObject; AChange: TPushService.TChanges); procedure PushClientReceiveNotificationHandler(Sender: TObject; const ANotification: TPushServiceNotification); .... procedure TFormMain.InitPushService; begin FPushClient := TPushClient.Create; FPushClient.GCMAppID := ConstGCMAppID; FPushClient.ServerKey := ''; FPushClient.BundleID := ''; FPushClient.UseSandbox := Debug; // Change this to False for production use! FPushClient.OnChange := PushClientChangeHandler; FPushClient.OnReceiveNotification := PushClientReceiveNotificationHandler; try FPushClient.Active := True; except SendError('FPushClient.Active Exception'); end; end; procedure TFormMain.PushClientChangeHandler(Sender: TObject; AChange: TPushService.TChanges); begin if TPushService.TChange.DeviceToken in AChange then begin HDevicePushParams.DeviceID:=FPushClient.DeviceID; HDevicePushParams.DeviceToken:=FPushClient.DeviceToken; GetHTTP(CommandRegisterFCM); // Memo1.Lines.Add('DeviceID = ' + FPushClient.DeviceID); // Memo1.Lines.Add('DeviceToken = ' + FPushClient.DeviceToken); end; end; procedure TFormMain.PushClientReceiveNotificationHandler(Sender: TObject; const ANotification: TPushServiceNotification); begin // ShowMessage(ANotification.DataObject.ToString... end; Правда руки не дошли разобраться для чего ему 
        FPushClient.ServerKey := '';
        FPushClient.BundleID := '';
      Но и без этого работает.
       
    • От erden1
      ЗДравствуйте!
      Подскажите пожалуйста как добавить рекламу в новые ios приложения? Возможно ли это сделать с помощью компонента TBannerAD? И какие есть способы?
    • От Alex7wrt
      Добрый день.
      Имеется приложение, которое реализовано в портретной и альбомной ориентации. При повороте экрана срабатывает событие TForm.OnResize, в котором производятся изменения размеров и положения элементов.
      В Андроиде при повороте все происходит плавно, а в iOS на долю секунды мигает экран с изменённым положением контролов и только потом перерисовывается. Почему так происходит и как это можно исправить?
    • От Anasazi
      Всем добрый день! Получаю координаты с помощью yandex api. Использую вот такой код:
          try
          ////Запрос на Яндекс для получения координат
           MainForm.NetHTTPClient1.Get
          ('https://geocode-maps.yandex.ru/1.x/?geocode='+
          'Кунгур'+
          ',+'
          +street+
          '+улица,+дом+'+
          house, Result);
          finally
          end;
       
      Код отрабатывает нормально, но если ну устройстве нет интернета, то приложение просто вылетает. Подскажите пожалуйста как поправить.
      Приложение для iOS.
    • От Alex7wrt
      Здравствуйте.
      Нужен совет по интеграции баннера Admob к iOS приложению. Может быть кто-нибудь уже делал подобное?
      Насколько я начитался в инете по похожим запросам, нужно скачать GoogleMobileAds.framework и подключить его в Project-Options-Linking-Options passed to the LD Linker. Кроме этого фреймверка еще нужны такие:
      EventKit  EventKitUI  AVFoundation  AdSupport  AudioToolbox  AVFoundation  CoreGraphics  CoreTelephony  CoreMedia  MessageUI  StoreKit  SystemConfiguration Которые подгрузил в SDK Manager. 
      Далее в  “Options passed to the LD linker” добавляю:
      -ObjC -LC:\Users\<user>\Documents\Embarcadero\Studio\SDKs\iPhoneOS8.3.sdk\usr\lib Frameworks\GoogleMobileAds.framework\GoogleMobileAds Frameworks\AdSupport.framework\AdSupport Frameworks\AudioToolbox.framework\AudioToolbox Frameworks\AVFoundation.framework\AVFoundation Frameworks\CoreGraphics.framework\CoreGraphics Frameworks\CoreMedia.framework\CoreMedia Frameworks\CoreTelephony.framework\CoreTelephony Frameworks\EventKit.framework\EventKit Frameworks\EventKitUI.framework\EventKitUI Frameworks\MessageUI.framework\MessageUI Frameworks\StoreKit.framework\StoreKit Frameworks\SystemConfiguration.framework\SystemConfiguration -lxml2.2
      После этого во время компиляции возникает ошибка в фреймворке GoogleMobileAds.framework. 
      Все остальные фреймворки ошибок не вызывают.
      Текст ошибки: 
      [DCC Error] E2597 NYI lto::archName
      ld: file was built for unsupported file format ( 0x56 0x65 0x72 0x73 0x69 0x6F 0x6E 0x73 0x2F 0x43 0x75 0x72 0x72 0x65 0x6E 0x74 ) which is not the architecture being linked (arm64):
      Это для версии iOS Device 64 bit. Для 32 бит ошибка та же, только в конце вместо arm64 написано armv7.
      Символы 0x56 0x65 0x72 0x73 0x69 0x6F 0x6E 0x73 0x2F 0x43 0x75 0x72 0x72 0x65 0x6E 0x74 в переводе на ACSII значат "Versions/Current" - это часть строки в файле GoogleMobileAds.
      Вот и не пойму как эту ошибку обойти.
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу