运行时是不是需要互联网许可请求(Android)?

Posted

技术标签:

【中文标题】运行时是不是需要互联网许可请求(Android)?【英文标题】:Is the request for internet persmission required at runtime (Android)?运行时是否需要互联网许可请求(Android)? 【发布时间】:2016-03-29 21:16:07 【问题描述】:

对于 android,我们需要在运行时询问权限,以确保用户在需要权限时更好地理解为什么。我知道这对于WRITE_CALENDARACCESS_FINE_LOCATION 之类的权限是正确的,但对于INTERNET 似乎不需要。并不奇怪,因为几乎所有应用程序都使用互联网。

可以说我只需要在清单中声明吗?

<uses-permission android:name="android.permission.INTERNET" />

或者我应该总是在运行时检查它?

【问题讨论】:

【参考方案1】:

不,您不应该在运行时请求INTERNET 权限。

INTERNET 属于Normal permissions 组,如果在Manifest 中声明,系统会自动授予它们,如this document 中所述:

普通权限不会直接危及用户的隐私。如果您的应用在其清单中列出了正常权限,系统会自动授予该权限。

【讨论】:

【参考方案2】:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission  android:name="android.permission.ACCESS_NETWORK_STATE"/>

Your permission is right but you have to check internet connectivity before using any internet related function . You can check internet connected or not by following function 


public static boolean isNetworkOnline(Context con)
    
        boolean status = false;
        try 
        
            ConnectivityManager cm = (ConnectivityManager) con
                    .getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo netInfo = cm.getNetworkInfo(0);

            if (netInfo != null && netInfo.getState() == State.CONNECTED) 
                status = true;
             else 
                netInfo = cm.getNetworkInfo(1);

                if (netInfo != null && netInfo.getState() == State.CONNECTED) 
                    status = true;
                 else 
                    status = false;
                
            

         catch (Exception e) 
            e.printStackTrace();
            return false;
        

        return status;
    

【讨论】:

【参考方案3】:

Internet 权限作为 sdk 23 之前的权限。在安装应用程序时授予权限。

INTERNET权限被视为PROTECTION_NORMAL。

如果应用在其清单中声明它需要正常权限,系统会在安装时自动授予应用该权限。系统不会提示用户授予正常权限,用户无法撤销这些权限。

危险权限需要运行时权限管理。它们也位于“权限组”中,因此一旦为该组中的一项权限授予运行时权限,就不需要为同一组中的其他权限授予该权限。

还可以在运行时授予权限并将其设置为默认接受,用户也可以随时撤销。

【讨论】:

【参考方案4】:

默认情况下不需要。仅当您的应用需要互联网连接时才使用它。

【讨论】:

以上是关于运行时是不是需要互联网许可请求(Android)?的主要内容,如果未能解决你的问题,请参考以下文章

地理定位器位置许可

何时在运行时请求 Android Marshmallow 6.0 的权限?

有没有办法以编程方式请求许可?

android.intent.action.PACKAGE_ADDED 是不是需要用户许可?

切换音轨时是不是可以阻止 Chromecast 自定义媒体接收器发出许可请求?

强制编译 Matlab 应用程序以使用运行时而不是 Matlab 许可证