TelephonyManager.getCellLocation在某些设备中请求READ_PHONE_STATE权限时崩溃

时间:2017-04-28 19:28:23

标签: android android-permissions

我们在我们的应用中使用string feedcolumns = "select FeedColumnName from myTable where FeedProcessID = @feedprocessid"; DataTable dt = new DataTable("datafeed"); using (SqlConnection connUpd = new SqlConnection("MyConnection")) { using (SqlCommand columnscommand = new SqlCommand(feedcolumns, connUpd)) { columnscommand.Parameters.AddWithValue("@feedprocessid", feedprocessid); connUpd.Open(); var dataReader = columnscommand.ExecuteReader(); dt.Load(dataReader); } } 中的getCellInfo方法,它一直运行正常,没有任何问题,只有很少的设备会崩溃并显示以下消息

TelephonyManager

但是,文档并未说我们需要此权限才能调用此方法。此外,我们根本不会要求这个许可。有没有人遇到过这个问题。我猜这可能是权限本身的一般问题?我们的目标是sdk版本22,minSdkVersion是15。

1 个答案:

答案 0 :(得分:1)

使用TelephonyManager时,我的应用程序有相同的问题。其targetSdkVersion为27,minSdkVersion为17。

根据我的Google Play控制台中的应用崩溃报告,出现此SecurityException问题的手机为具有Android 5.0-5.1的Oppo,LG,Asus和Sony手机。之后,我在装有Android 5.0和5.1的Android Studio模拟器上运行了我的应用程序。我发现由于没有READ_PHONE_STATE权限,它将崩溃。

因此,我认为此问题将在大多数装有Android 5.0或5.1的设备上发生,而与手机品牌无关。

解决方案是将以下代码添加到AndroidManifest.xml

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

我将此权限的maxSdkVersion设置为22,因为此SecurityException在Android 6.0之后不会发生,因此对于Android 6.0或更高版本的手机不需要此权限。