Bagaimana cara menambahkan izin nyata ke suatu aplikasi?

428

Saya mencoba mengakses tautan HTTP menggunakan HttpURLConnectionAndroid untuk mengunduh file, tetapi saya mendapatkan peringatan ini di LogCat:

WARN / System.err (223): java.net.SocketException: Izin ditolak (mungkin hilang izin INTERNET)

Saya telah menambahkan android.Manifest.permissionke aplikasi saya tetapi masih memberikan pengecualian yang sama.

rampok
sumber
Rekatkan konten izin-manifes Anda, apakah Anda memberikan izin untuk INTERNET?
Anthony Forloney
saya menambahkan impor android.Manifest.permission; ke aplikasi, tidak ada yang lain. Apa lagi yang perlu saya tambahkan untuk memberikan izin
merampok
2
Lihatlah jawaban saya di bawah ini dan lihat apakah itu membantu, dan saya tidak tahu apa yang import android.Manifest.permissionakan dilakukan untuk Anda jika Anda tidak memiliki izin INTERNET dalam file AndroidManifest.xml
Anthony Forloney

Jawaban:

935

Dengan asumsi Anda tidak memiliki izin yang ditetapkan dari LogCatdeskripsi kesalahan Anda , berikut adalah konten saya untuk AndroidManifest.xmlfile saya yang memiliki akses ke internet:

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

Selain itu, Anda juga boleh mengunduh file dari internet.

Anthony Forloney
sumber
3
Jika Anda menemukan jawaban yang memecahkan pertanyaan Anda atau tampaknya membantu, berguna untuk dipilih sebagai "dijawab" dan / atau ditingkatkan, itu membantu komunitas bagi siapa saja yang mengalami masalah yang sama. Thats tidak hanya diarahkan ke pertanyaan ini, tetapi pertanyaan lain yang telah Anda tanyakan juga
Anthony Forloney
saya tidak tahu tentang itu, saya akan melakukan itu pasti jika ini akan menyelesaikan masalah saya
merampok
melaporkan kembali jika Anda menemukan sesuatu yang berbeda dan saya akan dengan senang hati membantu.
Anthony Forloney
1
Dalam kasus saya, saya harus memastikan itu adalah baris SANGAT PERTAMA setelah pernyataan manifes .. di mana saja di bawah itu dan itu tidak akan berfungsi. v2.2, api level 8, htc g1
slf
1
@dialex AFAIK, tidak ada elemen turunan uses-permissiondi dalam applicationtag, hanya manifest.
Anthony Forloney
73

Nama izin adalah KASUS-SENSITIF

Jika seseorang akan berjuang dengan masalah yang sama, itu adalah pernyataan case sensitive , jadi kasus yang salah berarti aplikasi Anda tidak akan mendapatkan izin.

SALAH

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

BENAR

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

Masalah ini dapat terjadi yaitu. pada autocomplete di IDE

Marek Sebera
sumber
1
Terima kasih! Saya menghabiskan seluruh hari saya bertanya-tanya mengapa aplikasi saya tidak berfungsi. Saya baru mengenal android studio dan masalah ini tidak terjadi di Eclipse sebelumnya :)
InspiredCoder
1
Dan saya menyia-nyiakan seluruh hari saya mencari tahu apa sebenarnya perbedaan di antara mereka, OMG Modal dan Kecil ANDROID.PERMISSION dan android.permission;): p
fWd82
40
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.photoeffect"
android:versionCode="1"
android:versionName="1.0" >

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

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="com.example.towntour.permission.MAPS_RECEIVE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@android:style/Theme.Black.NoTitleBar" >
    <activity
        android:name="com.photoeffect.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>
Teraiya Mayur
sumber
34

Jika Anda menggunakan plugin Eclipse ADT untuk pengembangan Anda, buka AndroidManifest.xmldi Android Manifest Editor (harus menjadi tindakan default untuk membuka AndroidManifest.xmldari daftar file proyek).

