【问题标题】:How to add manifest permission to an application?如何向应用程序添加清单权限?
【发布时间】:2011-01-11 06:36:47
【问题描述】:

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

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

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

【问题讨论】:

  • 粘贴您的 manifest-permission 内容,您是否授予 INTERNET 权限?
  • 我添加了 import android.Manifest.permission;到应用程序,仅此而已。我还需要添加什么来授予权限
  • 看看下面我的回答,看看是否有帮助,如果您没有在 AndroidManifest.xml 文件中设置 INTERNET 权限,我不知道import android.Manifest.permission 会为您做什么

标签: android exception android-manifest


【解决方案1】:

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

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

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

【讨论】:

  • 如果您找到可以解决您的问题或看起来有帮助的答案,选择“已回答”和/或投票很有用,它可以帮助遇到相同问题的任何人社区。这不仅针对这个问题,还针对您提出的其他问题
  • 我不知道,如果这能解决我的问题,我会这样做
  • 如果您遇到任何不同的情况请报告,我将非常乐意为您提供帮助。
  • 在我的情况下,我必须确保它是清单声明之后的 VERY FIRST 行。任何低于它的地方,它都不起作用。 v2.2, api 8 级, htc g1
  • @dialex AFAIK,application 标签内没有uses-permission 的子元素,只有manifest
【解决方案2】:

权限名称区分大小写

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

错误

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

正确

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

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

【讨论】:

  • 谢谢!我浪费了一整天的时间想知道为什么我的应用程序不工作。我是 android studio 的新手,之前在 Eclipse 中没有出现这个问题 :)
  • 我浪费了一整天的时间来弄清楚它们之间的实际区别,OMG 它的 CapitalSmall ANDROID.PERMISSIONandroid.permission ;) :p
【解决方案3】:
<?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】:

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

    然后,选择编辑器底部的Permissions 选项卡 (Manifest - Application - Permissions - Instrumentation - AndroidManifest.xml),然后单击 Add...Uses Permission 并从右侧的下拉列表中选择所需的权限,或者直接复制粘贴必要的(例如您需要的android.permission.INTERNET 权限)。

    【讨论】:

      【解决方案5】:

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

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

      将权限放在&lt;application/&gt; 标签下面会起作用,但会给你警告。所以请注意将其放在&lt;application/&gt; 标签声明之前。

      【讨论】:

      • 在撰写此评论时,它位于应用程序元素的外部,但在清单之内。例如: ...
      【解决方案6】:

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

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

      希望对你有帮助

      【讨论】:

        【解决方案7】:

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

        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'
        }
        

        【讨论】:

          【解决方案8】:

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

           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>
          

          【讨论】:

            【解决方案9】:

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

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

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

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

            【讨论】:

              【解决方案10】:

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

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

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

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2019-08-01
                • 1970-01-01
                • 1970-01-01
                • 2018-01-19
                • 2014-06-06
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多