【Android Studio】自分の電話番号を取得する【Android 12】
Android Studioでアプリを起動してる端末(に差されてるSIMカード)の電話番号を取得したい!
概要
この記事では、Android Studioでアプリを起動してる端末(に差されてるSIMカード)の電話番号を取得する手順を掲載する。
仕様書
環境
- Android Studio Bumblebee 2021.1.1 Patch 2
- Android 12(APIレベル 31)
テスト端末
- Pixel 6
- Android 12
手順書
マニフェストに権限を追記する
app/manifests/AndroidManifest.xml
に電話番号を取得するのに必要な権限を追加する。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.nekonium.get_tel_num">
...
<uses-permission android:name="android.permission.READ_PHONE_NUMBERS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
</manifest>
追記するのは、<uses-permission android:name="android.permission.READ_PHONE_NUMBERS" />
と<uses-permission android:name="android.permission.READ_PHONE_STATE" />
の部分。
私が見た他のサイトでREAD_PHONE_STATE
のみだけで良さそうな感じのサンプルがあったんだけど、Androidのバージョンによる違いなのか、READ_PHONE_NUMBERS
も必要だった。
ユーザーに許可を求める処理を実装する
ここからは、MainActivity.java
での手順になる。
必要なパッケージをインポートする。
import android.content.pm.PackageManager;
import android.telephony.TelephonyManager;
MainActivity
クラスの中に必要なクラスと変数を追加する。
TelephonyManager telephonyManager;
private static final int PERMISSION_GET_TEL_NUM = 1;
今回は、onCreate
の中に許可を求める処理と電話番号をLogcatに出力する処理を追加する。
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (Build.VERSION.SDK_INT >= 23) {
if (ActivityCompat.checkSelfPermission(this,
Manifest.permission.READ_PHONE_NUMBERS)
!= PackageManager.PERMISSION_GRANTED
|| ActivityCompat.checkSelfPermission(this,
Manifest.permission.READ_PHONE_STATE)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this,
new String[]{
Manifest.permission.READ_PHONE_NUMBERS,
Manifest.permission.READ_PHONE_STATE
},
PERMISSION_GET_TEL_NUM);
}
}
telephonyManager = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
System.out.println(telephonyManager.getLine1Number());
}
許可の可否は、onRequestPermissionsResult
をオーバライドすることで受け取れる。
拒否された場合は、トースト(画面した中央に表示されるポップアップ的なの)でメッセージを表示する。
@Override
public void onRequestPermissionsResult(int requestCode, String[] permission, int[] grantResults)
{
super.onRequestPermissionsResult(requestCode, permission, grantResults);
if (grantResults.length <= 0) {
return;
}
switch (requestCode) {
case PERMISSION_GET_TEL_NUM: {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// 許可された場合の処理
} else {
// 拒否された場合の処理
Toast.makeText(this, "権限が取得できませんでした", Toast.LENGTH_LONG).show();
}
}
return;
}
}
アプリを起動すると許可の可否を求められるダイアログが表示され、許可するとAndroid Studioの「Logcat」に端末に差されてるSIMカードの電話番号が表示される。拒否するとアプリの下部中央に「権限が取得できませんでした」と表示される。
まとめ(感想文)
電話番号がIDになるようなサービスを作るのに便利かもね!