SecurityException: अनुमति अस्वीकृत (INTERNET अनुमति याद आ रही है?)


92

यह त्रुटि वास्तव में वास्तव में अजीब है और मुझे नहीं पता कि इसे कैसे पुन: पेश करना है और इसे कैसे ठीक करना है क्योंकि मैंने बहुत सारी खोज की लेकिन कुछ भी उपयोगी नहीं था।

यहाँ स्टैकट्रेस है:

Stack Trace
_________________________________
0   java.lang.RuntimeException: An error occured while executing doInBackground()
1       at android.os.AsyncTask$3.done(AsyncTask.java:299)
2       at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
3       at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
4       at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
5       at java.util.concurrent.FutureTask.run(FutureTask.java:137)
6       at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
7       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
8       at java.lang.Thread.run(Thread.java:856)
9   Caused by: java.lang.SecurityException: Permission denied (missing INTERNET permission?)
10      at java.net.InetAddress.lookupHostByName(InetAddress.java:430)
11      at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
12      at java.net.InetAddress.getAllByName(InetAddress.java:214)
13      at libcore.net.http.HttpConnection.<init>(HttpConnection.java:70)
14      at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50)
15      at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:340)
16      at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:87)
17      at libcore.net.http.HttpConnection.connect(HttpConnection.java:128)
18      at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:316)
19      at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.makeSslConnection(HttpsURLConnectionImpl.java:461)
20      at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.connect(HttpsURLConnectionImpl.java:433)
21      at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:290)
22      at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:240)
23      at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:292)
24      at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:185)
25      at libcore.net.http.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:271)
26      at com.designfuture.music.api.MusixMatchApi.sendRequestJSON(MusixMatchApi.java:1143)
27      at com.designfuture.music.api.MusixMatchApi.handleRequestJSON(MusixMatchApi.java:982)
28      at com.designfuture.music.api.MusixMatchApi.getConfig(MusixMatchApi.java:211)
29      at com.designfuture.music.asynctask.GetConfigAsyncTask.doInBackground(GetConfigAsyncTask.java:28)
30      at com.designfuture.music.asynctask.GetConfigAsyncTask.doInBackground(GetConfigAsyncTask.java:1)
31      at android.os.AsyncTask$2.call(AsyncTask.java:287)
32      at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
33      ... 4 more
34  Caused by: libcore.io.GaiException: getaddrinfo failed: EAI_NODATA (No address associated with hostname)
35      at libcore.io.Posix.getaddrinfo(Native Method)
36      at libcore.io.ForwardingOs.getaddrinfo(ForwardingOs.java:55)
37      at java.net.InetAddress.lookupHostByName(InetAddress.java:405)
38      ... 26 more
39  Caused by: libcore.io.ErrnoException: getaddrinfo failed: EACCES (Permission denied)
40      ... 29 more
41  java.lang.SecurityException: Permission denied (missing INTERNET permission?)
42      at java.net.InetAddress.lookupHostByName(InetAddress.java:430)
43      at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
44      at java.net.InetAddress.getAllByName(InetAddress.java:214)
45      at libcore.net.http.HttpConnection.<init>(HttpConnection.java:70)
46      at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50)
47      at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:340)
48      at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:87)
49      at libcore.net.http.HttpConnection.connect(HttpConnection.java:128)
50      at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:316)
51      at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.makeSslConnection(HttpsURLConnectionImpl.java:461)
52      at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.connect(HttpsURLConnectionImpl.java:433)
53      at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:290)
54      at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:240)
55      at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:292)
56      at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:185)
57      at libcore.net.http.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:271)
58      at com.designfuture.music.api.MusixMatchApi.sendRequestJSON(MusixMatchApi.java:1143)
59      at com.designfuture.music.api.MusixMatchApi.handleRequestJSON(MusixMatchApi.java:982)
60      at com.designfuture.music.api.MusixMatchApi.getConfig(MusixMatchApi.java:211)
61      at com.designfuture.music.asynctask.GetConfigAsyncTask.doInBackground(GetConfigAsyncTask.java:28)
62      at com.designfuture.music.asynctask.GetConfigAsyncTask.doInBackground(GetConfigAsyncTask.java:1)
63      at android.os.AsyncTask$2.call(AsyncTask.java:287)
64      at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
65      at java.util.concurrent.FutureTask.run(FutureTask.java:137)
66      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
67      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
68      at java.lang.Thread.run(Thread.java:856)
69  Caused by: libcore.io.GaiException: getaddrinfo failed: EAI_NODATA (No address associated with hostname)
70      at libcore.io.Posix.getaddrinfo(Native Method)
71      at libcore.io.ForwardingOs.getaddrinfo(ForwardingOs.java:55)
72      at java.net.InetAddress.lookupHostByName(InetAddress.java:405)
73      ... 26 more
74  Caused by: libcore.io.ErrnoException: getaddrinfo failed: EACCES (Permission denied)
75      ... 29 more
76  libcore.io.GaiException: getaddrinfo failed: EAI_NODATA (No address associated with hostname)
77      at libcore.io.Posix.getaddrinfo(Native Method)
78      at libcore.io.ForwardingOs.getaddrinfo(ForwardingOs.java:55)
79      at java.net.InetAddress.lookupHostByName(InetAddress.java:405)
80      at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
81      at java.net.InetAddress.getAllByName(InetAddress.java:214)
82      at libcore.net.http.HttpConnection.<init>(HttpConnection.java:70)
83      at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50)
84      at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:340)
85      at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:87)
86      at libcore.net.http.HttpConnection.connect(HttpConnection.java:128)
87      at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:316)
88      at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.makeSslConnection(HttpsURLConnectionImpl.java:461)
89      at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.connect(HttpsURLConnectionImpl.java:433)
90      at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:290)
91      at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:240)
92      at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:292)
93      at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:185)
94      at libcore.net.http.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:271)
95      at com.designfuture.music.api.MusixMatchApi.sendRequestJSON(MusixMatchApi.java:1143)
96      at com.designfuture.music.api.MusixMatchApi.handleRequestJSON(MusixMatchApi.java:982)
97      at com.designfuture.music.api.MusixMatchApi.getConfig(MusixMatchApi.java:211)
98      at com.designfuture.music.asynctask.GetConfigAsyncTask.doInBackground(GetConfigAsyncTask.java:28)
99      at com.designfuture.music.asynctask.GetConfigAsyncTask.doInBackground(GetConfigAsyncTask.java:1)
100     at android.os.AsyncTask$2.call(AsyncTask.java:287)
101     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
102     at java.util.concurrent.FutureTask.run(FutureTask.java:137)
103     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
104     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
105     at java.lang.Thread.run(Thread.java:856)
106 Caused by: libcore.io.ErrnoException: getaddrinfo failed: EACCES (Permission denied)
107     ... 29 more
108 libcore.io.ErrnoException: getaddrinfo failed: EACCES (Permission denied)
109     at libcore.io.Posix.getaddrinfo(Native Method)
110     at libcore.io.ForwardingOs.getaddrinfo(ForwardingOs.java:55)
111     at java.net.InetAddress.lookupHostByName(InetAddress.java:405)
112     at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
113     at java.net.InetAddress.getAllByName(InetAddress.java:214)
114     at libcore.net.http.HttpConnection.<init>(HttpConnection.java:70)
115     at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50)
116     at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:340)
117     at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:87)
118     at libcore.net.http.HttpConnection.connect(HttpConnection.java:128)
119     at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:316)
120     at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.makeSslConnection(HttpsURLConnectionImpl.java:461)
121     at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.connect(HttpsURLConnectionImpl.java:433)
122     at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:290)
123     at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:240)
124     at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:292)
125     at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:185)
126     at libcore.net.http.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:271)
127     at com.designfuture.music.api.MusixMatchApi.sendRequestJSON(MusixMatchApi.java:1143)
128     at com.designfuture.music.api.MusixMatchApi.handleRequestJSON(MusixMatchApi.java:982)
129     at com.designfuture.music.api.MusixMatchApi.getConfig(MusixMatchApi.java:211)
130     at com.designfuture.music.asynctask.GetConfigAsyncTask.doInBackground(GetConfigAsyncTask.java:28)
131     at com.designfuture.music.asynctask.GetConfigAsyncTask.doInBackground(GetConfigAsyncTask.java:1)
132     at android.os.AsyncTask$2.call(AsyncTask.java:287)
133     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
134     at java.util.concurrent.FutureTask.run(FutureTask.java:137)
135     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
136     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
137     at java.lang.Thread.run(Thread.java:856)

