我试图在Android中使用HttpURLConnection访问HTTP链接来下载文件,但我在LogCat中得到这个警告:

WARN/System.err(223): java.net.SocketException:权限被拒绝(可能缺少INTERNET权限)

我已经添加了android.Manifest.permission到我的应用程序,但它仍然给出相同的异常。


当前回答

我迟到了,但我想完成答案。

在manifest.xml中添加权限

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

这对于没有提示给用户权限的标准权限已经足够了。但是,如果它是一个危险的权限,仅为显化添加权限是不够的。见机器人医生。像相机,存储权限。

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

你需要征得用户的同意。我使用RxPermission库,这是广泛使用的库请求权限。因为它是很长的代码,我们必须写请求许可。

RxPermissions rxPermissions = new RxPermissions(this); // where this is an Activity instance // Must be done during an initialization phase like onCreate
rxPermissions
    .request(Manifest.permission.CAMERA)
    .subscribe(granted -> {
        if (granted) { // Always true pre-M
           // I can control the camera now
        } else {
           // Oups permission denied
        }
    });

将这个库添加到应用程序中

allprojects {
    repositories {
        ...
        maven { url 'https://jitpack.io' }
    }
}

dependencies {
    implementation 'com.github.tbruyelle:rxpermissions:0.10.1'
    implementation 'com.jakewharton.rxbinding2:rxbinding:2.1.1'
}

其他回答

权限名称区分大小写

为了防止别人遇到同样的问题,这是区分大小写的语句,所以错误的大小写意味着你的应用程序将无法获得许可。

错误的

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

正确的

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

这个问题可能会发生。在IDE中自动完成

用于颤振开发者。

android /应用/游戏/ AndroidManifest . xml

外的

应用程序标记

但是在

清单标签

Add

< uses-permission android: name = " android.permission。互联网" / >

我迟到了,但我想完成答案。

在manifest.xml中添加权限

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

这对于没有提示给用户权限的标准权限已经足够了。但是,如果它是一个危险的权限,仅为显化添加权限是不够的。见机器人医生。像相机,存储权限。

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

你需要征得用户的同意。我使用RxPermission库,这是广泛使用的库请求权限。因为它是很长的代码,我们必须写请求许可。

RxPermissions rxPermissions = new RxPermissions(this); // where this is an Activity instance // Must be done during an initialization phase like onCreate
rxPermissions
    .request(Manifest.permission.CAMERA)
    .subscribe(granted -> {
        if (granted) { // Always true pre-M
           // I can control the camera now
        } else {
           // Oups permission denied
        }
    });

将这个库添加到应用程序中

allprojects {
    repositories {
        ...
        maven { url 'https://jitpack.io' }
    }
}

dependencies {
    implementation 'com.github.tbruyelle:rxpermissions:0.10.1'
    implementation 'com.jakewharton.rxbinding2:rxbinding:2.1.1'
}

在应用程序标签中添加以下行:

 android:usesCleartextTraffic="true"

如下代码所示:

<application
    ....
    android:usesCleartextTraffic="true"
    ....>

并在应用程序上面添加以下标签

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

像那样:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.themarona.app">
    <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:usesCleartextTraffic="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文件的内容,可以访问互联网:

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

除此之外,你应该可以从网上下载一个文件。