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

时间:2019-01-17 11:41:50

标签: android android-permissions android-httptransport

我正在使用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>。有可能吗?

1 个答案:

答案 0 :(得分:1)

否,您需要INTERNET权限才能使用网络套接字,无论是用于服务器还是客户端,甚至用于本地主机。由于这是普通权限,因此您无需要求它,并且用户也不能拒绝它。

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