SecurityException: İzin reddedildi (INTERNET izni eksik mi?)


95

Bu hata gerçekten çok garip ve onu nasıl yeniden üreteceğimi ve nasıl düzelteceğimi bilmiyorum çünkü çok fazla arama yaptım ama hiçbir şey işe yaramadı.

İşte yığın izleme:

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)

İşte AndroidManifest.xml dosyam

<?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>

Lütfen manifestimde doğru İNTERNET iznine sahip olup olmadığımı sorma zahmet etmeyin çünkü bu uygulama 2 yıldan beri piyasada: P

Ayrıca (Crittercism'den) tüm hataların Android 4.1.x sürümünden (JB) geldiğini fark ettim. Cihazın köklü olup olmadığını bilmiyorum (bu bilgiyi şu anda göremiyorum)


ana bilgisayar adının değişmiş olması mümkün

farklı cihaz versiyonlarını denediniz mi? veya her sürüme mi biniyorsunuz?
Pankaj Kumar

1
plz <kullanım-izni android: name = "android.permission.INTERNET" /> <kullanım-izni android: name = "android.permission.ACCESS_NETWORK_STATE" /> Dış <Uygulama> etiketi ekle Lütfen projenizi yeniden oluşturun ve çalıştırın. benim için çalıştı
Azahar

Bu arada, sipariş önemlidir, stackoverflow.com/questions/25135595/…
Nabin

@SteErMi bu sorunu çözdünüz mü, aynı durumla karşı karşıyayım
Ravind Maurya

Yanıtlar:


119

NOT: Bu cevabı Haziran 2013'te yazdım, bu yüzden bugünlerde biraz eski. Sürüm 6'dan (Marshmallow) bu yana Android platformunda pek çok şey değişti ve günümüzde tüm sorunu daha fazla / daha az eski hale getirdi. Bununla birlikte, bu yazının genel problem analizi yaklaşım örneği olarak okumaya değer olabileceğine inanıyorum.


Aldığınız istisna ( SecurityException: Permission denied (missing INTERNET permission?)), ağ oluşturma izninizin olmadığını açıkça gösterir. Bu oldukça tartışılmaz bir gerçek. Ama bu nasıl olabilir? Genellikle, ya dosyanızdaki eksik <uses-permission android:name="android.permission.INTERNET" />girişten AndroidManifest.xmlya da kurulum sırasında internet izni verildiğinden, uzun süredir devam eden, Android çerçevesinde gözden kaçan hata nedeniyle uygulamanızın başarılı bir şekilde yüklenmesine neden olur, ancak izin verilmesi beklenmez.

Manifestim doğru, peki bu nasıl olabilir?

Teorik olarak, uses-permissionManifest'te bulunması gereksinimi mükemmel bir şekilde karşılar ve geliştirici bakış açısından, ağ oluşturabilmek için yapılması gereken tek şeydir. Ayrıca, kurulum sırasında izinler kullanıcıya gösterildiğinden, uygulamanızın kullanıcının cihazına yüklemeyi bitirmesi, sizin istediğinizi vermiş olduğu anlamına gelir (aksi takdirde kurulum iptal edilir), bu nedenle kodunuz çalıştırılırsa istenen tüm izinlerin geçerli olacağı varsayılır. verilen geçerlidir. Ve bir kez verildiğinde, standart Android çerçevesi (AOSP'den) şu anda böyle bir özellik sunmadığından, kullanıcı, uygulamayı tamamen kaldırmak dışında başka bir şekilde izni iptal edemez.

Ancak, uygulamanızın köklü cihazlarda da çalışmasına aldırmazsanız işler daha karmaşık hale geliyor . Google Play'de , çalıştırma sırasında yüklü uygulamalara verilen izni kontrol etmek için kullanıcılarınızın yükleyebileceği araçlar vardır - örneğin: İzinler Reddedildi ve diğerleri. Bu aynı zamanda CyanogenMod , satıcı markası (yani LG'ler ) veya çeşitli "gizlilik yöneticileri" veya benzer araçlar içeren diğer özel ROM ile yapılabilir .

Bu nedenle, uygulama her iki şekilde de engellenirse, temelde kullanıcı tarafından kasıtlı olarak engellenir ve öyleyse, bu durumda gerçekten daha fazla kullanıcı problemidir (veya belirli seçeneklerin / araçların gerçekte ne yaptığını ve sonuçlarının ne olacağını anlamıyor) sizinkinden daha iyidir, çünkü standart SDK (ve çoğu uygulama bu SDK akılda tutularak yazılmıştır) bu şekilde davranmaz. Bu nedenle, bu sorunun "standart", köklü olmayan, stoklu (veya Samsung, HTC, Sony vb. Satıcı) ROM'larda meydana geldiğinden kesinlikle şüpheliyim.

