是否可以在不使用 android.permission.INTERNET 的情况下监听 ServerSocket?

Is it possible to listen on ServerSocket without using android.permission.INTERNET?

我正在使用 NanoHttpd 在设备上创建 WebServer(我可能只想将它用于我的应用程序或允许其他应用程序使用它)。

但我必须提供互联网许可。

我已经创建了一个执行此操作的应用程序,只有当我在清单中提供 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)

我不想提供互联网许可,因为我想向用户保证我的应用程序提供的隐私。

我只想访问 http://127.0.0.1:<port>。可能吗?

不,您需要 INTERNET 权限才能使用网络套接字,无论是对于服务器还是客户端,甚至对于本地主机。因为这是一个正常的权限,你不需要请求它,用户也不能拒绝它。

如果服务器是一项可选功能,您可以在另一个与您的应用程序共享 sharedUserId 属性的 APK 中声明权限,这样只有对此功能感兴趣的用户才会安装第二个(空)APK