【问题标题】:How to get Mobile number from SIM card in Android Programmatically using kotlin language?如何使用 kotlin 语言以编程方式从 Android 中的 SIM 卡中获取手机号码?
【发布时间】:2018-06-21 17:49:05
【问题描述】:

我尝试使用下面的代码,但它没有给我号码。您的信息会很有帮助。

代码如下:

val subscription =SubscriptionManager.from(context).activeSubscriptionInfoList
for (subscriptionInfo in subscription)
{
   val number = subscriptionInfo.number
   Log.e("Test", " Number is  " + number)
}

【问题讨论】:

    标签: android kotlin


    【解决方案1】:

    获取IMEI号KOTLIN的正确方法

    try{
        val tm = getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager
        val IMEI = tm.getImei()
        if (IMEI != null)
            Toast.makeText(this, "IMEI number: " + IMEI,
                    Toast.LENGTH_LONG).show()
    
    }catch (ex:Exception){
        Log.e("",ex.message)
    }
    

    包括请求权限

      if (ContextCompat.checkSelfPermission(this, android.Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
        if (ActivityCompat.shouldShowRequestPermissionRationale(this, android.Manifest.permission.READ_PHONE_STATE)) {
        } else { ActivityCompat.requestPermissions(this, arrayOf(android.Manifest.permission.READ_PHONE_STATE), 2) } }
    

    别忘了 AndroidManifest.xml

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

    【讨论】:

      【解决方案2】:

      取自this answer并翻译成kotlin:

      获取电话号码、IMEI 和 SIM 卡 ID

      val tm = getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager
       For SIM card, use the getSimSerialNumber()
      
      //---get the SIM card ID---
      val simID = tm.simSerialNumber
      if (simID != null)
          Toast.makeText(this, "SIM card ID: " + simID,
                  Toast.LENGTH_LONG).show()
      

      您手机的电话号码,使用 getLine1Number() (某些设备不返回电话号码)

      //---get the phone number---
      val telNumber = tm.line1Number
      if (telNumber != null)
          Toast.makeText(this, "Phone number: " + telNumber,
                  Toast.LENGTH_LONG).show()
       IMEI number of the phone, use the getDeviceId()
      
      //---get the IMEI number---
      val IMEI = tm.deviceId
      if (IMEI != null)
          Toast.makeText(this, "IMEI number: " + IMEI,
                  Toast.LENGTH_LONG).show()
                   Permissions needed
      
      <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
      

      请注意,某些设备由于其内部实现而无法返回电话号码

      【讨论】:

      • 我在 3 台三星设备上试用了 android 5,6 和 7 版本。
      • 是的,三星以更改内部api而闻名,无论如何特别难以实现这一点。也看看this answer
      猜你喜欢
      • 2021-02-07
      • 1970-01-01
      • 2017-12-31
      • 2017-05-21
      • 1970-01-01
      • 2011-07-27
      • 1970-01-01
      • 2021-11-04
      • 2011-01-01
      相关资源
      最近更新 更多