Android-разрешение не работает, даже если я его объявил

Я пытаюсь написать код для отправки 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) 

Я проверил, но у меня есть разрешения в манифесте, а именно:

  

           

Я искал в Интернете, но все ошибки синтаксиса , не могли бы вы мне помочь?

( из моего сообщения в блоге из моего блога )

Большая причина не получить ваше разрешение в настоящее время, потому что ваш проект имеет 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+ необходимо иметь элементы , но вы также должны запрашивать эти разрешения во время выполнения от пользователя на устройствах Android 6.0+, используя такие методы, как checkSelfPermission() и requestPermissions() .

В качестве временного решения targetSdkVersion свой targetSdkVersion ниже 23.

Однако, в конце концов, у вас будет некоторая причина, чтобы ваша targetSdkVersion была 23 или выше. В то время вам нужно будет настроить приложение, чтобы использовать новую систему разрешения во время выполнения. В документации по Android есть страница, посвященная этой теме .

Над уровнем API 23 вы получите прагматичное разрешение:

  private static final int PERMISSION_REQUEST_CODE = 1; if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) { if (checkSelfPermission(Manifest.permission.SEND_SMS) == PackageManager.PERMISSION_DENIED) { Log.d("permission", "permission denied to SEND_SMS - requesting it"); String[] permissions = {Manifest.permission.SEND_SMS}; requestPermissions(permissions, PERMISSION_REQUEST_CODE); } } 

запрашивать разрешение прагматично (после API 23)

 ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.SEND_SMS},1); 

Если вы используете sdk 23 или выше, вы должны проверить разрешения времени выполнения.

когда вы объявляете permisson в Manifest и это не значит, что вы выполняете Task в MarshMallow а для MarshMallow вы установили Permisson в RunTime .

подобным образом

 ActivityCompat.requestPermissions(); 

Перейдите по ссылке ниже, https://developer.android.com/guide/topics/permissions/overview.html.

Некоторые образцы также доступны для начала с разрешениями.

Чтобы сделать Android более безопасным, разработчики теперь должны упоминать о разрешении в манифесте, а также должны попросить пользователя также во время выполнения, чтобы выполнить эту работу. Это разрешение, classифицированное в разделе опасных разрешений, которое упоминается ниже

КАЛЕНДАРЬ

 READ_CALENDAR WRITE_CALENDAR 

КАМЕРЫ

 CAMERA 

КОНТАКТЫ

 READ_CONTACTS WRITE_CONTACTS GET_ACCOUNTS 

МЕСТО НАХОЖДЕНИЯ

 ACCESS_FINE_LOCATION ACCESS_COARSE_LOCATION 

МИКРОФОН

 RECORD_AUDIO 

ТЕЛЕФОН

 READ_PHONE_STATE READ_PHONE_NUMBERS CALL_PHONE ANSWER_PHONE_CALLS (must request at runtime) READ_CALL_LOG WRITE_CALL_LOG ADD_VOICEMAIL USE_SIP PROCESS_OUTGOING_CALLS ANSWER_PHONE_CALLS 

ДАТЧИКИ

 BODY_SENSORS 

sms

 SEND_SMS RECEIVE_SMS READ_SMS RECEIVE_WAP_PUSH RECEIVE_MMS 

МЕСТО ХРАНЕНИЯ

 READ_EXTERNAL_STORAGE WRITE_EXTERNAL_STORAGE 

Наряду с ответом CommonsWare,

Существует настройка безопасности (я проверил CM13), чтобы установить предел сообщений SMS. Если вы установите значение «Нет», ОС выведет диалоговое окно для каждого SMS, даже после получения разрешения SMS_SEND во время выполнения. Лучше всего установить это максимум.

Если максимального значения недостаточно, существуют способы увеличить максимальную скорость на корневом устройстве.

Я добавил это в свою MainActivity, которая разрешает мою проблему

  int MY_PERMISSIONS_REQUEST_READ_CONTACTS=0; // Here, thisActivity is the current activity if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { // Should we show an explanation? if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) { // Show an expanation to the user *asynchronously* -- don't block // this thread waiting for the user's response! After the user // sees the explanation, try again to request the permission. } else { // No explanation needed, we can request the permission. ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, MY_PERMISSIONS_REQUEST_READ_CONTACTS); // MY_PERMISSIONS_REQUEST_READ_CONTACTS is an // app-defined int constant. The callback method gets the // result of the request. } } 

Если вы используете версию Android «23» или «23+», приложение покажет вам ошибки, когда вы пытаетесь получить доступ к чему-либо, что требует разрешения пользователя. Вы должны запрашивать разрешения во время выполнения, даже если вы объявили эти разрешения в манифесте Android.

Проверьте это: https://developer.android.com/training/permissions/requesting.html

Но если вы создали все свое приложение и не хотите меняться в каждом месте, достаточно немного обмануть.

Перейдите в файл «Build.gradle» и измените целевую версию Sdk на менее чем 23, например 22, 21.

Поскольку sdk 23 или выше вводит новый способ запроса разрешений, поэтому, если вы запуститесь в Marshmallow, он покажет эту ошибку.

Решение : Установите targetSdkVersion ниже 23 в файл манифеста, такой как thisroid: targetSdkVersion = “21”

  • Android Geocoder getFromLocationName всегда возвращает null
  • Получение java.net.SocketTimeoutException: время ожидания подключения в android
  • ksoap2 org.xmlpull.v1.xmlpullparserexception Ожидаемая ошибка start_tag
  • Как у вас пародия на пару секунд в андроиде?
  • Как получить часть после десятичной точки в Java?
  • Есть ли простой способ вывода двух столбцов на консоль в Java?
  • Должен ли я строго избегать использования перечислений на Android?
  • Java Runtime.exec ()
  • Драйвер JDBC PostgreSQL с Android
  • Как я могу генерировать случайное число в определенном диапазоне в Android?
  • Можно ли подменять enums для добавления новых элементов?
  • Interesting Posts

    Как бороться с проблемой часового пояса при хранении дат в utc с использованием mongod?

    Могу ли я установить UEFI Windows 8 через DVD-диск или USB-порт?

    Что такое процесс conhost.exe, который появляется в диспетчере задач?

    Как узнать, когда все вызовы ajax завершены

    Запрос LINQ для возврата словаря

    Безболезненный способ установить новую версию R?

    альтернатива memcached, которая может сохраняться на диске

    Как использовать локальную страницу html в качестве рабочего стола / фона

    Как создать пользовательские дополнительные поля в UserProfile в MVC4

    Возможно ли установить ОС на жесткий диск, который не находится на каком-либо устройстве, а затем установить его в devica и загрузиться / работать нормально?

    NullPointerException – доступ к представлениям в onCreate ()

    Использует ли использование async / wait новый stream?

    Как мы отличаемся от требований, не требующих ответа, в разрешениях Runtime Android M?

    ASP.NET MVC и веб-службы

    Односторонний Android-ход?

    Давайте будем гением компьютера.