JY2*_*Y2k 5 android android-permissions
运行以下代码时:
try {
TelephonyManager telephonyManager = (TelephonyManager) MainApplication.getAppContext()
.getSystemService(Context.TELEPHONY_SERVICE);
String simMCCMNC = telephonyManager.getSimOperator();
} catch (Exception e) {
Crashlytics.logException(e);
}
Run Code Online (Sandbox Code Playgroud)
该应用程序崩溃并显示以下日志:
非致命异常:java.lang.SecurityException:需要READ_PHONE_STATE:用户10076和当前进程都没有android.permission.READ_PHONE_STATE。在android.os.Parcel.readException(Parcel.java:1546)在android.os.Parcel.readException(Parcel.java:1499)在com.android.internal.telephony.ISub $ Stub $ Proxy.getActiveSubscriptionInfoForSimSlotIndex(ISub.java :459),位于android.telephony.SubscriptionManager.getDefaultSmsSubId(SubscriptionManager.java:910),位于android.telephony.TelephonyManager.getSimOperatorNumeric(TelephonyManager.java:1622),位于android.telephony.TelephonyManager.getSimOperator(TelephonyManager.java:1592) .myapp.app.ApplicationInitializer.generateBaseUrl(SourceFile:297)位于com.myapp.app.ApplicationInitializer.initFailProofComponents(SourceFile:
查看Android getSimOperator()的源代码。我不明白该代码如何会因此方法不需要的权限而崩溃?
我可以在调用getDeviceId()时重现,因为它需要READ_PHONE_STATE。
我只在Android 5.1版上看到过这种情况。
Nit*_*eek -2
使用这个方法效果很好
DeviceInfo deviceInfo = new DeviceInfo();
TelephonyManager tMgr = (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE);
deviceInfo.setDeviceId(Util.getDeviceID(mContext));
if(tMgr!=null)
{
String simSerialNumber=tMgr.getSimSerialNumber();
if(simSerialNumber!=null) {
deviceInfo.setSimOperator(tMgr.getSimOperator());
deviceInfo.setSimCountryIso(tMgr.getSimCountryIso());
deviceInfo.setSimSerialNumber(simSerialNumber);
deviceInfo.setSimOperatorName(tMgr.getSimOperatorName());
deviceInfo.setSimNetworkOperator(tMgr.getNetworkOperator());
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
965 次 |
| 最近记录: |