यहाँ मेरा AndroidManifest.xml है

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="my_app_package"
    android:installLocation="auto"
    android:versionCode="my_version_code"
    android:versionName="my_version_name" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="16" />

    <supports-screens
        android:anyDensity="true"
        android:largeScreens="true"
        android:normalScreens="true"
        android:resizeable="true"
        android:smallScreens="true"
        android:xlargeScreens="true" />

    <uses-feature android:glEsVersion="0x00010001" />

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

    <application
        android:allowTaskReparenting="true"
        android:debuggable="true"
        android:icon="@drawable/mxm_icon"
        android:label="@string/musicbrowserlabel"
        android:theme="@style/Theme.Music" >

        <!-- MY ACTIVITIES -->



    </application>

</manifest>

कृपया मुझे यह पूछने में परेशान न करें कि क्या मेरे प्रकट में सही इंटरनेट की अनुमति है क्योंकि यह एप्लिकेशन 2 साल से बाजार में है: पी

मैंने यह भी देखा है कि (Crittercism से) सभी बग Android 4.1.x संस्करण (JB) से आ रहे हैं। मुझे नहीं पता कि क्या डिवाइस रूट की गई है या क्या है (मैं इस जानकारी को फिलहाल नहीं देख सकता)


क्या यह संभव है कि होस्टनाम बदल गया है (इस त्रुटि संदेश के कारण): होस्टनाम से जुड़ा कोई पता नहीं
Opiatefuchs

