【问题标题】:Is it possible to listen on ServerSocket without using android.permission.INTERNET?是否可以在不使用 android.permission.INTERNET 的情况下监听 ServerSocket?
【发布时间】:2019-01-17 11:41:49
【问题描述】:

我正在使用 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:&lt;port&gt;。有可能吗?

【问题讨论】:

    标签: android android-permissions android-httptransport


    【解决方案1】:

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

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

    【讨论】:

    猜你喜欢
    • 2022-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-16
    • 2021-09-16
    • 2014-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多