微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在Android上获取用户的手机号码?

如何解决如何在Android上获取用户的手机号码?

我已经实现了以下广泛使用的代码,但我遇到了安全异常。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) {
    SubscriptionManager sManager = (SubscriptionManager) context.getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE);
    SubscriptionInfo infoSim1 = sManager.getActiveSubscriptionInfoForSimslotIndex(0);
    SubscriptionInfo infoSim2 = sManager.getActiveSubscriptionInfoForSimslotIndex(1);
    return infoSim1 != null || infoSim2 != null;
} else {
    TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
    return telephonyManager.getSimserialNumber() != null;
}

错误日志如下

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.app.demozapier/com.app.demozapier.MainActivity}: java.lang.SecurityException: getActiveSubscriptionInfoForSimslotIndex
    at android.app.ActivityThread.performlaunchActivity(ActivityThread.java:3521)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3693)
    at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
    at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
    at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2135)
    at android.os.Handler.dispatchMessage(Handler.java:106)
    at android.os.Looper.loop(Looper.java:236)
    at android.app.ActivityThread.main(ActivityThread.java:8060)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:656)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:967)
 Caused by: java.lang.SecurityException: getActiveSubscriptionInfoForSimslotIndex
    at android.os.Parcel.createExceptionorNull(Parcel.java:2376)
    at android.os.Parcel.createException(Parcel.java:2360)
    at android.os.Parcel.readException(Parcel.java:2343)
    at android.os.Parcel.readException(Parcel.java:2285)
    at com.android.internal.telephony.ISub$Stub$Proxy.getActiveSubscriptionInfoForSimslotIndex(ISub.java:1365)
    at android.telephony.SubscriptionManager.getActiveSubscriptionInfoForSimslotIndex(SubscriptionManager.java:1357)
    at com.app.demozapier.MainActivity.isSimAvailable(MainActivity.java:220)
    at com.app.demozapier.MainActivity.init(MainActivity.java:74)
    at com.app.demozapier.MainActivity.onCreate(MainActivity.java:68)
    at android.app.Activity.performCreate(Activity.java:8141)
    at android.app.Activity.performCreate(Activity.java:8113)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1310)
    at android.app.ActivityThread.performlaunchActivity(ActivityThread.java:3494)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3693) 
    at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85) 
    at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) 
    at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2135) 
    at android.os.Handler.dispatchMessage(Handler.java:106) 
    at android.os.Looper.loop(Looper.java:236) 
    at android.app.ActivityThread.main(ActivityThread.java:8060) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:656) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:967)

解决方法

    TelephonyManager tMgr = (TelephonyManager)mAppContext.getSystemService(Context.TELEPHONY_SERVICE);
String mPhoneNumber = tMgr.getLine1Number();

在清单中添加一行

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。