繁体   English   中英

请求互联网许可不起作用

[英]requesting internet permission not working

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

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

androidmanifest.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 清单文件中添加以下权限。 此权限为您提供 Internet 连接的状态(状态)。

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

您可以在此处使用测试代码检查您的互联网连接。 如果 Internet 服务正在工作,isNetwork 函数返回 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添加权限一样简单。

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

只有 CALL_LOG、SMS 等敏感权限才需要运行时权限。

尝试这个

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM