Можно ли слушать 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