วิธีการเพิ่มการอนุญาตชัดแจ้งในแอปพลิเคชัน


428

ฉันพยายามเข้าถึงลิงค์ HTTP ที่ใช้HttpURLConnectionใน Android เพื่อดาวน์โหลดไฟล์ แต่ฉันได้รับคำเตือนนี้ในLogCat:

WARN / System.err (223): java.net.SocketException: การอนุญาตถูกปฏิเสธ (อาจขาดการอนุญาตทางอินเทอร์เน็ต)

ฉันเพิ่มลงandroid.Manifest.permissionในแอปพลิเคชันของฉันแล้ว แต่มันยังคงให้ข้อยกเว้นเหมือนเดิม


วางเนื้อหาการอนุญาตให้แสดงรายการของคุณคุณให้สิทธิ์สำหรับอินเทอร์เน็ตหรือไม่
Anthony Forloney

ฉันเพิ่มการนำเข้า android.Manifest.permission; ไปที่แอปไม่มีอะไรอื่น ฉันต้องทำอะไรเพิ่มเพื่อให้สิทธิ์
rob

2
ดูคำตอบของฉันด้านล่างและดูว่ามีประโยชน์หรือไม่และฉันไม่รู้ว่าimport android.Manifest.permissionจะทำอย่างไรกับคุณหากคุณไม่ได้รับอนุญาต INTERNET ในไฟล์ AndroidManifest.xml
Anthony Forloney

คำตอบ:


935

สมมติว่าคุณไม่มีสิทธิ์ตั้งค่าจากLogCatคำอธิบายข้อผิดพลาดของคุณนี่คือเนื้อหาของฉันสำหรับAndroidManifest.xmlไฟล์ของฉันที่สามารถเข้าถึงอินเทอร์เน็ต:

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

นอกจากนั้นคุณควรดาวน์โหลดไฟล์จากอินเทอร์เน็ต


3
หากคุณพบคำตอบที่ตอบคำถามของคุณหรือดูเหมือนว่ามีประโยชน์มีประโยชน์ในการเลือกเป็น "ตอบ" และ / หรือโหวตขึ้นมันจะช่วยชุมชนสำหรับทุกคนที่ประสบปัญหาเดียวกัน ไม่เพียง แต่นำไปสู่คำถามนี้เท่านั้น แต่ยังมีคำถามอื่น ๆ ที่คุณถามอีกด้วย
Anthony Forloney

ฉันไม่ทราบเกี่ยวกับมันฉันจะทำอย่างแน่นอนหากสิ่งนี้จะช่วยแก้ปัญหาของฉันได้ไหม
ปล้น

รายงานกลับหากคุณพบสิ่งที่แตกต่างและฉันยินดีที่จะช่วยเหลือ
Anthony Forloney

1
ในกรณีของฉันฉันต้องตรวจสอบให้แน่ใจว่ามันเป็นบรรทัดแรกมากหลังจากแถลงการณ์ .. ที่ใดก็ได้ด้านล่างนั้นและมันจะไม่ทำงาน v2.2, api ระดับ 8, htc g1
slf

1
@dialex AFAIK ไม่มีองค์ประกอบลูกของuses-permissionภายในแท็กเท่านั้นapplication manifest
Anthony Forloney

73

ชื่ออนุญาตคือ CASE-SENSITIVE

ในกรณีที่ใครบางคนจะต่อสู้กับปัญหาเดียวกันมันเป็นกรณีที่อ่อนไหวดังนั้นกรณีผิดหมายถึงใบสมัครของคุณจะไม่ได้รับอนุญาต

ไม่ถูกต้อง

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

แก้ไข

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

ปัญหานี้อาจเกิดขึ้นเช่น ในการเติมข้อความอัตโนมัติใน IDE


1
ขอบคุณ! ฉันเสียทั้งวันสงสัยว่าทำไมแอปของฉันไม่ทำงาน ฉันใหม่สำหรับ android studio และปัญหานี้ไม่ได้เกิดขึ้นใน Eclipse ก่อน :)
InspiredCoder

1
และฉันก็ต้องเสียเวลาทั้งวันหาว่าอะไรคือความแตกต่างระหว่างพวกเขาจริง ๆ OMG ทุนและเล็ก ANDROID.PERMISSIONและandroid.permission;): p
fWd82

เอกสารประกอบ: developer.android.com/training/basics/network-ops/…
quant

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

หากคุณกำลังใช้ปลั๊กอิน Eclipse ADT สำหรับการพัฒนาของคุณให้เปิดAndroidManifest.xmlในตัวแก้ไขรายการ Android (ควรเป็นการกระทำเริ่มต้นสำหรับการเปิดAndroidManifest.xmlจากรายการไฟล์โครงการ)

