SecurityException: Izin ditolak (izin INTERNET hilang?)

94

kesalahan ini benar-benar sangat aneh dan saya tidak tahu bagaimana mereproduksinya dan bagaimana memperbaikinya karena saya melakukan banyak pencarian tetapi tidak ada yang berguna.

Inilah stacktrace:

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)

Inilah AndroidManifest.xml saya

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

Tolong jangan repot-repot bertanya kepada saya apakah saya memiliki izin INTERNET yang benar di manifes saya karena aplikasi ini ada di pasar sejak 2 tahun: P.

Saya juga memperhatikan bahwa (dari Crittercism) semua bug berasal dari versi Android 4.1.x (JB). Saya tidak tahu apakah perangkat di-root atau apa (saya tidak dapat melihat informasi ini untuk saat ini)

StErMi
sumber
apakah mungkin nama host telah berubah (karena pesan kesalahan ini): Tidak ada alamat yang terkait dengan nama host
Opiatefuchs
apakah Anda mencoba dengan versi perangkat yang berbeda? atau mendapatkan setiap versi?
Pankaj Kumar
1
tlg tambahkan tag <using-permission android: name = "android.permission.INTERNET" /> <using-permission android: name = "android.permission.ACCESS_NETWORK_STATE" /> Luar <Application> Harap buat kembali proyek Anda dan jalankan. ini berhasil untuk saya
Azahar
Ngomong-ngomong pesanan itu penting, stackoverflow.com/questions/25135595/…
Nabin
@SteErMi sudahkah Anda menyelesaikan masalah ini, saya menghadapi situasi yang sama
Ravind Maurya

Jawaban:

119

CATATAN: Saya menulis jawaban ini pada Juni 2013, jadi agak ketinggalan zaman sekarang. Banyak hal yang berubah di platform Android sejak versi 6 (Marshmallow), membuat keseluruhan masalah menjadi lebih / kurang usang saat ini. Namun saya yakin posting ini masih bisa dibaca sebagai contoh pendekatan analisis masalah umum.


Pengecualian Anda mendapatkan ( SecurityException: Permission denied (missing INTERNET permission?)), dengan jelas menunjukkan bahwa Anda tidak diperbolehkan untuk melakukan jaringan. Itu fakta yang tak terbantahkan. Tapi bagaimana ini bisa terjadi? Biasanya itu baik karena <uses-permission android:name="android.permission.INTERNET" />entri yang hilang dalam AndroidManifest.xmlfile Anda atau, karena izin internet diberikan saat penginstalan bukan pada waktu proses, karena bug yang terlewat dalam kerangka Android yang sudah lama ada dalam kerangka kerja Android yang menyebabkan aplikasi Anda berhasil diinstal, tetapi tanpa izin yang diharapkan.

Manifes saya benar, jadi bagaimana ini bisa terjadi?

Secara teoritis, kehadiran uses-permissiondi Manifest secara sempurna memenuhi kebutuhan dan dari sudut pandang pengembang adalah semua yang perlu dilakukan untuk dapat melakukan jaringan. Selain itu, karena izin ditampilkan kepada pengguna selama penginstalan, fakta bahwa aplikasi Anda berakhir diinstal di perangkat pengguna berarti ia telah memberikan apa yang Anda minta (jika tidak penginstalan dibatalkan), jadi anggaplah bahwa jika kode Anda dijalankan maka semua izin yang diminta adalah diberikan adalah valid. Dan begitu diberikan, pengguna tidak dapat mencabut izin dengan cara lain selain mencopot pemasangan aplikasi sepenuhnya karena kerangka kerja Android standar (dari AOSP) tidak menawarkan fitur seperti itu saat ini.

Tetapi hal-hal menjadi lebih rumit jika Anda juga tidak keberatan aplikasi Anda berjalan pada perangkat yang di- root juga. Ada alat yang tersedia di Google Play yang dapat dipasang oleh pengguna Anda untuk mengontrol izin yang diberikan ke aplikasi yang dipasang pada saat berjalan - misalnya: Izin Ditolak dan lainnya. Ini juga dapat dilakukan dengan CyanogenMod , merek vendor (yaitu LG) atau ROM khusus lainnya , yang menampilkan berbagai jenis "pengelola privasi" atau alat serupa.

Jadi jika aplikasi diblokir dengan cara apa pun, itu pada dasarnya diblokir dengan sengaja oleh pengguna dan jika demikian, itu benar-benar lebih banyak masalah pengguna dalam kasus ini (atau dia tidak mengerti apa yang sebenarnya dilakukan opsi / alat tertentu dan apa konsekuensinya) daripada milik Anda, karena SDK standar (dan sebagian besar aplikasi dibuat dengan mempertimbangkan SDK tersebut) tidak berperilaku seperti itu. Jadi saya sangat meragukan masalah ini terjadi pada "standar", perangkat yang tidak di-rooting dengan stok (atau vendor seperti Samsung, HTC, Sony dll) ROM.

