Bir uygulamaya bildirim izni nasıl eklenir?


428

HttpURLConnectionBir dosyayı indirmek için Android'de kullanarak HTTP bağlantısına erişmeye çalışıyorum , ancak bu uyarıyı alıyorum LogCat:

WARN / System.err (223): java.net.SocketException: İzin reddedildi (belki İNTERNET izni eksik)

android.Manifest.permissionUygulamama ekledim ama yine de aynı istisnayı veriyor.


Manifest içeriklerinizi yapıştırın, İNTERNET için izin verdiniz mi?
Anthony Forloney

i ithalat android.Manifest.permission ekledi; app, başka bir şey. İzin vermek için başka nelere ihtiyacım var
soymak

2
Aşağıdaki import android.Manifest.permission
yanıtıma

Yanıtlar:


935

LogCatHata açıklamanızdan ayarlanmış izinlere sahip olmadığınızı varsayarsak AndroidManifest.xml, Internet'e erişimi olan dosyam için içeriğim:

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

Bunun dışında, internetten bir dosya indirmek için iyi olmalısınız.


3
Sorunuzu çözen veya yararlı görünen yanıtlar bulursanız, "yanıtlandı" ve / veya oy kullandırarak seçmeniz yararlı olursa, aynı sorunlarla karşılaşan herkes için topluluğa yardımcı olur. Bu sadece bu soruya değil, aynı zamanda sorduğunuz diğer sorulara da
Anthony Forloney

Ben bunu bilmiyordum, bu benim sorunum çözecek kesin olarak yapacağım
soymak

Farklı bir şeyle karşılaşırsanız rapor edin ve size yardımcı olmaktan mutluluk duyarım.
Anthony Forloney

1
Benim durumumda, manifest deyiminden sonra ÇOK İLK satır olduğundan emin olmak zorunda kaldım .. bunun altında herhangi bir yerde ve işe yaramaz. v2.2, api seviye 8, htc g1
slf

1
@dialex AFAIK, etiketin uses-permissioniçinde alt öğe yok application, sadece manifest.
Anthony Forloney

73

İzin adı CASE-SENSITIVE

Birinin aynı sorunla mücadele etmesi durumunda , büyük / küçük harfe duyarlı bir ifadedir, bu yüzden yanlış durum başvurunuzun izin alamayacağı anlamına gelir.

YANLIŞ

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

DOĞRU

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

Bu sorun olabilir. IDE'de otomatik tamamlamada


1
Teşekkür ederim! Uygulamamın neden çalışmadığını merak ederek tüm günümü boşa harcadım. Ben android stüdyosunda yeniyim ve bu sorun daha önce Eclipse'de ortaya çıkmadı :)
InspiredCoder

1
Ve aslında, OMG onun aralarındaki fark ne endam benim bütün gün boşa Sermaye ve Küçük ANDROID.PERMISSION ve android.permissionp:);
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>

34

Geliştirmeniz için Eclipse ADT eklentisini kullanıyorsanız, AndroidManifest.xmlAndroid Manifest Editor'da açın ( AndroidManifest.xmlproje dosyaları listesinden açmak için varsayılan eylem olmalıdır ).

Sonrasında seçmek Permissionseditör (altı boyunca sekmeyi Manifest - Application - Permissions - Instrumentation - AndroidManifest.xml), ardından Add...bir Uses Permissionve sağdaki açılır menüden istenen izni seçin veya (örneğin gerekli birinde kopyalayıp yapıştırın android.permission.INTERNETgerekli izni).


23

Aşağıdaki satırı uygulama bildirim dosyanıza kopyalayın ve <application> etiketin önüne yapıştırın .

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

<application/>Etiketin altına izin verilmesi işe yarayacaktır, ancak size uyarı verecektir. Bu yüzden <application/>etiket bildiriminden önce yerleştirmeye dikkat edin .


Bu yorumu yazarken , uygulama öğesinin dışına , ancak bildirimin içine gider . ör: <uygulama> ... </application> <kullanımları izin android: name = "android.permission.INTERNET" /> </manifest>
Steve Swinsburg

12

Tutulmayı kullanırken, şu adımları izleyin

1) Manifest'i düzenleyicide göstermek için çift tıklayın
2) Manifest düzenleyicisinin altındaki izinler sekmesini
tıklayın 3)
Görünen iletişim kutusundaki Ekle düğmesini 4) tıklayın İzni kullanır seçeneğini tıklayın. (Genellikle listedeki son öğe)
5) Rigth tarafında görünen görünüme dikkat edin "android.permission.INTERNET" seçin
6) Sonra Tamam bir dizi ve nihayet kaydedin.

Bu yardımcı olur umarım


7

Geç kaldım ama cevabı tamamlamak istiyorum.

manifest.xmlBenzeri bir izin eklendi

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

Bu, kullanıcıya izin istenmediği standart izinler için yeterlidir . Ancak, yalnızca tehlikeli bir izinse tezahür ettirmek için izin eklemek yeterli değildir. Bkz. Android doc . Kamera, Depolama izinleri gibi.

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

Kullanıcıdan izin istemeniz gerekecektir . İzin istemek için yaygın olarak kullanılan kitaplık olan RxPermission kitaplığını kullanıyorum . Çünkü izin istemek için yazmamız gereken uzun kod.

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
        }
    });

Bu kütüphaneyi uygulamanıza ekleyin

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

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

4

Bu, uygulamanıza İNTERNET izni ekleme bağlamında da ilginç olabilir:

Google ayrıca her bir uygulamaya İnternet erişimi sağlayarak İnternet erişim iznini etkili bir şekilde kaldırmıştır. Elbette, Android geliştiricileri hala uygulamayı bir araya getirirken İnternet erişimi istediklerini beyan etmek zorundalar. Ancak kullanıcılar bir uygulama yüklerken artık İnternet erişimi iznini göremiyor ve İnternet erişimi olmayan mevcut uygulamalar artık sizden sormadan otomatik güncelleme ile İnternet erişimi kazanabiliyor.

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

Alt satırda, manifest dosyasına hala İNTERNET izni eklemeniz gerekiyor, ancak uygulama, kullanıcının cihazlarında yeni izin istemeden güncellenecek.


-1

Android öykünücüsü aracılığıyla internete yüklemeye veya internete erişmeye çalışırken manifest dosyasında hem Ağ hem de Erişim Ağ Durumu kullanmanız gerekir.

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

Yalnızca .INTERNET izni veriyorsanız, internete erişemez.

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.