2012-02-14 35 views
20

Thường có hai dịch vụ liên quan đến việc triển khai trình xác thực Android - dịch vụ xác thực để trả về trình xác thực và dịch vụ Đồng bộ hóa cung cấp bộ điều hợp đồng bộ hóa. Câu hỏi này là cụ thể về các dịch vụ xác thực, mặc dù trong most examplescả dịch vụ được cung cấp thuộc tính android:exported="true" trong AndroidManifest.xml, ví dụ:Android: export = "true" có thực sự cần thiết cho dịch vụ xác thực không?

<service 
    android:name=".authenticator.AuthenticationService" 
    android:exported="true"> 
    <intent-filter> 
     <action 
      android:name="android.accounts.AccountAuthenticator" /> 
    </intent-filter> 
    <meta-data 
     android:name="android.accounts.AccountAuthenticator" 
     android:resource="@xml/authenticator" /> 
</service> 

Loại bỏ các thuộc tính từ các dịch vụ xác thực dường như không có hiệu lực thi hành (thử nghiệm Froyo, Gingerbread) - mã auth tiếp tục hoạt động tốt - vậy lá cờ có thực sự cần thiết không?

Trả lời

35

Ok, để trả lời câu này bản thân mình bằng cách đọc các tài liệu, các documentation cho thuộc tính exported nói:

Giá trị mặc định phụ thuộc vào việc các dịch vụ chứa ý định bộ lọc. Sự vắng mặt của bất kỳ bộ lọc có nghĩa là nó có thể được gọi chỉ bằng cách chỉ định tên lớp chính xác của nó. Điều này ngụ ý rằng dịch vụ là chỉ dành cho việc sử dụng nội bộ ứng dụng (vì những người khác sẽ không biết tên lớp). Vì vậy, trong trường hợp này, giá trị mặc định là "false". Mặt khác, sự hiện diện của ít nhất một bộ lọc ngụ ý rằng dịch vụ được thiết kế để sử dụng bên ngoài, vì vậy giá trị mặc định là "true".

Tất cả các dịch vụ xác thực có một bộ lọc ý định - các tài liệu cho AbstractAccountAuthenticator nói:

Để có một xác thực người ta phải ... viết một dịch vụ mà trả về kết quả của getIBinder() trong của dịch vụ là onBind (android.content.Intent) khi được gọi với mục đích có hành động ACTION_AUTHENTICATOR_INTENT.

Điều này yêu cầu bộ lọc ý định, do đó giá trị mặc định được xuất cho dịch vụ là true. Vì vậy, câu trả lời cho câu hỏi này là "Không, thuộc tính là không phải là cần thiết - bởi vì nó đúng theo mặc định".

+1

Kể từ Android 4.2, Giá trị mặc định của android: đã xuất hiện không đúng. –

+0

Bạn có thể liên kết với một số tài liệu cho thấy điều đó không? Tài liệu Android được liên kết ở trên vẫn nói: '... Mặt khác, sự hiện diện của ít nhất một bộ lọc ngụ ý rằng dịch vụ được thiết kế để sử dụng bên ngoài, vì vậy giá trị mặc định là "true". –

+1

Tôi thấy tài liệu này: https://developer.android.com/about/versions/android-4.2.html - có nội dung 'Nhà cung cấp nội dung không còn được xuất theo mặc định'. - nhưng điều đó chỉ liên quan đến nhà cung cấp Nội dung chứ không phải Dịch vụ, tôi nghĩ vậy? –

Các vấn đề liên quan