如何解决如何在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 举报,一经查实,本站将立刻删除。