Xamarin Android 電話アプリを開きそのまま電話ををかける方法

今回はXamarin Androidで電話アプリを起動しそのまま電話をかける方法を紹介します。

自身のアプリから端末の電話アプリを開いて使用する際、2パターンの使い方があります。
1つは電話番号が入力済みの状態で電話アプリを開く
もう1つは電話アプリ開きそのまま指定した電話番号に電話をかける
という2パターンです。

今回はこれの後者の方法の紹介となります。

では実際のコードです。

まずMainfestにCALL_PHONEのパーミッションを追加します。

<uses-permission android:name="android.permission.CALL_PHONE" />

その後、パーミッションのリクエストコードをコード内のどこかに持っておきます。
今回はMainActivityにstaticで保持しておきます

public static int MY_PERMISSIONS_REQUEST_CALL_PHONE = 1;

次にMainActivityでOnRequestPermissionsResultをoverrideし、パーミッションのリクエスト結果を受け取る部分に電話をかけるIntentを実行する処理を記載します。

public override void OnRequestPermissionsResult(int code, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults) {
    if (code == MY_PERMISSIONS_REQUEST_CALL_PHONE) {
        if (grantResults.Length > 0 && grantResults[0] == Permission.Granted) {
            var uri = Android.Net.Uri.Parse($"tel:{permissions[1]}");
            var intent = new Intent(Intent.ActionCall, uri);
            this.StartActivity(intent);
        }
    }
}

最後に、電話をかける処理を呼び出したい箇所に書き処理を追加します。

var tel = "012012345678"
var uri = Android.Net.Uri.Parse($"tel:{tel}");
var intent = new Intent(Intent.ActionCall, uri);
if (ContextCompat.CheckSelfPermission(Xamarin.Essentials.Platform.CurrentActivity, Manifest.Permission.CallPhone) != Permission.Granted) {
    ActivityCompat.RequestPermissions(Xamarin.Essentials.Platform.CurrentActivity, new String[] { Manifest.Permission.CallPhone, tel }, MainActivity.MY_PERMISSIONS_REQUEST_CALL_PHONE);
} else {
    try {
        Xamarin.Essentials.Platform.CurrentActivity.StartActivity(intent);
    } catch (SecurityException e) {
        System.Diagnostics.Debug.WriteLine(e);
    } catch (Exception e) {
        System.Diagnostics.Debug.WriteLine(e);
    }
}

ポイントとしてはIntentのActionCallを指定することと、CallPhoneのパーミッションのチェックを忘れずに行うことです。

これで電話をかけることができるようになります。

タイトルとURLをコピーしました