2015-12-08 5 views
1

У меня следующее сообщение об ошибке на несколько моих пользователей:ошибка запроса HttpURLConnection (Отсутствует разрешение Интернет, когда разрешение включено)

Caused by: java.lang.SecurityException: Permission denied (missing INTERNET permission?) 
    at java.net.InetAddress.lookupHostByName(InetAddress.java:418) 
    at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236) 
    at java.net.InetAddress.getAllByName(InetAddress.java:214) 
    at com.android.okhttp.internal.Dns$1.getAllByName(Dns.java:28) 
    at com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:216) 
    at com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java:122) 
    at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:292) 
    at com.android.okhttp.internal.http.HttpEngine.sendSocketRequest(HttpEngine.java:255) 
    at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:206) 
    at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:345) 
    at com.android.okhttp.internal.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:89) 
    at com.android.okhttp.internal.http.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:197) 
    at com.android.okhttp.internal.http.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:254) 
    at [my communication HttpUrlConnection request] 
    ... 12 more 
Caused by: libcore.io.GaiException: getaddrinfo failed: EAI_NODATA (No address associated with hostname) 
    at libcore.io.Posix.getaddrinfo(Native Method) 
    at libcore.io.ForwardingOs.getaddrinfo(ForwardingOs.java:61) 
    at java.net.InetAddress.lookupHostByName(InetAddress.java:405) 
    ... 25 more 
Caused by: libcore.io.ErrnoException: getaddrinfo failed: EACCES (Permission denied) 
    ... 28 more 

приложение требует Интернет, чтобы сделать это самая основная функция, я дон Не думайте, что пользователь удалил это разрешение с помощью root или что-то в этом роде.

Кроме того, эта ошибка была отправлена ​​мне с помощью собственного инструмента для создания отчетов об ошибках. Я сделал загрузку с зарегистрированной ошибкой, и в этот момент было доступно разрешение.

Нет ограничений на модель устройства версии для Android, у которой есть ошибка.

Пример части манифеста:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"> 

    <uses-permission android:name="android.permission.INTERNET"/> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 

[...] 

Любой ключ ценится,

Заранее спасибо.

ответ

0

Для запроса HttpUrlConnection требуется также android.permission.ACCESS_NETWORK_STATE. У вас также есть это разрешение, указанное в манифесте?

Просьба представить файл манифеста, чтобы мы могли видеть, что android.permission.ACCESS_NETWORK_STATE и android.permission.INTERNET перечислены без каких-либо орфографических ошибок, заглавных букв, синтаксических ошибок.

Проблема может также произойти, если пользователь укоренил свое Android-устройство и возился с разрешениями. Как вы знаете, что пользователь не укоренил устройство? Можете ли вы воспроизвести проблему на любом из ваших собственных устройств?

Смотреть более подробно по этому вопросу здесь: SecurityException: Permission denied (missing INTERNET permission?)

+0

Я не могу загрузить его здесь, но я на 100% уверен, что с манифестом нет проблем. Я проверяю вручную разрешения, даже если это разрешено, и разрешение было подтверждено. Код не должен даже доходить до этой точки, если разрешения недоступны. Поскольку ошибка была загружена, разрешение было доступно в какой-то момент. Я прочитал эту ссылку, и у меня есть механизмы обнаружения ошибок, чтобы избежать сбоев, но я действительно хотел понять, что происходит и как правильно обрабатывать, а не просто делать попытку. –

+0

Почему вы не можете загрузить файл манифеста здесь? – null

+0

Потому что это происходит не только в одном приложении. У меня есть библиотека, которая используется в нескольких приложениях, и это происходит не только в одном. Хотя не часто, у него все еще есть некоторые повторяющиеся записи. Я не думал, что было бы полезно загрузить, чтобы загрузить манифест всех приложений, которые обычно работают очень хорошо, но несколько запросов все еще терпят неудачу. Но, как вы спросили, я вставил начало манифеста одного из приложений. Спасибо за внимание. –

1

Это поможет вам. написать в вашем OnCreate метод

int PERMISSION_ALL = 1; 
    String[] PERMISSIONS = {Manifest.permission.READ_CONTACTS, Manifest.permission.WRITE_CONTACTS, Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_SMS, Manifest.permission.CAMERA}; 

    if (!hasPermissions(this, PERMISSIONS)) { 
     ActivityCompat.requestPermissions(this, PERMISSIONS, PERMISSION_ALL); 
    } 

И получить этот метод

public static boolean hasPermissions(Context context, String... permissions) 
{ 
    if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && context != null && permissions != null) 
    { 
     for (String permission : permissions) 
     { 
      if (ActivityCompat.checkSelfPermission(context, permission) != PackageManager.PERMISSION_GRANTED) 
      { 
       return false; 
      } 
     } 
    } 
    return true; 
} 

Приложение запросит только те разрешения, которые потребности приложений, которые тоже только один раз. Если это работает вверх и дайте мне знать. Это сработало для меня