android - 是否可以在不使用 android.permission.INTERNET 的情况下监听 ServerSocket?
问题描述
我正在使用 NanoHttpd 在设备上创建一个 WebServer(我可能只想将它用于我的应用程序或允许其他应用程序使用它)。
但我必须提供 INTERNET 许可。
我创建了一个执行此操作的应用程序,它仅在我android.permission.INTERNET
在清单中提供时才有效。
我的代码实际上可以工作,但是当我不提供 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)
我不想提供 Internet 许可,因为我想向用户保证我的应用程序提供的隐私。
我想要访问的只是http://127.0.0.1:<port>
. 是否可以?
解决方案
不,您需要 INTERNET 权限才能使用网络套接字,无论是用于服务器还是客户端,甚至是 localhost。因为它是一个正常的权限,你不必要求它,用户也不能拒绝它。
如果服务器是可选功能,您可以在sharedUserId
与您的应用程序共享属性的另一个 APK 中声明该权限,以便只有对此功能感兴趣的用户安装第二个(空)APK
推荐阅读
- reactjs - 反应历史推送更新网址但不导航
- r - 更新矩阵列中的值小于前一行
- flutter - 如何在溢出时使列可滚动,但在其他情况下使用扩展
- python - 确认链接是否被禁用 selenium/Python
- python-3.x - 添加或删除小部件时的 Kivy boxlayout 动画
- python - 尝试使用 Python 请求登录 ESPN
- mongodb - 在 Golang 中使用 mongo-driver/mongo 的 FindOne 问题
- c# - 无法使用.netcore从天蓝色总线中的两个不同队列接收消息
- java - 在 Android Studio 中编码项目时出现渲染错误
- c# - Blazor 上 Microsoft 标识中的 AccountController 更改终结点