Ben kaza yapmak istemiyorum ...

Düzgün bir şekilde uygulanan izin yönetimi ve / org engelleme, çoğu uygulamanın belirli özelliklere erişimin aynı anda hem verildiği hem de erişilemediği durumlar için hazır olmayabileceği gerçeğini ele almalıdır çünkü bu, uygulamanın manifest kullandığı durumlarda bir tür çelişkidir. yükleme sırasında erişim isteyin. Doğru yapılan erişim kontrolü, her şeyin eskisi gibi çalışmasını sağlamalı ve yine de özelliğin beklenen davranışı kapsamında teknikleri kullanarak kullanılabilirliği sınırlamalıdır. Örneğin, belirli bir izin verildiğinde (yani GPS, İnternet erişimi) bu tür bir özellik uygulama / kullanıcı perspektifinden kullanılabilir hale getirilebilir (yani, GPS'i açabilirsiniz. Veya bağlanmayı deneyebilirsiniz), değiştirilen uygulama hiçbir gerçek veri sağlamaz - Örneğin, iç mekanda olduğunuzda veya uydu "sabitlemesinin" olmadığı durumlarda olduğu gibi GPS her zaman hiçbir koordinat döndüremez. İnternet erişimi önceden olduğu gibi verilebilir, ancak veri kapsamı veya yönlendirme olmadığından başarılı bir bağlantı kuramazsınız. Bu tür senaryolar normal kullanımda da beklenmelidir, bu nedenle zaten uygulamalar tarafından ele alınmalıdır. Bu, normal günlük kullanım sırasında olabileceğinden, bu tür bir durumda herhangi bir kilitlenme, büyük olasılıkla uygulama hatalarıyla ilgili olmalıdır.

Tahmin yapmadan sorunu teşhis etmek için bu sorunun ortaya çıktığı ortam hakkında çok fazla bilgiye sahip değiliz, ancak bir tür çözüm olarak, gelecekte bu tür beklenmedik istisnaları yakalamak için setDefaultUncaughtExceptionHandler () kullanmayı düşünebilirsiniz ve başka bir deyişle, kullanıcıya hangi izne ilişkin ayrıntılı bilgileri gösterin Uygulamanızın sadece çökmek yerine ihtiyacı var. Lütfen bunu kullanmanın Crittercism, ACRA ve diğerleri gibi araçlarla büyük olasılıkla çelişeceğini unutmayın, bu nedenle bunlardan herhangi birini kullanıyorsanız dikkatli olun.

Notlar

Lütfen android.permission.INTERNET, başarılı bir şekilde ağ oluşturma girişiminde bulunmak için bildirimde bildirmeniz gerekebilecek ağla ilgili tek iznin bu olmadığını unutmayın. Having INTERNETverilen izin sadece (herhangi bir ağ veri transferini yapmak temel gereklilik temelde olan) açık ağ prizlerine uygulamaları sağlar. Ancak, ağ yığınınızın / kitaplığınızın ağlar hakkında da bilgi almak istemesi durumundaandroid.permission.ACCESS_NETWORK_STATE , Manifest'inize de ihtiyacınız olacaktır (yani HttpUrlConnection istemcisi için gereklidir ( eğitime bakın ).


Ek Sözleşme (2015-07-16)

Lütfen Android 6'nın (diğer adıyla Marshmallow), Çalışma Zamanı İzinleri adı verilen tamamen yeni bir izin yönetimi mekanizması getirdiğini unutmayın . Kullanıcıya hangi iznin verildiği konusunda daha fazla denetim sağlar (ayrıca seçici yetkiye izin verir) veya uygulamanın kaldırılması gerekmeden halihazırda verilmiş olan izinlerin iptal edilmesini sağlar:

Bu [...], kullanıcıların artık çalışma zamanında uygulama izinlerini doğrudan yönetebildiği yeni bir izin modeli sunar. Bu model, kullanıcılara gelişmiş görünürlük ve izinler üzerinde kontrol sağlarken, uygulama geliştiricileri için yükleme ve otomatik güncelleme işlemlerini kolaylaştırır. Kullanıcılar, yüklü uygulamalar için ayrı ayrı izin verebilir veya iptal edebilir.

Ancak, değişikliklerin etkilemez INTERNETveya ACCESS_NETWORK_STATE"Normal" izinleri kabul edilir izinleri. Kullanıcının bu izinleri açıkça vermesine gerek yoktur.

Ayrıntılar için davranış değişiklikleri açıklama sayfasına bakın ve uygulamanızın yeni sistemlerde de doğru şekilde çalışacağından emin olun. Projeniz targetSdken azından yeni izin modelini desteklemeniz gerektiği23 gibi ayarlandığında özellikle önemlidir ( ayrıntılı belgeler ). Hazır değilseniz , en fazla devam ettiğinizden emin olun , çünkü bu, yeni Android'in bile uygulamanız yüklendiğinde eski izin sistemini kullanmasını sağlar.targetSdk22


Bu açıkça ağ kurma izninin olmadığı anlamına gelir. Ya Manifest'te istenmiyor ya da platform tarafından verilmiyor (yani rootlu cihazlarda yapılabilir).
Marcin Orlowski

2
Başka birinin olumsuz oylarını geri almak için bu yanıta olumlu oy verdi. İlk başta gerçekten tüm soruyu okumadığınızı ve sadece hızlı olmak istediğinizi düşündüm (bu arada, cevabınız ilk başta gerçekten çok kısaydı ;-)), ama sanırım kullanıcılar hakkındaki açıklama (köklü cihazlarda) izin isteklerinizi engelleyebilmek iyi bir şeydi.
baske

