Можно ли слушать ServerSocket без использования android.permission.INTERNET? - PullRequest
0 голосов
/ 17 января 2019

Я использую NanoHttpd для создания WebServer на устройстве (я могу захотеть использовать его только для моего Приложения или разрешить использовать его другим приложениям).

Но я должен предоставить разрешение ИНТЕРНЕТ.

Я создал приложение, которое делает это, и оно работает только тогда, когда я предоставляю android.permission.INTERNET в манифесте.

Мой код на самом деле работает, но когда я не предоставляю разрешение ИНТЕРНЕТ, я получаю исключение в logcat:

 Caused by: java.net.SocketException: socket failed: EACCES (Permission denied)
    at java.net.ServerSocket.createImpl(ServerSocket.java:308)
    at java.net.ServerSocket.getImpl(ServerSocket.java:258)
    at java.net.ServerSocket.setReuseAddress(ServerSocket.java:716)
    at fi.iki.elonen.NanoHTTPD.start(NanoHTTPD.java:2319)
    at cc.siara.android.NanoHttpServer.<init>(NanoHttpServer.kt:16)
    at cc.siara.android.App.onCreate(App.kt:23)

Я не хочу предоставлять разрешение на доступ в Интернет, потому что хочу заверить пользователя в конфиденциальности, которую обеспечивает мое приложение.

Все, что я хочу получить, это http://127.0.0.1:<port>. Возможно ли это?

1 Ответ

0 голосов
/ 17 января 2019

Нет, вам необходимо разрешение ИНТЕРНЕТА для использования сетевых сокетов, будь то для сервера или клиента, и даже для локального хоста. Поскольку это нормальное разрешение, вам не нужно его запрашивать, и пользователь не может его отрицать.

Если сервер является дополнительной функцией, вы можете объявить разрешение в другом APK, совместно использующем атрибут sharedUserId с вашим приложением, чтобы только пользователи, заинтересованные в этой функции, установили второй (пустой) APK

...