Jak dodać zezwolenie manifestu do aplikacji?

428

Próbuję uzyskać dostęp do łącza HTTP za pomocą HttpURLConnectionAndroida, aby pobrać plik, ale otrzymuję to ostrzeżenie w LogCat:

WARN / System.err (223): java.net.SocketException: Odmowa zezwolenia (być może brakuje uprawnienia do INTERNETU)

Dodałem android.Manifest.permissiondo mojej aplikacji, ale nadal daje ten sam wyjątek.

obrabować
źródło
Wklej treść zezwolenia manifestu, czy udzieliłeś uprawnień dla INTERNETU?
Anthony Forloney
dodałem import android.Manifest.permission; do aplikacji, nic więcej. Co jeszcze muszę dodać do przyznania uprawnień
rob
2
Spójrz na moją odpowiedź poniżej i sprawdź, czy to pomoże, i nie mam pojęcia, co import android.Manifest.permissionzrobi dla Ciebie, jeśli nie masz uprawnień INTERNET w pliku AndroidManifest.xml
Anthony Forloney

Odpowiedzi:

935

Zakładając, że nie masz uprawnień ustawionych w LogCatopisie błędu, oto moja zawartość mojego AndroidManifest.xmlpliku, który ma dostęp do Internetu:

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

Poza tym pobieranie pliku z Internetu powinno być w porządku.

Anthony Forloney
źródło
3
Jeśli znajdziesz odpowiedzi, które rozwiązują twoje pytanie lub wydają się pomocne, warto wybrać opcję „odpowiedz” i / lub głosować, pomaga to społeczności dla każdego, kto napotyka te same problemy. To nie tylko skierowało na to pytanie, ale także inne pytania, które zadałeś
Anthony Forloney
nie wiedziałem o tym, zrobię to na pewno, jeśli to rozwiąże mój problem
obrabować
zgłoś się, jeśli napotkasz coś innego, a ja z przyjemnością pomogę.
Anthony Forloney
1
W moim przypadku musiałem się upewnić, że jest to wiersz BARDZO PIERWSZY po wyrażeniu manifestu .. gdziekolwiek poniżej tego i nie zadziała. v2.2, api poziom 8, htc g1
slf
1
@dialex AFAIK, uses-permissionwewnątrz applicationtagu nie ma elementu potomnego , tylko manifest.
Anthony Forloney
73

Nazwa pozwolenia to CASE-SENSITIVE

W przypadku, gdy ktoś będzie miał problem z tym samym problemem, jest to rozróżnianie wielkości liter , więc zła wielkość liter oznacza, że ​​twoja aplikacja nie otrzyma pozwolenia.

ŹLE

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

POPRAWNY

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

Ten problem może się zdarzyć, tj. na autouzupełnianiu w IDE

Marek Sebera
źródło
1
Dziękuję Ci! Zmarnowałem cały dzień, zastanawiając się, dlaczego moja aplikacja nie działa. Jestem nowy w Android Studio i ten problem nie występował wcześniej w Eclipse :)
InspiredCoder
1
I zmarnowany cały mój dzień dowiedzieć się, co tak naprawdę różnica między nimi, OMG jego Capital i Małe ANDROID.PERMISSION i 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
źródło
34

Jeśli używasz wtyczki Eclipse ADT do programowania, otwórz AndroidManifest.xmlw Edytorze manifestu Androida (powinna to być domyślna akcja otwierania AndroidManifest.xmlz listy plików projektu).

Następnie wybierz Permissionszakładkę u dołu edytora ( Manifest - Application - Permissions - Instrumentation - AndroidManifest.xml), a następnie kliknij Add...a Uses Permissioni wybierz żądane uprawnienie z menu po prawej stronie lub po prostu skopiuj i wklej niezbędne (np. android.permission.INTERNETWymagane pozwolenie).

Chris
źródło
23

Skopiuj następujący wiersz do pliku manifestu aplikacji i wklej przed <application> znacznikiem.

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

Umieszczenie uprawnienia poniżej <application/>tagu będzie działać, ale wyświetli ostrzeżenie. Dlatego staraj się umieścić go przed <application/>deklaracją tagu.

nitesh
źródło
W momencie pisania tego komentarza wykracza poza element aplikacji, ale znajduje się w manifeście. np .: <application> ... </application> <uses-permission android: name = "android.permission.INTERNET" /> </manifest>
Steve Swinsburg
12

Korzystając z Eclipse, wykonaj następujące kroki

1) Kliknij dwukrotnie manifest, aby pokazać go w edytorze
2) Kliknij kartę uprawnień poniżej edytora manifestu
3) Kliknij przycisk Dodaj
4) w wyświetlonym oknie dialogowym Kliknij używa uprawnień. (Zwykle ostatni element na liście)
5) Zwróć uwagę na widok, który pojawi się po prawej stronie Wybierz „android.permission.INTERNET”
6) Następnie serię OK i na koniec zapisz.

Mam nadzieję że to pomoże

Mathayo
źródło
7

Jestem spóźniony, ale chcę uzupełnić odpowiedź.

Pozwolenie jest dodawane w manifest.xmlpodobny sposób

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

To wystarcza w przypadku standardowych uprawnień, w przypadku których użytkownik nie jest proszony o pozwolenie. Nie wystarczy jednak dodać uprawnienia tylko w celu zamanifestowania, jeśli jest to uprawnienie niebezpieczne. Zobacz android doc . Podobnie jak aparat, uprawnienia do przechowywania.

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

Musisz poprosić użytkownika o pozwolenie . Korzystam z biblioteki RxPermission, która jest powszechnie używaną biblioteką do proszenia o pozwolenie. Ponieważ jest to długi kod, który musimy napisać, aby poprosić o pozwolenie.

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

Dodaj tę bibliotekę do swojej aplikacji

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
źródło
4

Może to być również interesujące w kontekście dodawania uprawnień INTERNET do twojej aplikacji:

Google przyznał również każdej aplikacji dostęp do Internetu, skutecznie usuwając pozwolenie na dostęp do Internetu. Oczywiście, programiści Androida nadal muszą deklarować, że chcą uzyskać dostęp do Internetu podczas tworzenia aplikacji. Ale użytkownicy nie widzą już uprawnień dostępu do Internetu podczas instalowania aplikacji, a bieżące aplikacje, które nie mają dostępu do Internetu, mogą teraz uzyskać dostęp do Internetu dzięki automatycznej aktualizacji bez monitowania użytkownika.

Źródło: http://www.howtogeek.com/190863/androids-app-permissions-were-just-simplified-now-theyre-much-less-secure/

Najważniejsze jest to, że nadal musisz dodać uprawnienie do INTERNETU w pliku manifestu, ale aplikacja zostanie zaktualizowana na urządzeniach użytkowników bez pytania o nowe uprawnienia.

lenrok258
źródło
-1

Musisz użyć zarówno stanu sieci, jak i dostępu do stanu sieci w pliku manifestu, gdy próbujesz załadować lub uzyskać dostęp do Internetu za pomocą emulatora Androida.

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

Jeśli udzielasz tylko pozwolenia .INTERNET, nie uzyska on dostępu do Internetu.

zemunkh
źródło