क्या आपने डिवाइस के विभिन्न संस्करणों के साथ प्रयास किया? या प्रत्येक संस्करण पर हो रही है?
पंकज कुमार

1
plz add <उपयोग-अनुमति एंड्रॉइड: नाम = "android.permission.INTERNET" /> <उपयोग-अनुमति एंड्रॉइड: नाम = "android.permission.ACCESS_NETWORK_STATE" /> आउटसाइड <Application> टैग आपके प्रोजेक्ट का पुनर्निर्माण और रन करता है। इसके लिए मेरे साथ काम किया
अज़हर

जिस तरह से आदेश मायने रखता है, वैसे ही stackoverflow.com/questions/25135595/…
Nabin

@SteErMi आपने इस मुद्दे को सुलझा लिया है, मैं उसी स्थिति का सामना कर रहा हूं
रवींद मौर्य

जवाबों:


118

नोट: मैंने जून 2013 में यह उत्तर लिखा था, इसलिए आजकल यह थोड़ा सा दिनांकित है। संस्करण 6 (मार्शमैलो) के बाद से एंड्रॉइड प्लेटफॉर्म में कई चीजें बदल गईं, जिससे आजकल पूरी समस्या कम / ज्यादा अप्रचलित हो गई है। हालांकि मेरा मानना ​​है कि यह पोस्ट अभी भी सामान्य समस्या विश्लेषण दृष्टिकोण उदाहरण के रूप में पढ़ने लायक हो सकती है।


आपके द्वारा प्राप्त अपवाद ( SecurityException: Permission denied (missing INTERNET permission?)), स्पष्ट रूप से इंगित करता है कि आपको नेटवर्किंग करने की अनुमति नहीं है। यह काफी निर्विवाद तथ्य है। लेकिन यह कैसे हो सकता है? आमतौर पर यह या तो <uses-permission android:name="android.permission.INTERNET" />आपकी AndroidManifest.xmlफ़ाइल में गुम प्रविष्टि के कारण होता है या, जैसा कि इंटरनेट की अनुमति है कि एंड्रॉइड फ्रेमवर्क में लंबे समय तक, मिस्ड बग द्वारा इंस्टॉलेशन को चलाने की अनुमति नहीं है, जो आपके ऐप को सफलतापूर्वक स्थापित करने का कारण बनता है, लेकिन अपेक्षित अनुमति के बिना।

