Я пытаюсь написать код для отправки SMS из приложения Android, но когда я пытаюсь отправить SMS, он возвращает мне ошибку:
09-17 18:37:29.974 12847-12847/**.**.****E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: **.**.****, PID: 12847
java.lang.SecurityException: Sending SMS message: uid 10092 does not have android.permission.SEND_SMS.
at android.os.Parcel.readException(Parcel.java:1599)
at android.os.Parcel.readException(Parcel.java:1552)
at com.android.internal.telephony.ISms$Stub$Proxy.sendTextForSubscriber(ISms.java:768)
at android.telephony.SmsManager.sendTextMessageInternal(SmsManager.java:310)
at android.telephony.SmsManager.sendTextMessage(SmsManager.java:293)
at **.**.****.MainActivity$3.onClick(MainActivity.java:70)
at android.view.View.performClick(View.java:5198)
at android.view.View$PerformClick.run(View.java:21147)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Я проверил, но у меня есть разрешения в манифесте, как показано ниже:
<?xml version="1.0" encoding="utf-8"?>
<uses-permission android:name="android.permission.SEND_SMS"/>
<uses-feature android:name="android.hardware.telephony"
android:required="true"/>
<application
android:exported="true"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
Я искал в Интернете, но все ошибки были о <uses-permission/>
синтаксисе, не могли бы вы помочь мне, пожалуйста?
java
android
android-permissions
Натан Луджани
источник
источник
targetsdkversion
был23
обновлен до,27
после того, какREAD_SMS
разрешение обновления приложения не работает, который уже включен. пожалуйста, помогитеОтветы:
(следующее извлечено из моего блога об этом )
Основная причина того, что в настоящее время вы не получаете разрешение, заключается в том, что ваш проект имеет значение
targetSdkVersion
23 или выше, а запрашиваемое вами разрешение «опасно». В Android 6.0 это включает в себя:ACCESS_COARSE_LOCATION
ACCESS_FINE_LOCATION
ADD_VOICEMAIL
BODY_SENSORS
CALL_PHONE
CAMERA
GET_ACCOUNTS
PROCESS_OUTGOING_CALLS
READ_CALENDAR
READ_CALL_LOG
READ_CELL_BROADCASTS
READ_CONTACTS
READ_EXTERNAL_STORAGE
READ_PHONE_STATE
READ_SMS
RECEIVE_MMS
RECEIVE_SMS
RECEIVE_WAP_PUSH
RECORD_AUDIO
SEND_SMS
USE_SIP
WRITE_CALENDAR
WRITE_CALL_LOG
WRITE_CONTACTS
WRITE_EXTERNAL_STORAGE
Для этих разрешений не только ваше
targetSdkVersion
приложение 23+ должно иметь<uses-permission>
элемент (ы), но вы также должны запросить эти разрешения у пользователя на устройствах Android 6.0+ во время выполнения, используя такие методы, какcheckSelfPermission()
иrequestPermissions()
.В качестве временного обходного пути, опуститесь
targetSdkVersion
ниже 23.Однако, в конце концов, у вас будет какая-то причина хотеть, чтобы вам
targetSdkVersion
было 23 или выше. В то же время вам необходимо настроить приложение для использования новой системы разрешений во время выполнения. В документации Android есть страница, посвященная этой теме .источник
compile 'com.android.support:appcompat-v7:22.2.1'
. Должен ли я изменить это на v4?23.x.y
для текущих значений x и y), а не в v22, который вы используете в настоящее время.Выше API уровня 23 вам будут даны программно прагматически такие:
источник
запросить разрешение прагматично (после API 23)
«Если у приложения есть разрешение, метод checkSelfPermission () возвращает PERMISSION_GRANTED, и приложение может продолжить операцию.
Если приложение не имеет разрешения, метод возвращает PERMISSION_DENIED, и приложение должно явно запросить у пользователя разрешение. Вам необходимо запросить у пользователя это разрешение, как показано в приведенном выше коде. Вызов requestPermissions () вызывает стандартный диалог Android, который вы не можете настроить. "
источник
Если вы используете SDK 23 или выше, вы должны проверить разрешения во время выполнения.
источник
когда вы объявляете
permisson
вManifest
и это не работает средство вы выполняете задачи вMarshMallow
иMarshMallow
вы установили в согласия автораRunTime
.вот так
источник
Пожалуйста, перейдите по ссылке ниже, https://developer.android.com/guide/topics/permissions/overview.html
Некоторые образцы также доступны там, чтобы начать с разрешениями.
Чтобы сделать Android более безопасным, теперь разработчики должны указывать разрешение в манифесте, а также должны спрашивать пользователя во время выполнения, чтобы выполнить работу. Они относятся к категории разрешений в разделе опасных разрешений, которые упомянуты ниже.
КАЛЕНДАРЬ
КАМЕРЫ
КОНТАКТЫ
РАСПОЛОЖЕНИЕ
МИКРОФОН
ТЕЛЕФОН
ДАТЧИКИ
смс
МЕСТО ХРАНЕНИЯ
источник
Я добавил это к моей основной деятельности, которая решает мою проблему
источник
Если вы используете версию Android «23» или «23+», то приложение будет показывать вам ошибки, когда вы пытаетесь получить доступ ко всему, что требует разрешения пользователя. Вы должны запросить разрешения во время выполнения, даже если вы объявили эти разрешения в манифесте Android.
Проверьте это: https://developer.android.com/training/permissions/requesting.html
Но если вы создали свое приложение целиком и не хотите вносить изменения в любом месте, то небольшого обмана будет достаточно.
Перейдите к файлу «Build.gradle» и измените целевую версию Sdk на менее 23, например, 22, 21.
источник
Наряду с ответом CommonsWare,
Существует настройка безопасности (я проверял на CM13), чтобы установить предел SMS-сообщения. Если для этого параметра установлено значение «Нет», ОС будет открывать диалоговое окно для каждого SMS-сообщения, даже после получения разрешения SMS_SEND во время выполнения. Лучше всего установить это на максимум.
Если максимума недостаточно, существуют способы увеличения максимальной скорости на рутованном устройстве.
источник
Вы можете использовать этот код для доступа к своим сообщениям
Откройте диалог, используя код ниже:
Получите результат активности, как показано ниже:
или отредактируйте файл
build.gradle
и номер чанчаtargetSdkVersion
меньше23
И больше не нужен код выше
ПРИМЕЧАНИЕ.
Конечно, дело не в этом, а в образовательном аспекте.
источник
Поэтому мне пришлось создать приложение для отправки и получения сообщений, но действие отправки вызывало сбой при каждом нажатии кнопки «Отправить», хотя разрешение было предоставлено. Я запросил разрешения во время выполнения и разрешил их, но все же я столкнулся с ошибкой, что у процесса нет запрошенного разрешения на отправку SMS. Я проверил предоставленные разрешения от:
Порядок моего запроса на разрешения был
Я изменил порядок запроса, и он работает нормально. Это было проверено с совершенно новым приложением (удаление -> установить -> тестирование). Ответ может показаться странным, но просто попробуйте.
(Если он работает указанным способом в определенном порядке, то в Android может быть ошибка !!)
источник
Надеюсь решение для записи на внешнее хранилище тоже будет полезно
источник
Список всех разрешений можно найти с объяснением на
Manifest.permission
источник