从Android应用程序访问互联网需要什么权限?


596

我在运行我的应用程序时遇到以下异常:

java.net.SocketException: Permission denied (maybe missing INTERNET permission)

如何解决缺少权限的问题?

Answers:


1245

INTERNET权限添加到清单文件中。

您必须添加以下行:

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

在AndroidManifest.xml中的应用程序标记之外


43
该标签应放置在重复标签之前。如果将aif TAG放在if后面,则会产生警告。
Marek

2
重新启动仿真器(这对于我来说是必需的)。
jcalfee314 2013年

我有问题。我不想为我的apk访问互联网。没有权限添加到清单,但如果我尝试安装apk,安装通知我,该apk需要完整的互联网访问权限。如何解决这个问题呢 ?没有权限添加到清单。我的apk不需要完全的互联网访问权限-我想禁用此权限。
Altivo

1
@Altivo在../app/build/intermediates/manifests/full/debug/AndroidManifest.xml中查看合并的清单。在这里,您将找到应用程序使用的所有权限。这是通过合并您的应用程序清单和所用库的清单形成的。您必须主要使用Google Play服务库,该库包含INTERNET和ACCESS_NETWORK_STATE权限。
2016年

116

在最新版的Google Play中,由于“当今大多数应用仍需要互联网”,因此Google不再要求获得互联网许可。但是,对于使用旧版本的用户,仍然建议将以下代码保留在清单中

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

1
是否有提及Google文档的内容?
farindk

@farindk这里的第一个注释部分:support.google.com/googleplay/answer/6014972?
Finley Smith,

24
您链接到的文档讨论了Play商店如何在询问是否安装应用程序时向用户显示的主要权限列表中不包括Internet权限。它并不表示使用Internet的应用程序不再需要在其清单的已使用权限列表中声明已这样做。您是说所有应用程序都隐式使用Internet而不在其清单中这么说吗?也就是说,如果Janusz在今天的手机中从该问题中运行了相同的应用程序,那么它不会问该问题时那样失败吗?
罗伯·肯尼迪

2
如果您引用权限文档,您会发现它不被弃用。弃用的权限是未使用的权限,您不需要在清单中拥有这些权限,因为不再使用它们。未使用的权限可能是因为替换了API,或者是因为不再需要该A​​PI。是的,您需要互联网许可才能访问互联网。即使是有关连接到互联网的基本文档,也说明需要互联网许可。
Zoe


76

像下面这样放在上面

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.avocats.activeavocats"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
    android:minSdkVersion="9"
    android:targetSdkVersion="16" />

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

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >


    <activity
        android:name="com.example.exp.MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>


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

您是否知道允许NTLM / Windows身份验证所需的任何其他权限?尤其是在XenMobile环境...只是..扔飞镖这里
whyoz

12

如果您想在应用程序中使用Internet并检查网络状态(例如,应用程序是否已连接到Internet),则必须使用代码外部的以下代码application

互联网许可:

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

对于访问网络状态:

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

完整代码:

<uses-sdk
    android:minSdkVersion="9"
    android:targetSdkVersion="16" />

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

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >


    <activity
        android:name=".MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

7

如果仅使用互联网,则使用-

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

如果您正在获取互联网状态,请同时使用-

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

在应用程序标签上方。


6

忘记在清单中添加权限的方法将此代码添加为方法

public static boolean hasPermissions(Context context, String... permissions)
{
    if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && context != null && permissions != null)
    {
        for (String permission : permissions)
        {
            if (ActivityCompat.checkSelfPermission(context, permission) != PackageManager.PERMISSION_GRANTED)
            {
                return false;
            }
        }
    }
    return true;
}

并写在你的

int PERMISSION_ALL = 1;
    String[] PERMISSIONS = {Manifest.permission.READ_CONTACTS, Manifest.permission.WRITE_CONTACTS, Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_SMS, Manifest.permission.CAMERA};

    if (!hasPermissions(this, PERMISSIONS)) {
        ActivityCompat.requestPermissions(this, PERMISSIONS, PERMISSION_ALL);
    }

4

使用这些:

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


3

根据当前版本,Android不会征求与互联网交互的权限,但是您可以添加以下代码,这将对使用旧版本的用户有所帮助,只需在AndroidManifest中添加这些代码即可

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


1

Google无需再要求获得互联网的最新版本许可。不过,要在代码中请求Internet许可,您必须将它们添加到AndroidManifest.xml文件中。

<uses-permission android:name="android.permission.INTERNET"/>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.