我正在尝试使用Android中的HttpURLConnection
访问HTTP链接以下载文件,但我在LogCat
收到此警告:
WARN / System.err(223):java.net.SocketException:权限被拒绝(可能缺少INTERNET权限)
我已将android.Manifest.permission添加到我的应用程序中,但它仍然提供相同的异常。
答案 0 :(得分:827)
假设您没有根据LogCat
错误说明设置权限,以下是我可以访问互联网的AndroidManifest.xml
文件的内容:
<manifest xlmns:android...>
...
<uses-permission android:name="android.permission.INTERNET" />
<application ...
</manifest>
除此之外,您可以从互联网上下载文件。
答案 1 :(得分:57)
如果有人会遇到同样的问题,是区分大小写的语句,所以错误的情况意味着您的申请将无法获得许可。
<强> WRONG 强>
<uses-permission android:name="ANDROID.PERMISSION.INTERNET" />
<强> CORRECT 强>
<uses-permission android:name="android.permission.INTERNET" />
这个问题可能会发生,即。在IDE中自动完成
答案 2 :(得分:34)
如果您正在使用Eclipse ADT插件进行开发,请在Android Manifest Editor中打开AndroidManifest.xml
(应该是从项目文件列表中打开AndroidManifest.xml
的默认操作)。
之后,选择编辑器底部的Permissions
标签(Manifest - Application - Permissions - Instrumentation - AndroidManifest.xml
),然后点击Add...
a Uses Permission
,然后从下拉列表中选择所需的权限。正确,或只是复制必要的粘贴(例如您需要的android.permission.INTERNET
权限。)
答案 3 :(得分:32)
<?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>
答案 4 :(得分:22)
将以下行复制到应用程序清单文件并粘贴到<application>
标记之前。
<uses-permission android:name="android.permission.INTERNET"/>
将权限放在<application/>
标记下方会有效,但会向您发出警告。因此,请务必将其放在<application/>
标记声明之前。
答案 5 :(得分:12)
使用eclipse时,请按照以下步骤进行操作
1)双击清单,在编辑器上显示
2)单击清单编辑器下面的权限选项卡
3)单击添加按钮
4)在出现的对话框上单击使用权限。 (通常是列表中的最后一项)
5)注意出现在rigth侧的视图选择“android.permission.INTERNET”
6)然后一系列Ok,最后保存
希望这有帮助
答案 6 :(得分:7)
只需将此添加到您的Android清单:
<uses-permission android:name="android.permission.INTERNET"/>
答案 7 :(得分:4)
在向您的应用程序添加INTERNET权限的上下文中,这可能也很有趣:
Google还为每个应用提供了互联网访问权限,有效地删除了互联网访问权限。哦,当然,Android开发人员仍然必须在组合应用程序时声明他们想要访问Internet。但是,用户在安装应用程序时无法再看到Internet访问权限,并且当前无法访问Internet的应用程序现在可以在不提示您的情况下通过自动更新获得Internet访问权限。
最重要的是,您仍然需要在清单文件中添加INTERNET权限,但应用程序将在用户的设备上更新,而不会要求他们获得新的权限。
答案 8 :(得分:3)
我迟到了,但我想填写答案。
在权限manifest.xml
中添加了
<uses-permission android:name="android.permission.INTERNET"/>
这对于standard permissions而言已足够,其中不会提示用户任何权限。但是,仅添加显式权限是危险的权限,这还不够。参见android doc。像相机一样,具有存储权限。
<uses-permission android:name="android.permission.CAMERA"/>
您将需要ask permission from user。我使用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'
}
答案 9 :(得分:1)
在您的应用程序标签中添加以下行:
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>
答案 10 :(得分:0)
在尝试通过android模拟器加载或访问Internet时,必须在清单文件中同时使用“网络状态”和“访问网络状态”。
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
如果您仅授予.INTERNET权限,则它将无法访问Internet。