可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
I am trying to access HTTP link using HttpURLConnection
in Android to download a file, but I am getting this warning in LogCat
:
WARN/System.err(223): java.net.SocketException: Permission denied (maybe missing INTERNET permission)
I have added android.Manifest.permission to my application but its still giving the same exception.
回答1:
Assuming you do not have permissions set from your LogCat
error description, here is my contents for my AndroidMainfest.xml
file that has access to the internet:
<manifest xlmns:android...>
...
<uses-permission android:name=\"android.permission.INTERNET\" />
<application ...
</manifest>
Other than that, you should be fine to download a file from the internet.
回答2:
In case somebody will struggle with same issue, it is case sensitive statement, so wrong case means your application won\'t get the permission.
WRONG
<uses-permission android:name=\"ANDROID.PERMISSION.INTERNET\" />
CORRECT
<uses-permission android:name=\"android.permission.INTERNET\" />
This issue may happen ie. on autocomplete in IDE
回答3:
If you are using the Eclipse ADT plugin for your development, open AndroidManifest.xml
in the Android Manifest Editor (should be the default action for opening AndroidManifest.xml
from the project files list).
Afterwards, select the Permissions
tab along the bottom of the editor (Manifest - Application - Permissions - Instrumentation - AndroidManifest.xml
), then click Add...
a Uses Permission
and select the desired permission from the dropdown on the right, or just copy paste in the necessary one (such as the android.permission.INTERNET
permission you required).
回答4:
<?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>
回答5:
Copy the following line to your application manifest file and paste before the <application>
tag.
<uses-permission android:name=\"android.permission.INTERNET\"/>
Placing the permission below the <application/>
tag will work, but will give you warning. So take care to place it before the <application/>
tag declaration.
回答6:
When using eclipse, Follow these steps
1) Double click on the manifest to show it on the editor
2) Click on the permissions tab below the manifest editor
3) Click on Add button
4) on the dialog that appears Click uses permission. (Ussually the last item on the list)
5) Notice the view that appears on the rigth side Select \"android.permission.INTERNET\"
6) Then a series of Ok and finally save.
Hope this helps
回答7:
Just add this to your android manifest:
<uses-permission android:name=\"android.permission.INTERNET\"/>
回答8:
That may be also interesting in context of adding INTERNET permission to your application:
Google has also given each app Internet access, effectively removing the Internet access permission. Oh, sure, Android developers still have to declare they want Internet access when putting together the app. But users can no longer see the Internet access permission when installing an app and current apps that don’t have Internet access can now gain Internet access with an automatic update without prompting you.
Source: http://www.howtogeek.com/190863/androids-app-permissions-were-just-simplified-now-theyre-much-less-secure/
Bottom line is that you still have to add INTERNET permission in manifest file but application will be updated on user\'s devices without asking them for new permission.
回答9:
I am late but i want to complete the answer.
An permission is added in manifest.xml
like
<uses-permission android:name=\"android.permission.INTERNET\"/>
Although it is not enough to add permission to manifest if it is a dangerous permission. See android doc. Like Camera, Storage permissions.
<uses-permission android:name=\"android.permission.CAMERA\"/>
You will need to ask permission from user. I use RxPermission library that is widely used library for asking permission. Because it is long code which we have to write to ask permission.
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
}
});
Add this library to your app
allprojects {
repositories {
...
maven { url \'https://jitpack.io\' }
}
}
dependencies {
implementation \'com.github.tbruyelle:rxpermissions:0.10.1\'
implementation \'com.jakewharton.rxbinding2:rxbinding:2.1.1\'
}