मेरा मेनिफेस्ट सही है, तो यह कैसे हो सकता है?

सैद्धांतिक रूप से, uses-permissionमेनिफेस्ट में उपस्थिति पूरी तरह से आवश्यकता को पूरा करती है और डेवलपर के दृष्टिकोण से नेटवर्किंग करने में सक्षम होने के लिए आवश्यक है। इसके अलावा, चूंकि इंस्टॉलेशन के दौरान उपयोगकर्ता को अनुमतियां दिखाई जाती हैं, इसलिए आपके उपयोगकर्ता के डिवाइस पर इंस्टॉल किया गया तथ्य समाप्त हो गया है। इसका मतलब है कि आपने जो मांगा है (अन्यथा इंस्टॉलेशन रद्द कर दिया गया है), इसलिए यह मान लें कि यदि आपका कोड निष्पादित किया गया है तो सभी अनुरोधित अनुमतियां हैं मान्य है। और एक बार अनुमति देने के बाद, उपयोगकर्ता ऐप को पूरी तरह से अनइंस्टॉल करने की अनुमति नहीं दे सकता है क्योंकि पूरी तरह से मानक एंड्रॉइड फ्रेमवर्क (एओएसपी से) इस समय ऐसी कोई सुविधा प्रदान नहीं करता है।

लेकिन अगर आप अपने ऐप को रूट किए गए डिवाइस पर भी चलाने से भी गुरेज नहीं कर रहे हैं तो चीजें और भी मुश्किल होती जा रही हैं। Google में उपलब्ध उपकरण मौजूद हैं। आपके उपयोगकर्ता रन-टाइम में इंस्टॉल किए गए ऐप्स को दी गई अनुमति को नियंत्रित करने के लिए इंस्टॉल कर सकते हैं - उदाहरण के लिए: अस्वीकृत और अन्य। यह CyanogenMod , विक्रेता ब्रांड (यानी एलजी के) या अन्य कस्टम ROM के साथ भी किया जा सकता है , जिसमें विभिन्न प्रकार के "गोपनीयता प्रबंधक" या इसी तरह के उपकरण होते हैं।

इसलिए यदि ऐप को किसी भी तरह से अवरुद्ध किया जाता है, तो यह मूल रूप से उपयोगकर्ता द्वारा जानबूझकर अवरुद्ध किया जाता है और यदि ऐसा है, तो यह वास्तव में इस मामले में अधिक उपयोगकर्ता की समस्या है (या वह नहीं समझता / समझती है कि कुछ विकल्प / उपकरण वास्तव में क्या करते हैं और इसके परिणाम क्या होंगे) आपकी तुलना में, क्योंकि मानक एसडीके (और अधिकांश ऐप को उस एसडीके को ध्यान में रखकर लिखा गया है) बस उस तरह से व्यवहार नहीं करता है। इसलिए मुझे दृढ़ता से संदेह है कि यह समस्या "मानक", स्टॉक के साथ गैर-रूट किए गए डिवाइस (या सैमसंग, एचटीसी, सोनी आदि जैसे विक्रेता) ROM पर होती है।

मैं दुर्घटना नहीं करना चाहता ...

