簡體   English   中英

缺少Android Internet權限

[英]Android internet permission missing

我在AndroidManifest.xml中添加了Internet權限,但是仍然會拋出Internet權限丟失錯誤。

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="info.androidhive.slidingmenu"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
    android:minSdkVersion="11"
    android:targetSdkVersion="17" />

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

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name="info.androidhive.slidingmenu.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>

我下面的示例如何使RSS閱讀器: https : //www.androidpit.com/java-guide-2-program-your-own-rss-reader

我已經做了所有事情,直到授予了Internet權限,但是在添加Internet權限之后,仍然出現錯誤,指出缺少Internet權限。

HomeFragment.java

import android.app.Fragment;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

public class HomeFragment extends Fragment {

    private TextView mRssFeed;

    public HomeFragment(){}

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        View rootView = inflater.inflate(R.layout.fragment_home, container,   false);
        mRssFeed = (TextView) rootView.findViewById(R.id.rss_feed);
        return rootView;
    }

    @Override
    public void onStart() {
        super.onStart();
        new GetAndroidPitRssFeedTask().execute();
    }

    private String getAndroidPitRssFeed() throws IOException {
        InputStream in = null;
        String rssFeed = null;
        try {
            URL url = new URL("http://www.androidpit.com/feed/main.xml");
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            in = conn.getInputStream();
            ByteArrayOutputStream out = new ByteArrayOutputStream();
            byte[] buffer = new byte[1024];
            for (int count; (count = in.read(buffer)) != -1; ) {
                out.write(buffer, 0, count);
            }
            byte[] response = out.toByteArray();
            rssFeed = new String(response, "UTF-8");
        } finally {
            if (in != null) {
                in.close();
            }
        }
        return rssFeed;
    }

    private class GetAndroidPitRssFeedTask extends AsyncTask<Void, Void, String> {
        @Override
        protected String doInBackground(Void... voids) {
            String result = "";
            try {
                result = getAndroidPitRssFeed();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return result;
        }

        @Override
        protected void onPostExecute(String rssFeed) {
            mRssFeed.setText(rssFeed);
        }
    }
}

記錄錯誤信息

04-19 09:01:45.882 8172-8196/info.androidhive.slidingmenu E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1
Process: info.androidhive.slidingmenu, PID: 8172
java.lang.RuntimeException: An error occurred while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:309)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354)
at java.util.concurrent.FutureTask.setException(FutureTask.java:223)
at java.util.concurrent.FutureTask.run(FutureTask.java:242)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
at java.lang.Thread.run(Thread.java:818)
Caused by: java.lang.SecurityException: Permission denied (missing INTERNET permission?)
at java.net.InetAddress.lookupHostByName(InetAddress.java:464)
at java.net.InetAddress.getAllByNameImpl(InetAddress.java:252)
at java.net.InetAddress.getAllByName(InetAddress.java:215)
at com.android.okhttp.internal.Network$1.resolveInetAddresses(Network.java:29)
at com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:188)
at com.android.okhttp.internal.http.RouteSelector.nextProxy(RouteSelector.java:157)
at com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java:100)
at com.android.okhttp.internal.http.HttpEngine.createNextConnection(HttpEngine.java:357)
at com.android.okhttp.internal.http.HttpEngine.nextConnection(HttpEngine.java:340)
at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:330)
at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:248)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:437)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:388)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:231)
at info.androidhive.slidingmenu.HomeFragment.getAndroidPitRssFeed(HomeFragment.java:44)
at info.androidhive.slidingmenu.HomeFragment.access$100(HomeFragment.java:17)
at info.androidhive.slidingmenu.HomeFragment$GetAndroidPitRssFeedTask.doInBackground(HomeFragment.java:66)
at info.androidhive.slidingmenu.HomeFragment$GetAndroidPitRssFeedTask.doInBackground(HomeFragment.java:60)
at android.os.AsyncTask$2.call(AsyncTask.java:295)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) 
at java.lang.Thread.run(Thread.java:818) 
Caused by: android.system.GaiException: android_getaddrinfo failed: EAI_NODATA (No address associated with hostname)
at libcore.io.Posix.android_getaddrinfo(Native Method)
at libcore.io.ForwardingOs.android_getaddrinfo(ForwardingOs.java:55)
at java.net.InetAddress.lookupHostByName(InetAddress.java:451)
at java.net.InetAddress.getAllByNameImpl(InetAddress.java:252) 
at java.net.InetAddress.getAllByName(InetAddress.java:215) 
at com.android.okhttp.internal.Network$1.resolveInetAddresses(Network.java:29) 
at com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:188) 
at com.android.okhttp.internal.http.RouteSelector.nextProxy(RouteSelector.java:157) 
at com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java:100) 
at com.android.okhttp.internal.http.HttpEngine.createNextConnection(HttpEngine.java:357) 
at com.android.okhttp.internal.http.HttpEngine.nextConnection(HttpEngine.java:340) 
at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:330) 
at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:248) 
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:437) 
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:388) 
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:231) 
at info.androidhive.slidingmenu.HomeFragment.getAndroidPitRssFeed(HomeFragment.java:44) 
at info.androidhive.slidingmenu.HomeFragment.access$100(HomeFragment.java:17) 
at info.androidhive.slidingmenu.HomeFragment$GetAndroidPitRssFeedTask.doInBackground(HomeFragment.java:66) 
at info.androidhive.slidingmenu.HomeFragment$GetAndroidPitRssFeedTask.doInBackground(HomeFragment.java:60) 
at android.os.AsyncTask$2.call(AsyncTask.java:295) 
at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) 
at java.lang.Thread.run(Thread.java:818) 
Caused by: android.system.ErrnoException: android_getaddrinfo failed: EACCES (Permission denied)
at libcore.io.Posix.android_getaddrinfo(Native Method) 
at libcore.io.ForwardingOs.android_getaddrinfo(ForwardingOs.java:55) 
at java.net.InetAddress.lookupHostByName(InetAddress.java:451) 
at java.net.InetAddress.getAllByNameImpl(InetAddress.java:252) 
at java.net.InetAddress.getAllByName(InetAddress.java:215) 
at com.android.okhttp.internal.Network$1.resolveInetAddresses(Network.java:29) 
at com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:188) 
at com.android.okhttp.internal.http.RouteSelector.nextProxy(RouteSelector.java:157) 
at com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java:100) 
at com.android.okhttp.internal.http.HttpEngine.createNextConnection(HttpEngine.java:357) 
at com.android.okhttp.internal.http.HttpEngine.nextConnection(HttpEngine.java:340) 
at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:330) 
at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:248) 
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:437) 
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:388) 
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:231) 
at info.androidhive.slidingmenu.HomeFragment.getAndroidPitRssFeed(HomeFragment.java:44) 
at info.androidhive.slidingmenu.HomeFragment.access$100(HomeFragment.java:17) 
at info.androidhive.slidingmenu.HomeFragment$GetAndroidPitRssFeedTask.doInBackground(HomeFragment.java:66) 
at info.androidhive.slidingmenu.HomeFragment$GetAndroidPitRssFeedTask.doInBackground(HomeFragment.java:60) 
at android.os.AsyncTask$2.call(AsyncTask.java:295) 
at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) 
at java.lang.Thread.run(Thread.java:818) 

您必須定義兩個權限

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

並清理和重建您的項目。

我要做的就是重啟手機。 我認為權限會以某種方式緩存在手機中,並且在我按“運行應用程序”后沒有更新,但是在重啟手機后,權限得到了更新。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM