Làm thế nào để thêm quyền truy cập vào một ứng dụng?


428

Tôi đang cố gắng truy cập liên kết HTTP bằng HttpURLConnectionAndroid để tải xuống một tệp, nhưng tôi nhận được cảnh báo này trong LogCat:

WARN / System.err (223): java.net.SocketException: Quyền bị từ chối (có thể thiếu quyền INTERNET)

Tôi đã thêm vào android.Manifest.permissionứng dụng của mình nhưng nó vẫn đưa ra ngoại lệ tương tự.


Dán nội dung cấp phép của bạn, bạn đã cấp quyền cho INTERNET chưa?
Anthony Forloney

tôi đã thêm nhập android.Manifest-01; để ứng dụng, không có gì khác. Tôi cần thêm gì nữa để cấp quyền
cướp

2
Hãy xem câu trả lời của tôi dưới đây và xem điều đó có giúp ích gì không và tôi không biết import android.Manifest.permissionsẽ làm gì cho bạn nếu bạn không có quyền INTERNET được đặt trong tệp AndroidManifest.xml
Anthony Forloney

Câu trả lời:


934

Giả sử bạn không có quyền được đặt từ LogCatmô tả lỗi của mình , đây là nội dung của tôi cho AndroidManifest.xmltệp của tôi có quyền truy cập vào internet:

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

Ngoài ra, bạn nên tải xuống một tệp từ internet.


3
Nếu bạn tìm thấy câu trả lời giải quyết câu hỏi của bạn hoặc có vẻ hữu ích, thật hữu ích khi chọn là "đã trả lời" và / hoặc upvote, nó sẽ giúp cộng đồng cho bất kỳ ai gặp phải vấn đề tương tự. Đó không chỉ hướng đến câu hỏi này, mà còn những câu hỏi khác mà bạn đã hỏi
Anthony Forloney

tôi không biết về nó, tôi sẽ làm điều đó chắc chắn nếu điều này sẽ giải quyết vấn đề của tôi
cướp

báo cáo lại nếu bạn gặp phải bất cứ điều gì khác biệt và tôi sẽ rất vui được giúp đỡ.
Anthony Forloney

1
Trong trường hợp của tôi, tôi phải chắc chắn rằng đó là dòng RẤT ĐẦU TIÊN sau câu lệnh kê khai .. bất cứ nơi nào dưới đó và nó sẽ không hoạt động. v2.2, api cấp 8, htc g1
slf

1
@dialex AFAIK, không có phần tử con uses-permissionbên trong applicationthẻ, chỉ có phần manifest.
Anthony Forloney

73

Tên cho phép là CASE-SENSITIVE

Trong trường hợp ai đó sẽ đấu tranh với cùng một vấn đề, đó là tuyên bố phân biệt chữ hoa chữ thường , vì vậy trường hợp sai có nghĩa là ứng dụng của bạn sẽ không được phép.

SAI LẦM

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

CHÍNH XÁC

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

Vấn đề này có thể xảy ra tức là. trên tự động hoàn thành trong IDE


1
Cảm ơn bạn! Tôi đã lãng phí cả ngày để tự hỏi tại sao ứng dụng của tôi không hoạt động. Tôi mới làm quen với studio android và vấn đề này đã không xảy ra trong Eclipse trước đó :)
InspiredCoder

1
Và tôi đã lãng phí cả ngày để tìm ra điều gì thực sự khác biệt giữa họ, OMG Capital and Small ANDROID.PERMISSIONandroid.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>

34

Nếu bạn đang sử dụng plugin ADT của Eclipse cho sự phát triển của mình, hãy mở AndroidManifest.xmltrong Trình soạn thảo AndroidManifest.xmltệp kê khai Android (nên là hành động mặc định để mở từ danh sách tệp dự án).

Sau đó, chọn Permissionstab dọc phía dưới trình chỉnh sửa ( Manifest - Application - Permissions - Instrumentation - AndroidManifest.xml), sau đó nhấp vào Add...a Uses Permissionvà chọn quyền mong muốn từ danh sách thả xuống bên phải hoặc chỉ sao chép-dán vào cái cần thiết (chẳng hạn như android.permission.INTERNETquyền bạn yêu cầu).


23

Sao chép dòng sau vào tệp kê khai ứng dụng của bạn và dán trước <application> thẻ.

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

Đặt quyền bên dưới <application/>thẻ sẽ hoạt động, nhưng sẽ đưa ra cảnh báo cho bạn. Vì vậy, hãy cẩn thận để đặt nó trước khi <application/>khai báo thẻ.


Khi viết bình luận này, nó đi ra ngoài yếu tố ứng dụng nhưng bên trong tệp kê khai. ví dụ: <application> ... </ application> <
used-allow

12

Khi sử dụng nhật thực, hãy làm theo các bước sau

1) Nhấp đúp chuột vào bảng kê khai để hiển thị trên trình chỉnh sửa
2) Nhấp vào tab quyền bên dưới trình chỉnh sửa tệp kê khai
3) Nhấp vào nút Thêm
4) trên hộp thoại xuất hiện Nhấp vào sử dụng quyền. (Thông thường, mục cuối cùng trong danh sách)
5) Lưu ý chế độ xem xuất hiện ở phía bên cứng Chọn "ERIC.INTERNET"
6) Sau đó, một loạt Ok và cuối cùng lưu lại.

Hi vọng điêu nay co ich


7

Tôi đến trễ nhưng tôi muốn hoàn thành câu trả lời.

Một sự cho phép được thêm vào manifest.xmlnhư

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

Điều này là đủ cho các tiêu chuẩn mà không có quyền nào được nhắc cho người dùng. Tuy nhiên, chỉ thêm quyền là không đủ để hiển thị nếu đó là quyền nguy hiểm. Xem tài liệu android . Giống như Camera, quyền lưu trữ.

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

Bạn sẽ cần phải xin phép người dùng . Tôi sử dụng thư viện RxPermission là thư viện được sử dụng rộng rãi để xin phép. Bởi vì đó là mã dài mà chúng ta phải viết để xin phép.

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

Thêm thư viện này vào ứng dụng của bạn

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

Điều đó cũng có thể thú vị trong bối cảnh thêm quyền INTERNET vào ứng dụng của bạn:

Google cũng đã cấp cho mỗi ứng dụng quyền truy cập Internet, loại bỏ hiệu quả quyền truy cập Internet. Ồ, chắc chắn, các nhà phát triển Android vẫn phải tuyên bố họ muốn truy cập Internet khi kết hợp ứng dụng. Nhưng người dùng không còn có thể thấy quyền truy cập Internet khi cài đặt một ứng dụng và các ứng dụng hiện tại không có quyền truy cập Internet giờ đây có thể truy cập Internet bằng bản cập nhật tự động mà không cần nhắc bạn.

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

Điểm mấu chốt là bạn vẫn phải thêm quyền INTERNET trong tệp kê khai nhưng ứng dụng sẽ được cập nhật trên các thiết bị của người dùng mà không yêu cầu họ cấp phép mới.


-1

Bạn phải sử dụng cả Mạng và Trạng thái mạng truy cập trong tệp kê khai trong khi bạn đang thử tải hoặc truy cập internet thông qua trình giả lập Android.

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

Nếu bạn chỉ cấp quyền .INTERNET, nó sẽ không truy cập 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.