Tôi cần sự cho phép nào để truy cập Internet từ một ứng dụng Android?


596

Tôi nhận được Ngoại lệ sau khi chạy ứng dụng của mình:

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

Làm thế nào để tôi giải quyết vấn đề cấp phép còn thiếu?

Câu trả lời:


1245

Thêm quyền INTERNET vào tệp kê khai của bạn.

Bạn phải thêm dòng này:

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

bên ngoài thẻ ứng dụng trong AndroidManifest.xml của bạn


43
Thẻ này phải được đặt TRƯỚC KHI TAG ứng dụng. Nếu bạn đặt nếu sau khi sử dụng TAG, nó sẽ đưa ra cảnh báo.
Marek

2
Khởi động lại Trình giả lập (được yêu cầu đối với tôi trước khi điều này có hiệu lực).
jcalfee314

Tôi có vấn đề. Tôi không muốn truy cập internet cho apk của mình. Không có quyền nào được thêm vào bảng kê khai, nhưng nếu tôi cố gắng cài đặt apk, cài đặt thông báo cho tôi, apk đó cần phải TRUY CẬP INTERNET HOÀN TOÀN. Làm thế nào để giải quyết vấn đề này ? không có quyền được thêm vào bảng kê khai. Apk của tôi không yêu cầu truy cập internet đầy đủ - tôi muốn vô hiệu hóa hoán vị này.
Altivo

1
@Altivo Hãy xem bảng kê khai đã hợp nhất của bạn trong ../app/build/intermediates/manifests/full/debug/AndroidManifest.xml. Tại đây bạn sẽ tìm thấy tất cả các quyền mà ứng dụng của bạn sử dụng. Điều này được hình thành bằng cách hợp nhất bảng kê khai ứng dụng của bạn cũng như bảng kê khai của thư viện đã sử dụng. Bạn chắc chắn đã sử dụng thư viện dịch vụ google play, chứa các quyền INTERNET và ACCESS_NETWORK_STATE.
Sid

116

Trong bản phát hành mới nhất của Google Play, Google đã loại bỏ nhu cầu xin phép internet vì "hầu hết các ứng dụng đều cần nó ngay bây giờ". Tuy nhiên, đối với người dùng có phiên bản cũ hơn, vẫn nên để lại mã bên dưới trong bảng kê khai của bạn

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

1
Bất kỳ tài liệu tham khảo nào đến một tài liệu Google mà nó nói như vậy?
farindk

@farindk phần ghi chú đầu tiên tại đây: support.google.com.vn/googleplayfurt/6014972?hl=vi
Finley Smith

24
Tài liệu bạn liên kết để nói về cách Cửa hàng Play sẽ không bao gồm quyền Internet trong danh sách quyền chính mà nó hiển thị cho người dùng khi hỏi có nên cài đặt ứng dụng hay không. Nó không nói rằng một ứng dụng sử dụng Internet không còn cần phải tuyên bố rằng nó làm như vậy trong danh sách các quyền được sử dụng của bảng kê khai. Bạn có nghĩa là nói rằng tất cả các ứng dụng ngầm sử dụng Internet mà không nói như vậy trong bảng kê khai của chúng? Đó là, nếu Janusz chạy ứng dụng tương tự từ câu hỏi trong điện thoại ngày nay , nó sẽ không thất bại như cách nó đã làm khi câu hỏi được hỏi?
Rob Kennedy

2
Nếu bạn giới thiệu các tài liệu cấp phép, bạn sẽ thấy rằng nó không bị phản đối. Các quyền không dùng nữa là các quyền không được sử dụng, mà bạn không cần phải có trong bảng kê khai của mình vì chúng không được sử dụng nữa. Quyền không được sử dụng có thể là do API đã được thay thế hoặc vì nó không còn cần thiết nữa. Vì vậy, yeah, bạn cần sự cho phép internet để truy cập internet. Ngay cả các tài liệu cơ bản về kết nối với internet cũng nói rằng phải có sự cho phép của internet.
Zoe


76

chỉ cần đặt dòng trên như dưới đây

<?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"/>

Bạn có biết bất kỳ quyền nào khác có thể được yêu cầu để cho phép Xác thực NTLM / Windows không? Đặc biệt là trong môi trường XenMobile ... chỉ cần ném phi tiêu vào đây ..
whyoz

12

Nếu bạn muốn sử dụng Internet trong ứng dụng của mình cũng như kiểm tra trạng thái mạng tức là ứng dụng được kết nối với internet thì bạn phải sử dụng mã bên dưới bên ngoài applicationthẻ.

Đối với Giấy phép Internet:

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

Đối với trạng thái mạng Access:

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

Mã hoàn chỉnh:

<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

Nếu chỉ sử dụng internet thì hãy sử dụng-

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

nếu bạn nhận được trạng thái của internet thì cũng nên sử dụng -

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

ngay phía trên thẻ ứng dụng.


6

quên về việc thêm quyền vào tệp kê khai Thêm mã này làm phương thức

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

và viết nó trong Main của bạn

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

Sử dụng những

<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

Chỉ cần đặt mã dưới đây trong AndroidManifest:

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

3

Theo các phiên bản hiện tại, Android không yêu cầu quyền tương tác với internet nhưng bạn có thể thêm mã dưới đây sẽ giúp người dùng sử dụng các phiên bản cũ hơn Chỉ cần thêm các mã này trong AndroidManifest

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


1

Google đã loại bỏ nhu cầu xin phép internet đối với phiên bản mới nhất. Tuy nhiên, để yêu cầu cấp phép internet trong mã của bạn, bạn phải thêm những thứ này vào tệp AndroidManifest.xml của bạn.

<uses-permission android:name="android.permission.INTERNET"/>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.