如何向应用程序添加清单权限?

时间:2010-01-30 20:18:49

标签: android exception android-manifest

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

  

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

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

11 个答案:

答案 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访问权限。

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

最重要的是,您仍然需要在清单文件中添加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。