2016-09-29 107 views
0

我需要獲取運行應用程序的設備的電話號碼。如果設備兩個SIM卡理想地同時獲得這兩個號碼或者未插入SIM卡(平板設備)可以檢測到這一點。Delphi FMX And​​roid應用程序獲取設備電話號碼

我發現了一些JAVA代碼,但我不知道如何把它轉變爲德爾福

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代碼。

我將編輯它以使其在編譯後可以正確編譯(如果存在任何問題),但這是大致需要的。

請注意,快速查看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

要訪問任何SIM卡的數字你需要翻譯這樣的代碼:http://stackoverflow.com/a/37292604/2817399 – blong

+0

使用中缺少的東西:未聲明的標識符:'TJContext' – milenjao

+0

修改的使用條款 – blong

相關問題