【问题标题】:Can't get permissions even with included INTERNET permission即使包含 INTERNET 权限也无法获得权限
【发布时间】:2016-10-09 19:07:45
【问题描述】:

编辑:关于uses-permission is not allowed here 的消息不再出现。

我正在使用 Volley 访问谷歌图书,API 是冰淇淋三明治。即使包括对清单文件的权限,我仍然会收到有关权限的异常。我已经阅读了一些已回答的问题(thisthis)。当光标指向uses-permission 时,表示此处不允许使用该标签。我该如何解决这个问题?

清单文件:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.alone.findgooglebook">

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

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="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>

我使用Volley的函数

private void onSearchClicked() {
        String bookName = editText.getText().toString();
        String url = "https://www.googleapis.com/books/v1/volumes?q=" + bookName;

        RequestQueue queue = Volley.newRequestQueue(this);
        JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject response) {
                Log.d(TAG, response.toString());
            }
        }, new Response.ErrorListener()
        {
            @Override
            public void onErrorResponse(VolleyError err)
            {
                Log.e(TAG, err.getMessage());
            }
        }
        );

        queue.add(request);
    }

editText 已通过查找视图正确初始化。

Logcat:

06-09 04:43:58.895 9190-9364/com.example.alone.findgooglebook E/Volley:[114] NetworkDispatcher.run:未处理的异常 java.lang.SecurityException:权限被拒绝(缺少 INTERNET 允许?) java.lang.SecurityException:权限被拒绝(缺少 INTERNET 允许?) 在 java.net.InetAddress.lookupHostByName(InetAddress.java:418) 在 java.net.InetAddress.getAllByNameImpl(InetAddress.java:236) 在 java.net.InetAddress.getAllByName(InetAddress.java:214) 在 com.android.okhttp.internal.Dns$1.getAllByName(Dns.java:28) 在 com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:216) 在 com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java:122) 在 com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:292) 在 com.android.okhttp.internal.http.HttpEngine.sendSocketRequest(HttpEngine.java:255) 在 com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:206) 在 com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:345) 在 com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:296) 在 com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:503) 在 com.android.okhttp.internal.http.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:136) 在 com.android.volley.toolbox.HurlStack.performRequest(HurlStack.java:110) 在 com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:96) 在 com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:112) 引起:libcore.io.GaiException:getaddrinfo 失败:EAI_NODATA(否 与主机名关联的地址) 在 libcore.io.Posix.getaddrinfo(本机方法) 在 libcore.io.ForwardingOs.getaddrinfo(ForwardingOs.java:61) 在 java.net.InetAddress.lookupHostByName(InetAddress.java:405) 在 java.net.InetAddress.getAllByNameImpl(InetAddress.java:236) 在 java.net.InetAddress.getAllByName(InetAddress.java:214) 在 com.android.okhttp.internal.Dns$1.getAllByName(Dns.java:28) 在 com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:216) 在 com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java:122) 在 com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:292) 在 com.android.okhttp.internal.http.HttpEngine.sendSocketRequest(HttpEngine.java:255) 在 com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:206) 在 com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:345) 在 com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:296) 在 com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:503) 在 com.android.okhttp.internal.http.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:136) 在 com.android.volley.toolbox.HurlStack.performRequest(HurlStack.java:110) 在 com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:96) 在 com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:112) 引起:libcore.io.ErrnoException:getaddrinfo 失败:EACCES (没有权限) 在 libcore.io.Posix.getaddrinfo(本机方法) 在 libcore.io.ForwardingOs.getaddrinfo(ForwardingOs.java:61) 在 java.net.InetAddress.lookupHostByName(InetAddress.java:405) 在 java.net.InetAddress.getAllByNameImpl(InetAddress.java:236) 在 java.net.InetAddress.getAllByName(InetAddress.java:214) 在 com.android.okhttp.internal.Dns$1.getAllByName(Dns.java:28) 在 com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:216) 在 com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java:122) 在 com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:292) 在 com.android.okhttp.internal.http.HttpEngine.sendSocketRequest(HttpEngine.java:255) 在 com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:206) 在 com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:345) 在 com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:296) 在 com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:503) 在 com.android.okhttp.internal.http.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:136) 在 com.android.volley.toolbox.HurlStack.performRequest(HurlStack.java:110) 在 com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:96) 在 com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:112) 06-09 04:43:58.903 9190-9190/com.example.alone.findgooglebook E/MainActivity:java.lang.SecurityException:权限被拒绝 (缺少 INTERNET 权限?)

【问题讨论】:

  • 你的应用 compileSdkVersion 是什么?
  • 是冰淇淋三明治,不记得编号了。我会编辑帖子
  • 这是&lt;uses-permission&gt;,而不是&lt;user-permission&gt;。使用s,不使用r
  • @MikeM.,工作!谢谢你。最后一个问题:我应该留下帖子还是删除它,因为它的某个地方有错字?
  • @MikeM。我自己标记了,等待版主干预

标签: android android-studio permissions genymotion user-permissions


【解决方案1】:

我假设您的 targetSdk 设置为 23,因此您必须向用户询问权限。一个快速修复将是设置 targetSdk=22 ,然后一切都应该工作。

【讨论】:

  • 好的,请提供一些 logcat 来说明您面临的错误
【解决方案2】:

尝试添加

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

并添加您的活动名称与包类似

 <activity android:name="com.example.MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
  </activity>

让我知道它是否有效

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-01
    • 2020-04-12
    • 2018-03-08
    • 2015-11-12
    • 1970-01-01
    • 2020-03-01
    • 1970-01-01
    • 2017-10-18
    相关资源
    最近更新 更多