Saya tidak ingin jatuh ...

Manajemen izin yang diterapkan dengan benar dan pemblokiran / org harus berurusan dengan fakta bahwa sebagian besar aplikasi mungkin tidak siap untuk situasi di mana akses ke fitur tertentu diberikan dan tidak dapat diakses pada saat yang sama, karena ini adalah jenis kontradiksi di mana aplikasi menggunakan manifes untuk meminta akses pada waktu pemasangan. Kontrol akses yang dilakukan dengan benar harus membuat semua berfungsi seperti sebelumnya, dan tetap membatasi kegunaan menggunakan teknik dalam lingkup perilaku yang diharapkan dari fitur tersebut. Misalnya, ketika izin tertentu diberikan (misalnya GPS, akses Internet), fitur tersebut dapat tersedia dari aplikasi / perspektif pengguna (yaitu Anda dapat mengaktifkan GPS. Atau mencoba menghubungkan), implementasi yang diubah tidak dapat memberikan data nyata - yaitu GPS selalu tidak dapat mengembalikan koordinat, seperti saat Anda berada di dalam ruangan atau tidak memiliki satelit "fix". Akses internet dapat diberikan seperti sebelumnya, tetapi Anda tidak dapat membuat sambungan yang berhasil karena tidak ada jangkauan data atau perutean. Skenario seperti itu seharusnya diharapkan dalam penggunaan normal juga, oleh karena itu harus sudah ditangani oleh aplikasi. Karena ini hanya dapat terjadi selama penggunaan normal setiap hari, setiap kerusakan dalam situasi seperti itu kemungkinan besar terkait dengan bug aplikasi.

Kami kekurangan terlalu banyak informasi tentang lingkungan tempat masalah ini terjadi untuk mendiagnosis masalah tanpa menebak-nebak, tetapi sebagai jenis solusi, Anda dapat mempertimbangkan menggunakan setDefaultUncaughtExceptionHandler () untuk menangkap pengecualian tak terduga seperti itu di masa mendatang dan yaitu hanya menunjukkan informasi mendetail kepada pengguna izin apa kebutuhan aplikasi Anda, bukan hanya mogok. Harap dicatat bahwa menggunakan ini kemungkinan besar akan konflik dengan alat seperti Crittercism, ACRA dan lainnya, jadi berhati-hatilah jika Anda menggunakan salah satu dari ini.

Catatan

Perlu diketahui bahwa android.permission.INTERNETbukan satu-satunya izin terkait jaringan yang mungkin perlu Anda deklarasikan dalam manifes agar berhasil melakukan jaringan. Memiliki INTERNETizin yang diberikan hanya memungkinkan aplikasi untuk soket jaringan terbuka (yang pada dasarnya merupakan kebutuhan mendasar untuk melakukan transfer data jaringan). Tetapi jika jaringan / pustaka Anda ingin mendapatkan informasi tentang jaringan juga, maka Anda juga akan membutuhkannya android.permission.ACCESS_NETWORK_STATEdalam Manifes Anda (yang dibutuhkan oleh klien HttpUrlConnection ( lihat tutorial ).


Addendum (2015-07-16)

Harap dicatat bahwa Android 6 (alias Marshmallow) memperkenalkan mekanisme manajemen izin yang benar-benar baru yang disebut Izin Waktu Proses . Ini memberi pengguna lebih banyak kontrol tentang izin apa yang diberikan (juga memungkinkan pemberian selektif) atau memungkinkan seseorang mencabut izin yang sudah diberikan tanpa perlu penghapusan aplikasi:

[...] ini memperkenalkan model izin baru, di mana pengguna sekarang dapat langsung mengelola izin aplikasi pada waktu proses. Model ini memberi pengguna visibilitas dan kontrol yang lebih baik atas izin, sembari menyederhanakan proses penginstalan dan pembaruan otomatis untuk pengembang aplikasi. Pengguna dapat memberikan atau mencabut izin satu per satu untuk aplikasi yang diinstal.

Namun, perubahan tidak mempengaruhi INTERNETatau ACCESS_NETWORK_STATEizin, yang dianggap izin "Normal". Pengguna tidak perlu memberikan izin ini secara eksplisit.

Lihat halaman deskripsi perubahan perilaku untuk mengetahui detailnya dan pastikan aplikasi Anda juga akan berfungsi dengan benar di sistem yang lebih baru. Ini sangat penting ketika proyek Anda disetel targetSdkke setidaknya 23seperti itu Anda harus mendukung model izin baru ( dokumentasi terperinci ). Jika Anda tidak siap, pastikan Anda tetap targetSdkuntuk paling 22sebagai Memastikan ini bahkan Android baru akan menggunakan sistem izin tua ketika aplikasi diinstal.

Marcin Orlowski
sumber
Ini jelas berarti dia tidak diperbolehkan untuk berjejaring. Baik tidak diminta dalam Manifes atau tidak diberikan oleh platform (yang dapat dilakukan yaitu pada perangkat yang di-rooting).
Marcin Orlowski
2
Suara positif jawaban ini untuk membatalkan suara negatif dari orang lain. Pada awalnya saya berpikir bahwa Anda memang tidak membaca seluruh pertanyaan dan hanya ingin cepat (omong-omong, jawaban Anda benar-benar terlalu pendek pada awalnya ;-)), tetapi menurut saya komentar tentang pengguna (pada perangkat yang di-rooting) bisa menggagalkan permintaan izin Anda itu bagus.
berjemur
Mmmm jadi jika ini dari pengguna root yang menghapus izin, saya punya 2 pertanyaan: 1) bagaimana saya bisa tahu jika saya bukan izin itu? 2) Bagaimana saya bisa menanyakannya lagi? (masih, saya tidak tahu apakah kita sedang membicarakan masalah semacam ini)
StErMi
Anda tidak dapat memintanya lagi, karena izin ini tidak diberikan pada waktu proses. Lihat jawaban yang diedit untuk kemungkinan "solusi"
Marcin Orlowski
1
Sama di sini: saya akan menurunkan versi tetapi bagian kedua dari jawaban tampaknya menjadi bagian yang layak dibaca :) Anda harus menghapus baris pertama jawaban karena StErMi dengan jelas menunjukkan bahwa ia telah menetapkan izin INTERNET.
Thierry
43

