Приложение использует SmsManager для отправки текстовых SMS-сообщений. Следующий метод вызывается только после того, как разрешение среды выполнения SEND_SMS было успешно получено от пользователя. Приложение нацелено на API 25.
public static void sendSmsTextMessage(Context context, String number, String message) {
SmsManager sms = SmsManager.getDefault();
int permissionCheck = ContextCompat.checkSelfPermission(context, Manifest.permission.SEND_SMS);
if (permissionCheck == PERMISSION_DENIED) {
Timber.e("Permission to send SMS denied");
} else {
sms.sendTextMessage(number, null, message, null, null);
}
}
До сих пор он отлично работал на всех устройствах, на которых он был протестирован. Но теперь он используется на телефоне Logicom L-EMENT 553, и приложение взрывается при попытке вызвать sendTextMessage() в API 23 (Marshmallow) с этим исключением:
Exception java.lang.RuntimeException: Failure delivering result
ResultInfo{who=@android:requestPermissions:, request=1, result=-1,
data=Intent { act=android.content.pm.action.REQUEST_PERMISSIONS (has
extras) }} to activity
{com.myapp.android/com.myapp.android.ui.bet.BetActivity}:
java.lang.SecurityException: Neither user 10108 nor current process
has android.permission.READ_PHONE_STATE.
Почему для отправки SMS-сообщений на одних устройствах требуется разрешение READ_PHONE_STATE, а на других нет? Очевидно, что предпочтительнее не запрашивать это разрешение, поскольку от пользователя требуется предоставить такой уровень доступа.
Ответы на вопрос здесь Почему для sendTextMessage требуется разрешение READ_PHONE_STATE? предполагают, что некоторые версии Android содержат ошибку, которая запрашивает это разрешение, но это так или потому, что метод sendTextMessage() передал сообщение, превышающее ограничение длины, а затем продолжил его разделение с помощью DivisionMessage(), который затем запрашивает это разрешение? Хотя, сказав, что я не вижу доказательств, sendMessage() автоматически разбивает длинные сообщения на более мелкие части и отправляет их.
divideMessage()
отлично работает безREAD_PHONE_STATE
, ноsendMultipartTextMessage()
требует этого. См. stackoverflow.com/questions/46421412/ - person jdepypere   schedule 12.12.2017