2016-09-29 10 views
0

Мне нужно получить номер телефона устройства, на котором запускается мое приложение. Если у устройства две SIM-карты идеально подходят для получения обоих номеров или если SIM-карта не вставлена ​​(планшетное устройство), это можно обнаружить.Приложение для Android Delphi FMX Получить номер телефона устройства

Я нашел JAVA код, но я понятия не имею, как перевести его на Delphi

TelephonyManager phneMgr = (TelephonyManager)mAppContext.getSystemService(Context.TELEPHONY_SERVICE); 
String phneNmbr = phneMgr.getLine1Number(); 

Я пытаюсь написать что-то, но он не работает ....

USES Androidapi.Helpers, Androidapi.JNI.JavaTypes, Androidapi.JNI.Telephony; 

procedure TForm1.Button1Click(Sender: TObject); 
var 
    num: JString; 
    tman: Androidapi.JNI.Telephony.JTelephonyManager; 
begin 
    tman:=TJtelephonyManager.Create; 
    num := tman.getLine1Number; 
    edit1.Text:=Jstringtostring(num); 
end; 
+0

Я редактировал вопрос и добавить некоторый код, который я стараюсь, но это не работает мне – milenjao

ответ

0

Нечто подобное должно делать это, основываясь на опыте работы с другими системными службами. Это означает, что вы предложили жизнеспособный Java-код.

Я отредактирую это, чтобы он правильно скомпилировался (если есть какие-либо проблемы с ним), когда у меня есть копия Delphi для передачи позже, но это примерно то, что требуется.

Обратите внимание, что быстрый просмотр the telephony manager documentation не позволяет сказать, как получить номер телефона для второй SIM-карты, но он переводит то, что вы пытались перевести.

uses 
    System.SysUtils, 
    Androidapi.Helpers, 
    Androidapi.JNI.GraphicsContentViewText, 
    Androidapi.JNI.JavaTypes, 
    Androidapi.JNI.Telephony; 

function DeviceTelephoneNumber: string; 
var 
    TelephonyManagerObj: JObject; 
    TelephonyManager: JTelephonyManager; 
begin 
    TelephonyManagerObj:= TAndroidHelper.Context.getSystemService(
    TJContext.JavaClass.TELEPHONY_SERVICE); 
    if TelephonyManagerObj <> nil then 
    begin 
    TelephonyManager := TJTelephonyManager.Wrap(TelephonyManagerObj); 
    if TelephonyManager <> nil then 
     Result := JStringToString(TelephonyManager.getLine1Number); 
    end; 
end; 

Этот код также является возможностью, которая работает в Android 5.1 и более поздних версиях.

function DeviceTelephoneNumbers: TArray<string>; 
var 
    SubscriptionManager: JSubscriptionManager; 
    I, SubscriptionInfoCount: Integer; 
    SubscriptionInfoList: JList; 
    SubscriptionInfo: JSubscriptionInfo; 
begin 
    // Subscription manager is only available in Android 5.1 and later 
    if TOSVersion.Check(5, 1) then 
    begin 
    SubscriptionManager := TJSubscriptionManager.JavaClass.from(
     TAndroidHelper.Context); 
    SubscriptionInfoCount := SubscriptionManager.getActiveSubscriptionInfoCount; 
    SubscriptionInfoList := SubscriptionManager.getActiveSubscriptionInfoList; 
    SetLength(Result, SubscriptionInfoCount); 
    for I := 0 to Pred(SubscriptionInfoCount) do 
    begin 
     SubscriptionInfo := TJSubscriptionInfo.Wrap(SubscriptionInfoList.get(I)); 
     if SubscriptionInfo <> nil then 
     Result[I] := JStringToString(SubscriptionInfo.getNumber); 
    end; 
    end 
    else 
    begin 
    // If running on older OS, use older API 
    SetLength(Result, SubscriptionInfoCount); 
    Result[0] := DeviceTelephoneNumber 
    end; 
end; 
+0

Чтобы получить доступ к номерам любой SIMs вам нужно перевести такой код: http://stackoverflow.com/a/37292604/2817399 – blong

+0

Что-то не хватает в USES: Необъявленный идентификатор: 'TJContext' – milenjao

+0

Модифицированный пример использования – blong

 Смежные вопросы

  • Нет связанных вопросов^_^