フリーランス 技術調査ブログ

フリーランス/エンジニア Ruby Python Nodejs Vuejs React Dockerなどの調査技術調査の備忘録

android/kotlinで携帯電話番号/SIMの取得方法

作成する画面

  • ボタンをクリックすると携帯端末の電話番号とSIMなどの情報を取得する f:id:PX-WING:20210303220303p:plain
  • 取得した情報を画面に表示する f:id:PX-WING:20210303220308p:plain

※実機ではないと動作しません。エミュレーターだと落ちます。

作成手順

res/ layout /activity_main.xmlファイル

  • 画面レイアウトの設定
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="50dp"
        android:text="携帯端末情報取得"
        android:textAlignment="center"
        android:textColor="@android:color/holo_green_dark"
        android:textSize="32sp"
        android:textStyle="bold" />
    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@id/textView"
        android:layout_centerInParent="true"
        android:layout_marginBottom="20sp"
        android:text="電話番号取得" />
    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:hint="SIMの国コードは?"
        android:textColor="@android:color/background_dark"
        android:textSize="16sp" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:hint="SIMのシリアル番号は?"
        android:layout_marginTop="390dp"
        android:layout_marginLeft="130dp"
        android:textColor="@android:color/background_dark"
        android:textSize="16sp" />
    <TextView
        android:id="@+id/textView3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:hint="電話番号は?"
        android:layout_marginTop="420dp"
        android:layout_marginLeft="130dp"
        android:textColor="@android:color/background_dark"
        android:textSize="16sp" />
    <TextView
        android:id="@+id/textView4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:hint="SIMの通信可能は?"
        android:layout_marginTop="450dp"
        android:layout_marginLeft="130dp"
        android:textColor="@android:color/background_dark"
        android:textSize="16sp" />
    <TextView
        android:id="@+id/textView5"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:hint="サービスプロバイダの名前は?"
        android:layout_marginTop="480dp"
        android:layout_marginLeft="130dp"
        android:textColor="@android:color/background_dark"
        android:textSize="16sp" />
    <TextView
        android:id="@+id/textView6"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:hint="デバイスIDは?"
        android:layout_marginTop="510dp"
        android:layout_marginLeft="130dp"
        android:textColor="@android:color/background_dark"
        android:textSize="16sp" />
</RelativeLayout>

src / MainActivity.kt

  • 初回起動時に携帯端末取得して良いかのメッセージを表示する処理が走ります。
package com.hogehoge.phonenumber
import android.Manifest
import android.content.Context
import android.content.pm.PackageManager
import android.os.Bundle
import android.telephony.TelephonyManager
import android.widget.Button
import android.widget.TextView
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import androidx.core.app.ActivityCompat
class MainActivity : AppCompatActivity() {
    lateinit var button: Button
    lateinit var textView: TextView
    lateinit var textView2: TextView
    lateinit var textView3: TextView
    lateinit var textView4: TextView
    lateinit var textView5: TextView
    lateinit var textView6: TextView
    private lateinit var IMEINumber: String
    private val REQUEST_CODE = 101
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        title = "KotlinApp"
        textView = findViewById(R.id.textView)
        textView2 = findViewById(R.id.textView2)
        textView3 = findViewById(R.id.textView3)
        textView4 = findViewById(R.id.textView4)
        textView5 = findViewById(R.id.textView5)
        textView6 = findViewById(R.id.textView6)
        button = findViewById(R.id.button)
        button.setOnClickListener {
            val telephonyManager = getSystemService(Context.TELEPHONY_SERVICE) as
                    TelephonyManager
            if (ActivityCompat.checkSelfPermission(this@MainActivity,
                            Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
                ActivityCompat.requestPermissions(this@MainActivity,
                        arrayOf(Manifest.permission.READ_PHONE_STATE), REQUEST_CODE)
                return@setOnClickListener
            }
            // SIMの国コード
            textView.text = telephonyManager.getSimCountryIso()
            // SIMのシリアル番号
            textView2.text = telephonyManager.getSimSerialNumber()
            // 電話番号
            textView3.text = telephonyManager.getLine1Number()
            // SIMの通信可能
            textView4.text = telephonyManager.getSimState().toString()
            //サービスプロバイダの名前
            textView5.text = telephonyManager.getSimOperatorName()
            // デバイスID
            textView6.text = telephonyManager.deviceId

        }
    }

    // 初回起動時に携帯端末取得して良いかのメッセージを表示する処理が走ります。
    override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<String?>,
                                            grantResults: IntArray) {
        when (requestCode) {
            REQUEST_CODE -> {
                if (grantResults.isNotEmpty() && grantResults[0] ==
                        PackageManager.PERMISSION_GRANTED) {
                    Toast.makeText(this, "Permission granted.", Toast.LENGTH_SHORT).show()
                } else {
                    Toast.makeText(this, "Permission denied.", Toast.LENGTH_SHORT).show()
                }
            }
        }
    }
}

androidManifest.xml

  • 下記の記述を追加します。
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.READ_PRIVILEGED_PHONE_STATE" />