उचित रूप से लागू की गई अनुमति प्रबंधन और / org अवरोधन को इस तथ्य से निपटना चाहिए कि अधिकांश ऐप्स उस स्थिति के लिए तैयार नहीं हो सकते हैं जहां कुछ सुविधाओं तक पहुंच प्रदान की जाती है और एक ही समय में सुलभ नहीं है, क्योंकि यह उस तरह का विरोधाभास है जहां ऐप प्रकट का उपयोग करता है इंस्टॉल समय पर पहुंच का अनुरोध करें। सही किया गया अभिगम नियंत्रण पहले की तरह सभी चीजों को काम करना चाहिए, और अभी भी सुविधा के अपेक्षित व्यवहार के दायरे में तकनीकों का उपयोग करके प्रयोज्य को सीमित करना चाहिए। उदाहरण के लिए, जब कुछ अनुमति दी जाती है (यानी जीपीएस, इंटरनेट का उपयोग) तो इस तरह की सुविधा ऐप / उपयोगकर्ता के नजरिए से उपलब्ध कराई जा सकती है (यानी आप जीपीएस चालू कर सकते हैं या कनेक्ट करने का प्रयास कर सकते हैं), बदल दिया गया कार्यान्वयन कोई वास्तविक डेटा प्रदान नहीं कर सकता है - यानी जीपीएस हमेशा कोई निर्देशांक नहीं लौटा सकता है, जैसे कि जब आप इनडोर हैं या कोई उपग्रह "फिक्स" नहीं है। इंटरनेट का उपयोग पहले की तरह किया जा सकता है, लेकिन आप कोई सफल संबंध नहीं बना सकते क्योंकि कोई डेटा कवरेज या रूटिंग नहीं है। इस तरह के परिदृश्यों को सामान्य उपयोग में भी अपेक्षित होना चाहिए, इसलिए इसे पहले से ही ऐप्स द्वारा नियंत्रित किया जाना चाहिए। जैसा कि यह सामान्य रूप से हर दिन उपयोग के दौरान हो सकता है, ऐसी स्थिति में किसी भी दुर्घटना का सबसे अधिक संभावना आवेदन बग से संबंधित होना चाहिए।

