请求互联网权限不起作用



我正在尝试使用 SDK 26 在安卓手机上的安卓应用程序中请求互联网权限。我尝试使用AndroidManifest.xml,我尝试使用ActivityCompat.requestPermissions(this, new String[]{ Manifest.permission.INTERNET }, 1);,并尝试了不同的请求代码。我已经在onCreate和按钮按下事件中尝试过这个,但是当我进入应用程序信息时仍然没有显示任何权限。

我完全迷失了,因为我看不出有任何理由为什么这不起作用。 有什么想法吗? 我还不知道的常见问题?

和生物清单.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.simplevents">
<uses-permission android:name="android.permission.INTERNET"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>

权限分为多个保护级别

影响第三方应用的三个保护级别:普通权限、签名权限和危险权限

INTERNET权限处于正常的保护级别,这就是为什么不需要在运行时询问的原因

在此处查看列表

什么是正常危险的许可?

正常

对用户不敏感和有害的权限,例如振动和互联网

危险

敏感和有害的权限,例如允许READ_CONTACTS后,该应用程序可能会滥用您的联系人详细信息或允许READ_EXTERNAL_STORAGE可以访问您的SD卡数据

您不需要互联网的特殊权限。

只需在清单中定义权限

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

出于测试目的,您可以在Android清单文件中检查您的互联网连接添加以下权限。此权限为您提供互联网连接的状态(状态)。

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

在这里测试代码,您可以使用检查您的互联网连接。 如果互联网服务正常工作,则网络函数返回 true,否则返回 false。

public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main)

if (isNetwork(getApplicationContext())){
Toast.makeText(getApplicationContext(), "Internet Connected", Toast.LENGTH_SHORT).show()
} else {
Toast.makeText(getApplicationContext(), "Internet Is Not Connected", Toast.LENGTH_SHORT).show()
}
}

public boolean isNetwork(Context context) {
ConnectivityManager cm = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = cm.getActiveNetworkInfo();
if (netInfo != null && netInfo.isConnectedOrConnecting()) {
return true;
}
return false;
}
}

由于我不允许再删除这个问题,因为其他人已经努力回答这个问题,我将向您解释我的错误是什么。我确实一直拥有互联网访问的权限 - 所以我的代码中有一个完全不同的错误,我误解了错误消息并认为这是一个权限问题,因为互联网权限没有显示在应用程序信息屏幕上。它永远不会发生,因为它不是一个"危险"的许可,我已经学到了很多。

总结一下:获得在 android 上建立互联网连接的权限就像在AndroidManifest.xml中添加权限一样简单。

普通权限中的互联网权限,此权限由 Android 系统自动允许。

只有敏感权限(如CALL_LOG、短信等)才需要运行时权限。

试试这个

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

如果您使用的是移动数据,您只需要互联网权限 但是如果您使用Wi-Fi或其他网络,则需要ACCESS_NETWORK_STATE权限,

注意 - 网络权限不需要运行时权限。

最新更新