运行时是否需要请求internet传输(Android)?

运行时是否需要请求internet传输(Android)?,android,android-manifest,android-permissions,runtime-permissions,Android,Android Manifest,Android Permissions,Runtime Permissions,对于Android,我们需要在运行时询问权限,以确保用户更好地理解为什么需要权限。我知道这适用于WRITE\u CALENDAR和ACCESS\u FINE\u LOCATION等权限,但似乎互联网不需要这样做。这并不奇怪,因为几乎所有的应用程序都使用互联网 我只需要在舱单上申报就可以了吗 <uses-permission android:name="android.permission.INTERNET" /> 或者我应该总是在运行时检查它吗?不,您不应该在运行时请求INTE

对于Android,我们需要在运行时询问权限,以确保用户更好地理解为什么需要权限。我知道这适用于
WRITE\u CALENDAR
ACCESS\u FINE\u LOCATION
等权限,但似乎互联网不需要这样做。这并不奇怪,因为几乎所有的应用程序都使用互联网

我只需要在舱单上申报就可以了吗

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


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

不,您不应该在运行时请求
INTERNET
许可

INTERNET
属于该组,如果在清单中声明,系统会自动授予该组,如中所述:

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


您的许可是正确的,但在使用任何与互联网相关的功能之前,您必须检查互联网连接。您可以通过以下功能检查是否已连接internet
公共静态布尔值isNetworkOnline(上下文con)
{
布尔状态=假;
尝试
{
ConnectivityManager cm=(ConnectivityManager)con
.getSystemService(Context.CONNECTIVITY\u服务);
NetworkInfo netInfo=cm.getNetworkInfo(0);
if(netInfo!=null&&netInfo.getState()==State.CONNECTED){
状态=真;
}否则{
netInfo=cm.getNetworkInfo(1);
if(netInfo!=null&&netInfo.getState()==State.CONNECTED){
状态=真;
}否则{
状态=假;
}
}
}捕获(例外e){
e、 printStackTrace();
返回false;
}
返回状态;
}

Internet权限与sdk 23之前的权限相同。在安装应用程序时授予权限

INTERNET权限被视为一种安全性

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

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


此外,许可证可以在运行时授予,并设置为默认接受,用户也可以随时撤销。默认情况下,这不是必需的。仅在应用程序中需要internet连接时使用

<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;
    }