Pastikan bahwa tempat Anda menambahkan

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

benar.

Anda harus menuliskannya seperti itu di AndroidManifest.xml:

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

Jangan membuat kesalahan saya :)

Valeria
sumber
33

Android Studio 1.3b1 (tidak yakin tentang versi lain) otomatis melengkapi izin internet saya ANDROID.PERMISSION.INTERNET. Mengubahnya untuk android.permission.INTERNETmemperbaiki masalah.

Tom
sumber
Ini sekarang harus diperbaiki di Android Studio 1.4 RC 1 (saat ini di saluran Canary).
Tom
31

Tambahkan ke file manifes baris:

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

Itu memperbaikinya untuk saya.

Dashtank
sumber
20

Saya menyelesaikan kesalahan ini, saya tidak sengaja menambahkan izin di dalam tag Aplikasi. Saya meletakkan di luar dan itu berfungsi dengan baik. Semoga bisa membantu seseorang.

Sami
sumber
16

Saya juga punya masalah ini. aneh rasanya itu berfungsi pada emulator lollipop saya, tetapi tidak pada perangkat kitkat saya yang sebenarnya.

Android Studio sekarang akan memaksa Anda untuk menulis izin huruf besar, dan itulah masalahnya.

Menambahkan

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

Di atas tab aplikasi dan itu akan berfungsi.

Boldijar Paul
sumber
Ini adalah jawaban yang sederhana dan benar. Dan harus menjadi yang teratas!
Kostanos
14

Tuliskan izin Anda sebelum tag aplikasi seperti yang diberikan di bawah ini.

<?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">
arango_86
sumber
Ini sebenarnya satu-satunya hal yang membantu saya :( Sama sekali tidak intuitif.
Ivan Perez
4

Letakkan izin ini di luar <application>tag lebih disukai sebelum tag, saya mencobanya dan itu berhasil untuk saya.

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
Tobore Igbe
sumber
2

Seperti yang disebutkan Tom. Saat Anda memulai dengan modal, Apelengkapan otomatis akan menyelesaikannya sebagai.

ANDROID.PERMISSION.INTERNET

Saat Anda mulai mengetik dengan amaka pelengkapan otomatis akan menyelesaikannya sebagai

android.permission.INTERNET

Yang kedua adalah yang benar.

Shakti
sumber
2

Saya menghabiskan waktu berjam-jam mencari solusi untuk masalah ini dan tidak ada solusi dalam jawaban yang berhasil. Kemudian saya menemukan bahwa saya tidak sengaja menambahkan spasi selama pelengkapan otomatis antara android.permission.INTERNETdan"

a0x2
sumber
0

Ini adalah jenis bug yang sangat membingungkan. Mungkin ada banyak alasan:

  1. Anda tidak menyebutkan izin di tempat yang benar. Seperti aplikasi di atas.
  2. Anda tidak menggunakan huruf kecil.
  3. Dalam beberapa kasus, Anda juga harus menambahkan izin status Jaringan.
  4. Salah satu kasus saya adalah ada beberapa baris kosong di baris manifes. Seperti mungkin ada baris kosong antara tag izin dan baris aplikasi. Hapus mereka dan Anda selesai. Semoga bisa membantu
Shami
sumber
-7

hapus ini di file manifes Anda

 xmlns:tools="http://schemas.android.com/tools"
jiangyongyuan
sumber
Tidak ada kode seperti itu dalam file manifes (AndroidManifest.xml) dalam pertanyaan.
Pang