今回は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のパーミッションのチェックを忘れずに行うことです。
これで電話をかけることができるようになります。