ฉันต้องได้รับอนุญาตอะไรบ้างในการเข้าถึงอินเทอร์เน็ตจากแอปพลิเคชัน Android


596

ฉันได้รับข้อยกเว้นต่อไปนี้ในการเรียกใช้แอพของฉัน:

java.net.SocketException: Permission denied (maybe missing INTERNET permission)

ฉันจะแก้ไขปัญหาการอนุญาตที่ขาดหายไปได้อย่างไร

คำตอบ:


1245

เพิ่มสิทธิ์INTERNETในไฟล์ Manifest ของคุณ

คุณต้องเพิ่มบรรทัดนี้:

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

นอกแท็กแอปพลิเคชันใน AndroidManifest.xml ของคุณ


43
แท็กนี้ควรอยู่ก่อนแท็ก aplication ถ้าคุณใส่ถ้าหลังจาก aplication TAG มันจะสร้างคำเตือน
Marek

2
รีสตาร์ทเครื่องจำลอง (จำเป็นสำหรับฉันก่อนที่สิ่งนี้จะมีผล)
jcalfee314

ฉันมีปัญหา ฉันไม่ต้องการเชื่อมต่ออินเทอร์เน็ตสำหรับ apk ของฉัน ไม่มีสิทธิ์เพิ่มลงในรายการ แต่ถ้าฉันพยายามติดตั้ง apk การติดตั้งจะแจ้งให้ฉันทราบว่า apk นั้นต้องมีการเข้าถึงอินเทอร์เน็ตเต็มรูปแบบ วิธีแก้ปัญหานี้ ไม่มีการเพิ่มสิทธิ์ให้กับรายการ apk ของฉันไม่จำเป็นต้องเชื่อมต่ออินเทอร์เน็ตเต็มรูปแบบ - ฉันต้องการปิดการใช้งานการอนุญาตนี้
Altivo

1
@Altivo ดูรายการที่ผสานของคุณใน ../app/build/intermediates/manifests/full/debug/AndroidManifest.xml ที่นี่คุณจะพบการอนุญาตทั้งหมดที่แอพของคุณใช้ สิ่งนี้เกิดขึ้นจากการรวมรายการแอปของคุณเข้ากับรายการห้องสมุดที่ใช้แล้ว คุณต้องใช้ห้องสมุดบริการ google play เป็นส่วนใหญ่ซึ่งมีสิทธิ์อินเทอร์เน็ตและ ACCESS_NETWORK_STATE
ซิด

116

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

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

1
มีการอ้างอิงไปยังเอกสารของ Google ที่มันบอกว่าอะไร?
farindk

@farindk ส่วนโน้ตแรกที่นี่: support.google.com/googleplay/answer/6014972?hl=th
Finley Smith

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

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


76

เพียงแค่ใส่เหนือเส้นเหมือนด้านล่าง

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.avocats.activeavocats"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
    android:minSdkVersion="9"
    android:targetSdkVersion="16" />

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

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >


    <activity
        android:name="com.example.exp.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>


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

คุณรู้จักการอนุญาตอื่น ๆ ที่อาจจำเป็นต้องมีเพื่อการอนุญาต NTLM / Windows Authentication หรือไม่ โดยเฉพาะอย่างยิ่งในสภาพแวดล้อม XenMobile ... เพียงปาลูกดอกที่นี่ ..
ทำไมอ๊อซ

12

หากคุณต้องการใช้อินเทอร์เน็ตในแอพของคุณรวมถึงตรวจสอบสถานะเครือข่ายเช่นแอปเชื่อมต่อกับอินเทอร์เน็ตคุณต้องใช้รหัสด้านล่างนอกapplicationแท็ก

สำหรับการอนุญาตทางอินเทอร์เน็ต:

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

สำหรับสถานะเครือข่ายการเข้าถึง:

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

รหัสเสร็จสมบูรณ์:

<uses-sdk
    android:minSdkVersion="9"
    android:targetSdkVersion="16" />

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

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >


    <activity
        android:name=".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>

7

ถ้าเพียงแค่ใช้อินเทอร์เน็ตก็ใช้ -

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

หากคุณได้รับสถานะของอินเทอร์เน็ตให้ใช้เช่นกัน -

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

เหนือแท็กของแอปพลิเคชัน


6

ลืมเกี่ยวกับการเพิ่มสิทธิ์ลงในรายการเพิ่มรหัสนี้เป็นวิธีการ

public static boolean hasPermissions(Context context, String... permissions)
{
    if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && context != null && permissions != null)
    {
        for (String permission : permissions)
        {
            if (ActivityCompat.checkSelfPermission(context, permission) != PackageManager.PERMISSION_GRANTED)
            {
                return false;
            }
        }
    }
    return true;
}

และเขียนสิ่งนี้ในหน้าหลักของคุณ

int PERMISSION_ALL = 1;
    String[] PERMISSIONS = {Manifest.permission.READ_CONTACTS, Manifest.permission.WRITE_CONTACTS, Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_SMS, Manifest.permission.CAMERA};

    if (!hasPermissions(this, PERMISSIONS)) {
        ActivityCompat.requestPermissions(this, PERMISSIONS, PERMISSION_ALL);
    }

4

ใช้สิ่งเหล่านี้:

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

3

เพียงใส่รหัสด้านล่างใน AndroidManifest:

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

3

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

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

2

ในการขออนุญาตอินเทอร์เน็ตในรหัสของคุณคุณต้องเพิ่มรายการเหล่านี้ไปยังไฟล์ AndroidManifest.xml ของคุณ

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

สำหรับคำอธิบายรายละเอียดเพิ่มเติมไปที่https://developer.android.com/training/basics/network-ops/connecting


1

Google ลบความจำเป็นในการขออนุญาตสำหรับอินเทอร์เน็ตเป็นเวอร์ชันล่าสุด ถึงกระนั้นหากต้องการขอการอนุญาตทางอินเทอร์เน็ตในรหัสของคุณคุณจะต้องเพิ่มสิ่งเหล่านี้ลงในไฟล์ AndroidManifest.xml ของคุณ

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