हमारे पास उस पर्यावरण के बारे में बहुत अधिक जानकारी का अभाव है जिस पर यह समस्या w / o अनुमान लगाने के लिए समस्या का निदान करती है, लेकिन समाधान के प्रकार के रूप में, आप भविष्य में इस तरह के अप्रत्याशित अपवादों को पकड़ने के लिए setDefaultUncaughtExceptionHandler () का उपयोग करने पर विचार कर सकते हैं और (बस उपयोगकर्ता को विस्तृत जानकारी दिखाएं कि क्या अनुमति है बस दुर्घटनाग्रस्त होने के बजाय आपके ऐप की ज़रूरत है। कृपया ध्यान दें कि इसके उपयोग से क्रिटेरिज्म, एसीआरए और अन्य जैसे उपकरणों के साथ संघर्ष की संभावना होगी, इसलिए यदि आप इनमें से किसी का भी उपयोग करते हैं तो सावधान रहें।

टिप्पणियाँ

कृपया ध्यान रखें कि android.permission.INTERNETनेटवर्किंग से संबंधित एकमात्र अनुमति नहीं है जिसे आपको सफलतापूर्वक नेटवर्किंग करने के प्रयास में प्रकट में घोषित करने की आवश्यकता हो सकती है। INTERNETअनुमति दिए जाने के बाद बस एप्लिकेशन को नेटवर्क सॉकेट खोलने की अनुमति मिलती है (जो मूल रूप से किसी भी नेटवर्क डेटा ट्रांसफर करने के लिए मूलभूत आवश्यकता है)। लेकिन यदि आपका नेटवर्क स्टैक / लाइब्रेरी नेटवर्क के बारे में भी जानकारी प्राप्त करना चाहेगा, तो आपको android.permission.ACCESS_NETWORK_STATEअपने मेनिफेस्ट (जो कि HttpUrlConnection क्लाइंट द्वारा आवश्यक है ) ( ट्यूटोरियल देखें ) की आवश्यकता होगी।


परिशिष्ट (2015-07-16)

कृपया ध्यान दें कि एंड्रॉइड 6 (उर्फ मार्शमैलो) ने पूरी तरह से नए अनुमति प्रबंधन तंत्र की शुरुआत की, जिसे रनटाइम अनुमतियां कहा जाता है । यह उपयोगकर्ता को इस बात पर अधिक नियंत्रण देता है कि क्या अनुमति दी जाती है (चयनात्मक अनुदान की भी अनुमति देता है) या किसी को पहले से ही अनुमत अनुमति रद्द करने की अनुमति देता है w / o को आवेदन करने की आवश्यकता है:

यह [...] एक नया अनुमतियां मॉडल पेश करता है, जहां उपयोगकर्ता अब सीधे रनटाइम पर ऐप अनुमतियों का प्रबंधन कर सकते हैं। यह मॉडल उपयोगकर्ताओं को ऐप डेवलपर के लिए इंस्टॉलेशन और ऑटो-अपडेट प्रक्रियाओं को सुव्यवस्थित करते हुए दृश्यता में सुधार और अनुमतियों पर नियंत्रण देता है। उपयोगकर्ता इंस्टॉल किए गए ऐप्स के लिए व्यक्तिगत रूप से अनुमति दे सकते हैं या रद्द कर सकते हैं।

हालांकि, परिवर्तन प्रभावित INTERNETया ACCESS_NETWORK_STATEअनुमतियों को प्रभावित नहीं करते हैं, जिन्हें "सामान्य" अनुमतियाँ माना जाता है। उपयोगकर्ता को इन अनुमति को स्पष्ट रूप से देने की आवश्यकता नहीं है।

देखें व्यवहार परिवर्तन विवरण जानकारी के लिए पेज और सुनिश्चित करें कि अपने अनुप्रयोग भी नए सिस्टम पर सही ढंग से व्यवहार करेंगे। यह विशेष रूप से महत्वपूर्ण है जब आपकी परियोजना targetSdkकम से कम 23तब सेट हो जाती है जब आपको नए अनुमतियों के मॉडल ( विस्तृत प्रलेखन ) का समर्थन करना चाहिए । यदि आप तैयार नहीं हैं, तो सुनिश्चित करें कि आप इसे अधिक से अधिक रखें क्योंकि यह सुनिश्चित करता है कि नया एंड्रॉइड आपके एप्लिकेशन इंस्टॉल होने पर पुराने अनुमति प्रणाली का उपयोग करेगा।targetSdk22


इसका साफ मतलब है कि उसे नेटवर्किंग करने की अनुमति नहीं है। यह या तो मैनिफेस्ट में अनुरोध नहीं किया गया है या मंच द्वारा प्रदान नहीं किया गया है (जो रूट किए गए उपकरणों पर यानी किया जा सकता है)।
मार्सिन ऑर्लोव्स्की

2
इस उत्तर को किसी और से डाउनवोट को पूर्ववत करने के लिए तैयार किया। पहले तो मैंने सोचा था कि आप वास्तव में पूरे प्रश्न को नहीं पढ़ते हैं और सिर्फ तेज़ होना चाहते हैं (वैसे, आपका जवाब वास्तव में पहले; संक्षेप में छोटा था ;-)), लेकिन मुझे लगता है कि उपयोगकर्ताओं के बारे में टिप्पणी (रूट किए गए उपकरणों पर) आपके अनुमति अनुरोधों को विफल करने में सक्षम होना एक अच्छा था।
baske

Mmmm तो अगर यह रूट किए गए उपयोगकर्ता से है जो मैं 2 प्रश्न पूछ रहा हूं, तो मैं कैसे अनुमति दे सकता हूं? 2) मैं इसे फिर से कैसे पूछ सकता हूं? (फिर भी, मुझे नहीं पता कि हम इस तरह की समस्या के बारे में बात कर रहे हैं)
StErMi

आप इसे फिर से नहीं पूछ सकते, क्योंकि यह अनुमति रनटाइम पर नहीं दी गई है। संभव समाधान के लिए संपादित उत्तर देखें
मार्सिन ऑर्लोव्स्की

1
यहाँ भी: मैं डाउनग्रेड करने वाला था, लेकिन एवेज़र का दूसरा भाग ऐसा लगता है कि पढ़ने लायक है :) आपको उत्तरों की पहली पंक्तियों को हटा देना चाहिए क्योंकि StErMi ने स्पष्ट रूप से दिखाया कि उसने इंटरनेट की अनुमति दी थी।
थियरी

43

सुनिश्चित करें कि आप जिस जगह को जोड़ रहे हैं

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

