2016-09-29 35 views
0

私のアプリケーションを実行しているデバイスの電話番号を取得する必要があります。デバイスに2つのSIMカードが両方の番号を取得するのに理想的な場合、またはSIMカードが挿入されていない場合(タブレットデバイス)はこれを検出できます。Delphi FMX And​​roid appデバイスの電話番号を取得

私はいくつかの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

私は質問を編集し、私がしようといくつかのコードを追加しますが、それはあなたがこのようなコードを変換する必要があると思い任意のSIMの上の番号へのアクセスを取得するには、私に – milenjao

答えて

0

何かが何をすべきそれは他のシステムサービスの経験に基づいています。これは実行可能なJavaコードであることをあなたが示唆したものに変換します。

デルファイのコピーを後で手にするときに、これを正しく編集するように編集します(問題がある場合)。これはおおよそ必要なものです。

the telephony manager documentationのクイックルックは、2番目の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

の作品ではない:http://stackoverflow.com/a/37292604/2817399 – blong

+0

USESに何かがありません:宣言されていない識別子: 'TJContext' – milenjao

+0

変更された使用節 – blong

関連する問題