507

我正在尝试访问HttpURLConnection在 Android 中使用的 HTTP 链接以下载文件,但我收到以下警告LogCat

WARN/System.err(223): java.net.SocketException: Permission denied (maybe missing INTERNET permission)

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

4

10 回答 10

1128

假设您没有从LogCat错误描述中设置权限,这是我AndroidManifest.xml可以访问 Internet 的文件的内容:

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

除此之外,您应该可以从 Internet 下载文件。

于 2010-01-30T20:26:15.937 回答
95

权限名称区分大小写

万一有人遇到同样的问题,这是区分大小写的声明,所以错误的大小写意味着您的应用程序不会获得许可。

错误的

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

正确的

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

这个问题可能会发生,即。关于 IDE 中的自动完成

于 2015-05-14T14:17:44.943 回答
56
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.photoeffect"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="18" />

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="com.example.towntour.permission.MAPS_RECEIVE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@android:style/Theme.Black.NoTitleBar" >
    <activity
        android:name="com.photoeffect.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>

</manifest>
于 2013-12-04T10:25:44.863 回答
34

如果您使用 Eclipse ADT 插件进行开发,请AndroidManifest.xml在 Android Manifest Editor 中打开(应该是AndroidManifest.xml从项目文件列表中打开的默认操作)。

然后,选择编辑器Permissions底部的标签(Manifest - Application - Permissions - Instrumentation - AndroidManifest.xmlAdd...Uses Permissionandroid.permission.INTERNET

于 2010-04-06T16:44:15.983 回答
25

将以下行复制到您的应用程序清单文件并粘贴到<application> 标记之前。

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

将权限放在<application/>标签下方会起作用,但会给您警告。因此请注意将其放在<application/>标签声明之前。

于 2013-12-04T10:30:59.153 回答
12

使用 eclipse 时,请按照以下步骤操作

1)双击清单以在编辑器上显示它
2)单击清单编辑器下方的权限选项卡
3)单击添加按钮
4)在出现的对话框中单击使用权限。(通常是列表中的最后一项)
5)注意出现在右侧的视图 选择“android.permission.INTERNET”
6)然后一系列 Ok 最后保存。

希望这可以帮助

于 2012-08-01T16:50:05.767 回答
8

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

一个权限被添加在manifest.xmllike

<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'
}
于 2018-07-10T17:18:17.990 回答
7

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

 android:usesCleartextTraffic="true"

看起来像下面的代码:

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

并在上面添加以下标签application

<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>
于 2021-02-24T22:37:20.247 回答
4

在将 INTERNET 权限添加到您的应用程序的上下文中,这可能也很有趣:

谷歌还为每个应用授予了互联网访问权限,有效地取消了互联网访问权限。哦,当然,Android 开发人员在组装应用程序时仍然必须声明他们想要访问 Internet。但是用户在安装应用程序时不再可以看到 Internet 访问权限,并且当前无法访问 Internet 的应用程序现在可以通过自动更新获得 Internet 访问权限,而无需提示您。

资料来源: http: //www.howtogeek.com/190863/androids-app-permissions-were-just-simplified-now-theyre-much-less-secure/

底线是您仍然必须在清单文件中添加 INTERNET 权限,但应用程序将在用户的设备上更新,而无需询问他们新的权限。

于 2014-07-28T11:57:15.910 回答
-1

当您尝试通过 android 模拟器加载或访问互联网时,您必须在清单文件中同时使用网络和访问网络状态。

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

如果您只授予 .INTERNET 权限,它将无法访问 Internet。

于 2019-10-04T05:59:02.437 回答