【问题标题】:requesting internet permission not working请求互联网许可不起作用
【发布时间】:2019-02-25 07:17:23
【问题描述】:

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

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

andoidManifest.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>

【问题讨论】:

  • 你能分享你的完整代码和logcat消息吗?
  • 你不需要在运行时请求互联网权限,在清单中声明就足够了。能否请您发布您的AndroidManifest.xml
  • internet 权限是正常的权限,没有危险,你不需要通过程序请求它,只需在 manifest 中添加即可
  • @NovoLucas 没有错误,那么您到底想从 logcat 中得到什么?
  • @lelloman 我将它添加到帖子中,我没有发现任何问题。

标签: android android-permissions


【解决方案1】:

权限分为几个保护级别

影响第三方应用的保护级别分为三种:正常签名危险权限

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

查看列表here

什么是正常危险权限?

正常

对用户不敏感和有害的权限,例如。像 VIBRATEINTERNET

危险

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

【讨论】:

    【解决方案2】:

    您不需要特殊的 Internet 权限。

    只需在清单中定义权限

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

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

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

    您可以在此处使用测试代码检查您的互联网连接。 isNetwork 函数在 Internet 服务正常时返回 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;
        }
    
    }
    

    【讨论】:

      【解决方案3】:

      由于其他人已经努力回答了这个问题,所以我不能再删除这个问题,我会向你解释我的错误是什么。我一直都有访问互联网的权限 - 所以我的代码有一个完全不同的错误,我误解了错误消息并认为这是一个权限问题,因为互联网权限没有显示在应用程序信息中屏幕。它从来没有,因为它不是一个“危险”的许可,我学到了这么多。

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

      【讨论】:

        【解决方案4】:

        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 权限,

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-03-29
          • 2017-12-07
          • 2021-04-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-08-05
          相关资源
          最近更新 更多