Setelah itu, pilih Permissionstab di sepanjang bagian bawah editor ( Manifest - Application - Permissions - Instrumentation - AndroidManifest.xml), lalu klik Add...a Uses Permissiondan pilih izin yang diinginkan dari dropdown di sebelah kanan, atau cukup salin-tempel di yang diperlukan (seperti android.permission.INTERNETizin yang Anda butuhkan).

Chris
sumber
23

Salin baris berikut ke file manifes aplikasi Anda dan rekatkan sebelum <application> tag.

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

Menempatkan izin di bawah <application/>tag akan berhasil, tetapi akan memberi Anda peringatan. Jadi berhati-hatilah untuk menempatkannya sebelum <application/>deklarasi tag.

nitesh
sumber
Saat menulis komentar ini, ia keluar dari elemen aplikasi tetapi dalam manifes. mis: <aplikasi> ... </aplikasi> <menggunakan-izin android: name = "android.permission.INTERNET" /> </manifest>
Steve Swinsburg
12

Saat menggunakan gerhana, Ikuti langkah-langkah ini

1) Klik dua kali pada manifes untuk menampilkannya di editor
2) Klik pada tab izin di bawah manifes editor
3) Klik pada tombol Tambah
4) pada dialog yang muncul Klik menggunakan izin. (Biasanya item terakhir dalam daftar)
5) Perhatikan tampilan yang muncul di sisi rigth Pilih "android.permission.INTERNET"
6) Kemudian serangkaian Ok dan akhirnya simpan.

Semoga ini membantu

Mathayo
sumber
7

Saya terlambat tetapi saya ingin menyelesaikan jawabannya.

Izin ditambahkan dalam manifest.xmllike

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

Ini cukup untuk izin standar di mana tidak ada izin yang diminta kepada pengguna. Namun, tidak cukup menambahkan izin hanya untuk mewujud jika izin tersebut berbahaya. Lihat dokumen android . Seperti Kamera, izin Penyimpanan.

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

Anda harus meminta izin dari pengguna . Saya menggunakan perpustakaan RxPermission yang banyak digunakan perpustakaan untuk meminta izin. Karena itu adalah kode panjang yang harus kami tulis untuk meminta izin.

RxPermissions rxPermissions = new RxPermissions(this); // where this is an Activity instance // Must be done during an initialization phase like onCreate
rxPermissions
    .request(Manifest.permission.CAMERA)
    .subscribe(granted -> {
        if (granted) { // Always true pre-M
           // I can control the camera now
        } else {
           // Oups permission denied
        }
    });

Tambahkan perpustakaan ini ke aplikasi Anda

allprojects {
    repositories {
        ...
        maven { url 'https://jitpack.io' }
    }
}

dependencies {
    implementation 'com.github.tbruyelle:rxpermissions:0.10.1'
    implementation 'com.jakewharton.rxbinding2:rxbinding:2.1.1'
}
Khemraj
sumber
4

Itu mungkin juga menarik dalam konteks menambahkan izin INTERNET ke aplikasi Anda:

Google juga telah memberi setiap akses aplikasi Internet, secara efektif menghapus izin akses Internet. Oh, tentu saja, pengembang Android masih harus menyatakan bahwa mereka menginginkan akses Internet saat menyusun aplikasi. Tetapi pengguna tidak lagi dapat melihat izin akses Internet ketika memasang aplikasi dan aplikasi saat ini yang tidak memiliki akses Internet sekarang dapat memperoleh akses Internet dengan pembaruan otomatis tanpa diminta.

Sumber: http://www.howtogeek.com/190863/androids-app-permissions-were-just-simplified-now-theyre-much-less-secure/

Intinya adalah bahwa Anda masih harus menambahkan izin INTERNET dalam file manifes tetapi aplikasi akan diperbarui pada perangkat pengguna tanpa meminta izin baru kepada mereka.

lenrok258
sumber
-1

Anda harus menggunakan Status Jaringan dan Jaringan Akses dalam file manifes saat Anda mencoba memuat atau mengakses internet melalui emulator android.

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

Jika Anda hanya memberikan izin .INTERNET, itu tidak akan mengakses internet.

zemunkh
sumber