Mmmm, eğer bu izinleri kaldıran köklü bir kullanıcıdan geliyorsa 2 sorum var: 1) Bu izne sahip olmadığımı nasıl bilebilirim? 2) Nasıl tekrar sorabilirim? (yine de, bu tür bir sorundan bahsediyor muyuz bilmiyorum)
StErMi

Tekrar isteyemezsiniz çünkü bu izin çalışma zamanında verilmemiştir. Olası "çözüm" için düzenlenen yanıta bakın
Marcin Orlowski

1
Aynısı: Sürüm düşürmek üzereydim ama yanıtın ikinci kısmı okumaya değer kısım gibi görünüyor :) StErMi INTERNET iznini ayarladığını açıkça gösterdiğinden cevapların ilk satırlarını kaldırmalısınız.
Thierry

44

Eklediğiniz yerin

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

doğrudur.

Bunu AndroidManifest.xml'de şu şekilde yazmalısınız:

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

Hatalarımı yapma :)


33

Android Studio 1.3b1 (diğer sürümlerden emin değilim) için internet iznimi otomatik olarak tamamladı ANDROID.PERMISSION.INTERNET. android.permission.INTERNETSorunu düzeltmek için değiştirmek .


Bu, artık Android Studio 1.4 RC 1'de (şu anda Canary kanalında) düzeltilmelidir.
Tom

31

Manifest dosyasına şu satırı ekleyin:

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

Benim için düzeltti.


20

Bu hatayı çözdüm, yanlışlıkla Uygulama etiketinin içine izinler ekliyordum. Dışarıya koydum ve iyi çalışıyor. Umarım birine yardımcı olur.


16

Benim de bu problemim vardı. Lolipop emülatörümde çalışması garipti, ancak gerçek kitkat cihazımda çalışmıyordu.

Android Studio şimdi sizi izin büyük harfini yazmaya zorlayacak ve sorun da bu.

Ekle

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

Uygulama sekmesinin üstünde ve çalışacaktır.


Bu basit ve doğru cevap. Ve en tepedeki kişi olmalı!
Kostanos

14

İzninizi aşağıda verilen uygulama etiketinin önüne yazınız.

<?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">

Aslında bana yardımcı olan tek şey buydu :( Hiç sezgisel değil.
Ivan Perez

4

Bu izni <application>etiketinden önce tercih edilen etiketin dışına koyun , denedim ve benim için çalışıyor.

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


2

Tıpkı Tom'un bahsettiği gibi. Büyük harfle başladığınızda, Aotomatik tamamlama olarak tamamlayacaktır.

ANDROID.PERMISSION.INTERNET

aİle yazmaya başladığınızda, otomatik tamamlama işlemi şu şekilde tamamlayacaktır:

android.permission.INTERNET

İkincisi, doğru olanıdır.


2

Bu soruna çözüm bulmak için saatler harcıyorum ve cevaplardaki hiçbir çözüm işe yaramadı. Sonra otomatik tamamlama sırasında android.permission.INTERNETve arasında yanlışlıkla bir boşluk eklediğimi öğrendim."


0

Bu çok kafa karıştırıcı bir tür böcek. Bunun birçok nedeni olabilir:

  1. Doğru yerde izinlerden bahsetmiyorsunuz. Uygulamanın hemen yukarısındaki gibi.
  2. Küçük harf kullanmıyorsunuz.
  3. Bazı durumlarda, Ağ durumu izni de eklemeniz gerekir.
  4. Benim durumum olan biri, açık satırlarda bazı boş satırlar var. İzin etiketi ile uygulama satırı arasında boş bir satır olabilir. Onları kaldırın ve bitirdiniz. Umarım yardımcı olur

-7

bunu manifest dosyanızdan kaldırın

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

Sorudaki manifest dosyasında (AndroidManifest.xml) böyle bir kod yok.
Pang
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.