หลังจากนั้นเลือกPermissionsแท็บที่ด้านล่างของตัวแก้ไข ( Manifest - Application - Permissions - Instrumentation - AndroidManifest.xml) จากนั้นคลิกAdd...a Uses Permissionและเลือกการอนุญาตที่ต้องการจากดรอปดาวน์ด้านขวาหรือเพียงคัดลอกวางในสิ่งที่จำเป็น (เช่นandroid.permission.INTERNETสิทธิ์ที่คุณต้องการ)


23

คัดลอกบรรทัดต่อไปนี้ไปยังไฟล์รายการแอปพลิเคชันของคุณและวางไว้หน้า<application> แท็ก

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

การวางสิทธิ์ใต้<application/>แท็กจะใช้งานได้ แต่จะเตือนให้คุณทราบ ดังนั้นควรระมัดระวังก่อนวาง<application/>แท็ก


เมื่อเขียนความคิดเห็นนี้มันจะอยู่นอกองค์ประกอบของแอปพลิเคชัน แต่อยู่ในรายการ เช่น: <application> ... </application> <การใช้ - สิทธิ์ android: name = "android.permission.INTERNET" /> </manifest>
Steve Swinsburg

12

เมื่อใช้ eclipse ให้ทำตามขั้นตอนเหล่านี้

1) ดับเบิลคลิกที่รายการเพื่อแสดงบนตัวแก้ไข
2) คลิกที่แท็บการอนุญาตด้านล่างตัวแก้ไขรายการ
3) คลิกที่ปุ่มเพิ่ม
4) ในกล่องโต้ตอบที่ปรากฏขึ้นคลิกใช้สิทธิ์ (โดยปกติรายการสุดท้ายในรายการ)
5) สังเกตเห็นมุมมองที่ปรากฏขึ้นบนด้าน rigth เลือก "android.permission.INTERNET"
6) จากนั้นชุดของ Ok และในที่สุดก็ประหยัด

หวังว่านี่จะช่วยได้


7

ฉันมาสาย แต่ฉันต้องการตอบคำถามให้เสร็จ

การอนุญาตถูกเพิ่มในmanifest.xmlไลค์

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

นี่เพียงพอสำหรับการอนุญาตมาตรฐานที่ไม่มีการเตือนให้ผู้ใช้ทราบ อย่างไรก็ตามมันไม่เพียงพอที่จะเพิ่มการอนุญาตเท่านั้นที่จะเปิดเผยถ้ามันเป็นอันตรายที่ได้รับอนุญาต ดูหุ่นยนต์ doc สิทธิ์การใช้พื้นที่เก็บข้อมูลของกล้อง

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

คุณจะต้องขออนุญาตจากผู้ใช้ ฉันใช้ห้องสมุดRxPermissionซึ่งเป็นห้องสมุดที่ใช้กันอย่างแพร่หลายเพื่อขออนุญาต เพราะมันเป็นรหัสยาวที่เราต้องเขียนเพื่อขออนุญาต

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

เพิ่มไลบรารีนี้ลงในแอพของคุณ

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

ซึ่งอาจน่าสนใจในบริบทของการเพิ่มการอนุญาตอินเทอร์เน็ตในแอปพลิเคชันของคุณ:

Google ยังให้สิทธิ์การเข้าถึงอินเทอร์เน็ตของแต่ละแอปด้วยการลบการอนุญาตการเข้าถึงอินเทอร์เน็ตอย่างมีประสิทธิภาพ โอ้แน่ใจว่านักพัฒนา Android ยังคงต้องประกาศว่าพวกเขาต้องการการเข้าถึงอินเทอร์เน็ตเมื่อรวมแอพเข้าด้วยกัน แต่ผู้ใช้จะไม่เห็นสิทธิ์การเข้าถึงอินเทอร์เน็ตอีกต่อไปเมื่อทำการติดตั้งแอพและแอพปัจจุบันที่ไม่มีการเชื่อมต่ออินเทอร์เน็ตสามารถเข้าใช้อินเทอร์เน็ตด้วยการอัพเดทอัตโนมัติโดยไม่ต้องแจ้งให้คุณทราบ

ที่มา: http://www.howtogeek.com/190863/androids-app-permissions-were-just-simplified-now-theyre-much-less-secure/

บรรทัดล่างคือคุณยังคงต้องเพิ่มการอนุญาตอินเทอร์เน็ตในไฟล์รายการ แต่แอปพลิเคชันจะได้รับการปรับปรุงบนอุปกรณ์ของผู้ใช้โดยไม่ต้องขออนุญาตใหม่


-1

คุณต้องใช้ทั้งเครือข่ายและสถานะเครือข่ายการเข้าถึงในไฟล์ Manifest ในขณะที่คุณพยายามโหลดหรือเข้าถึงอินเทอร์เน็ตผ่านทางโปรแกรมจำลอง android

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

หากคุณให้สิทธิ์. NET เพียงอย่างเดียวจะไม่สามารถเข้าถึงอินเทอร์เน็ตได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.