运行时是不是需要互联网许可请求(Android)?
Posted
技术标签:
【中文标题】运行时是不是需要互联网许可请求(Android)?【英文标题】:Is the request for internet persmission required at runtime (Android)?运行时是否需要互联网许可请求(Android)? 【发布时间】:2016-03-29 21:16:07 【问题描述】:对于 android,我们需要在运行时询问权限,以确保用户在需要权限时更好地理解为什么。我知道这对于WRITE_CALENDAR
和ACCESS_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 是不是需要用户许可?