सही है।

आपको इसे AndroidManifest.xml में लिखना चाहिए:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.project"> 
<uses-permission android:name="android.permission.INTERNET"/>

मेरी गलतियाँ मत करो :)


33

एंड्रॉइड स्टूडियो 1.3b1 (अन्य संस्करणों के बारे में निश्चित नहीं) ने मेरे इंटरनेट की अनुमति को स्वत: प्राप्त कर लिया ANDROID.PERMISSION.INTERNET। इसे बदलकर android.permission.INTERNETमुद्दा तय किया।


यह अब एंड्रॉइड स्टूडियो 1.4 आरसी 1 (वर्तमान में कैनरी चैनल) में तय किया जाना चाहिए।
टॉम

30

प्रकट करने के लिए लाइन फ़ाइल जोड़ें:

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

इसने मेरे लिए इसे ठीक कर दिया।


20

मैंने इस त्रुटि को हल किया, मैं गलती से एप्लिकेशन टैग के अंदर अनुमतियां जोड़ रहा था। मैंने बाहर रखा और यह ठीक काम करता है। आशा है कि यह किसी के लिए मदद करता है।


16

मुझे भी यह समस्या थी। यह अजीब था कि यह मेरे लॉलीपॉप एमुलेटर पर काम करता था, लेकिन मेरे वास्तविक किटकैट डिवाइस पर नहीं।

एंड्रॉइड स्टूडियो अब आपको ऊपरी मामले की अनुमति लिखने के लिए मजबूर करेगा, और यही समस्या है।

जोड़ना

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

एप्लिकेशन टैब के ऊपर और यह काम करेगा।


यह सरल और सही उत्तर है। और शीर्ष पर एक होना चाहिए!
कोस्टानोस

13

नीचे दिए गए आवेदन टैग से पहले अपनी अनुमति लिखें।

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

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

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme">

यह वास्तव में एकमात्र ऐसी चीज थी जिसने मेरी मदद की :( बिल्कुल भी सहज नहीं है।
इवान पेरेज़

4

<application>टैग से पहले बेहतर टैग के बाहर ये अनुमति दें , मैंने इसे आज़माया और यह मेरे लिए काम करता है।

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


2

जैसे टॉम ने उल्लेख किया है। जब आप पूंजी से शुरू करते हैं Aतो स्वत: पूर्ण के रूप में इसे पूरा करेंगे।

ANDROID.PERMISSION.INTERNET

जब आप इसके साथ टाइप करना शुरू करते हैं aतो ऑटोकॉम्पल इसे पूरा करेगा

android.permission.INTERNET

दूसरा वाला सही है।


2

मैं इस समस्या के समाधान की तलाश में घंटों बिताता हूं और जवाबों में कोई भी समाधान काम नहीं करता है। तब मुझे पता चला कि मैंने गलती से बीच में स्वत: पूर्ण के दौरान एक स्थान जोड़ दिया android.permission.INTERNETऔर"


0

वैसे यह बहुत भ्रामक किस्म का बग है। इसके कई कारण हो सकते हैं:

  1. आप सही जगह अनुमतियों का उल्लेख नहीं कर रहे हैं। आवेदन के ठीक ऊपर की तरह।
  2. आप छोटे अक्षरों का उपयोग नहीं कर रहे हैं।
  3. कुछ मामलों में आपको नेटवर्क स्टेट की अनुमति भी देनी होगी।
  4. एक जो मेरा मामला था, मैनिफ़ेस्ट लाइनों में कुछ खाली लाइनें हैं। जैसे अनुमति टैग और एप्लिकेशन लाइन के बीच एक रिक्त रेखा हो सकती है। उन्हें निकालें और आप कर रहे हैं। आशा है कि यह मदद करेगा

-7

इसे अपनी मैनिफ़ेस्ट फ़ाइल में निकालें

 xmlns:tools="http://schemas.android.com/tools"

प्रश्न में प्रकट फ़ाइल (AndroidManifest.xml) में ऐसा कोई कोड नहीं है।
पंग
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.