Androidアプリで電話をかける処理の基本の基
Androidアプリで電話をかける処理をなんとなく実装していたため、改めてここに記載をし、自身の復讐をできればと思います。
※主に自身の毎日の復習・学習の機会創出、アウトプットによる知識の定着を目的としております。
暖かい目で見ていただけますと幸いです。
Androidアプリから電話をかける方法
IntentのACTION_CALLを利用する方法
IntentのACTION_CALLを利用することで、アプリ側で入力された番号を持って、電話をかけることができます。
※マニフェストで許可が必要
マニフェストでCALL_PHONEの許可が必要です。
IntentのACTION_DIALを利用する方法
IntentのACTION_DIAL利用することで、アプリ側で入力された番号を持って、ダイヤラーと電話アプリを開くことができます
※ACTION_CALLとACTION_DIALの違い
ACTION_CALL:電話がそのまますぐかかる
ACTION_DIAL:電話アプリ・ダイヤラーを開くだけ。そこから改めて電話アプリ・ダイヤラー側で発信の操作(タップ)が必要
Dangerous パーミッションの許可取得
Android 6.0らパーミッションの概念が変わり、ユーザーに許可を必要とするパーミッションと必要としないパーミッションの2種類にわかれました。
※おさらい
・Nomalパーミッション:アプリインストール時、AndroidManifest.xmlの記載を元に権限が得られる
・Dangerousパーミッション:ユーザーの許可により権限を得られる。ユーザーによって後から権限の取り消しも可能。
電話に関連するDangerousパーミッション(パーミッショングループPHONEに属するパーミッション)もありますので、用途に合わせて必要な権限を取得するよう設定しましょう。
基本的なコード
Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:012345678"));
startActivity(intent);
※マニフェストも許可が必要
<uses-permission android:name="android.permission.CALL_PHONE" />
エラー時の処理
ダイヤログ・電話アプリへの接続権限がないなどで、繋がらない可能性があります。
この基本的なコードのままでは例外時は電話が繋がらずかつ画面上でもなんの通知もない状態となってしまい、ユーザーからはどうなっているのか全くわからない状態になってしまいます。
ですので、例外処理を追加し、例外時はユーザーに例外内容を通知するように設定しましょう。
※または、startActivityの前に権限をチェックする処理を記載する方法でも対応可(発信ボタンを押したら、まずは権限チェックして、あればstartActivityとか)
Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:012345678"));
//ここから例外処理
try{
startActivity(intent);
}catch(e: SecurityException){
Toast.makeText(context, "エラーです・・・・", Toast.LENGTH_SHORT).show()
}
まとめ
・各権限を事前に取得しましょう。
・Intentを利用して電話をかけましょう。
・エラー時に備え、例外処理も実装しておきましょう。
・権限がないのに、アプリ上で発信操作をしようとするユーザーに対する対策も構築しておきましょう。