首页 > 解决方案 > 是否可以在不使用 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>. 是否可以?

标签: androidandroid-permissionsandroid-httptransport

解决方案


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

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


推荐阅读