Можно ли слушать ServerSocket без использования android.permission.INTERNET?

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

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

Я создал приложение, которое делает это, и оно работает только тогда, когда я предоставляю 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 ответ

Решение

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

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

Другие вопросы по тегам