2011-12-18 33 views
8

Tôi đang cố gắng tạo SyncAdapter cho ứng dụng Android của mình để hiển thị video YouTube từ một kênh cụ thể. Các video là miền công cộng nên tôi không muốn người dùng đăng nhập, tạo tài khoản, xác thực chính mình, tải lên dữ liệu hoặc sử dụng cơ sở dữ liệu danh bạ. Tôi chỉ muốn SyncAdapter cập nhật định kỳ cơ sở dữ liệu của ứng dụng với siêu dữ liệu video mới nhất từ ​​kênh đó. Tôi đã xây dựng một ContentProvider để truy cập cơ sở dữ liệu của mình. Tôi thích thực tế là SyncProvider sẽ xử lý khả năng tắt đồng bộ hóa, lên lịch và thử lại các cơ chế backoff để cập nhật.SyncAdapter Nếu không có tài khoản

Tôi đã hỏi trước đó nếu một SyncAdapter là một lựa chọn tốt cho trường hợp sử dụng của tôi và tôi đã được thông báo. Tôi đã xem video Google I/O, đọc tài liệu, đọc blog ... (xem danh sách bên dưới). Tôi đã không thể nhận được bất cứ điều gì để làm việc. Điều tốt nhất tôi nhận được là có tài khoản SyncAdapter hiển thị trong "Tài khoản & cài đặt đồng bộ hóa" chung nhưng không hoạt động. Ngay cả khi điều này làm việc, nó sẽ ít hơn lý tưởng vì tôi thích người dùng không nhìn thấy tài khoản ngoại trừ từ bên trong ứng dụng của tôi. Điều này sẽ được chấp nhận nếu không có tùy chọn nào khác, miễn là họ không cần truy cập nó để thiết lập nó vì mọi thứ sẽ mặc định tự động đồng bộ hóa một lần mỗi ngày.

Tôi thậm chí đã cố gắng sử dụng SampleSyncAdapter dưới dạng và đặt điểm ngắt trong phần Mã xác thực. Không phải là một điểm ngắt duy nhất được nhấn vì vậy tôi không thể nhìn thấy những gì gây nên các cuộc gọi hoặc những dữ liệu được chứa. Tôi đã nghĩ rằng ít nhất tôi cũng sẽ đạt được điều đó.

Tôi bắt đầu nghĩ rằng việc sử dụng SyncAdapter là một ý tưởng tồi mặc dù đã đề xuất. Tôi chưa tìm thấy một ví dụ nào gần với những gì tôi muốn, hãy để một mình một hướng dẫn hoặc tài liệu hoàn chỉnh, có tổ chức và rõ ràng. Điều này có vẻ như nó phải là một nhiệm vụ phổ biến nhiều ứng dụng sẽ muốn làm.

Vui lòng thêm vào bài đăng này bất kỳ tài liệu hay nào về trường hợp sử dụng này. Tôi không thể tìm thấy.
Nếu không có điều này, tôi nghĩ rằng công bằng để khuyên tất cả mọi người không sử dụng SyncAdapters cho trường hợp sử dụng này. Tôi không nói cho các trường hợp sử dụng khác ở đây vì vậy không nhảy vào với cách nó làm việc cho trường hợp sử dụng của bạn nếu nó không giống như tôi.

Cũng sẽ rất hữu ích khi biết phiên bản cấp API nào được coi là sẵn sàng cho giờ vàng. Có một số vấn đề được đăng về số phiên bản. Tôi đang cố gắng ở mức thấp nhất có thể để thu hút nhiều người dùng nhất. Mục tiêu API hiện tại của tôi là 7.

Dưới đây là danh sách các liên kết tôi đã cố gắng để không có kết quả, người khác có thể tìm thấy những hữu ích hơn:

http://developer.android.com/resources/samples/SampleSyncAdapter/index.html

http://www.google.com/events/io/2010/sessions/developing-RESTful-android-apps.html

http://naked-code.blogspot.com/2011/05/revenge-of-syncadapter-synchronizing.html

http://www.c99.org/2010/01/23/writing-an-android-sync-provider-part-1/

http://www.c99.org/2010/01/23/writing-an-android-sync-provider-part-2/

http://www.finalconcept.com.au/article/view/android-account-manager-step-by-step

http://www.finalconcept.com.au/article/view/android-account-manager-step-by-step-1

http://www.finalconcept.com.au/article/view/android-account-manager-step-by-step-2

Android SyncAdapter without Authentication vs. Android Service

Why does ContentResolver.requestSync not trigger a sync?

+0

Không phải là câu hỏi trùng lặp nhưng có liên quan [Tôi có nên sử dụng android AccountManager không?] (Http://stackoverflow.com/a/8614699/94363) – rds

Trả lời

6

Nói tóm lại câu trả lời là: ContentProvider, AccountManagerSyncAdapter đi cùng nhau. Bạn phải có ba phần này, ngay cả khi chúng "câm".

+1

Và đây là danh sách của tôi về [những thứ mà s.ck trong khung công tác android ] (http://regis.decamps.info/blog/2011/08/my-life-with-android-its-complicated/) – rds

+0

Điều tôi không thể hiểu là bên Tài khoản/Người quản lý tài khoản. Tôi không muốn Tài khoản hiển thị trong Cài đặt đồng bộ hóa hệ thống vì người dùng không cần phải xem tài khoản này. EVen nếu nó có được (có vẻ là đúng), những gì tôi không thể có là yêu cầu người dùng kích hoạt hoặc thiết lập các thiết lập của Sync. Điều đó sẽ giết khả năng sử dụng của ứng dụng. Tôi không thể tìm cách tạo một Tài khoản quá câm để không hiển thị. Làm thế nào để tạo một tài khoản mà người dùng không biết là tồn tại? – Mitch

+0

Có, nó phải ở đó. Tại sao nó làm phiền bạn nếu "Cài đặt> Tài khoản & Đồng bộ hóa" hiển thị điều này? Ít nhất, người dùng có thể tạm ngưng đồng bộ hóa nếu anh ta muốn tiết kiệm pin. Ngoài ra, nếu AccountManager là câm, bạn không cần phải yêu cầu người dùng thiết lập bất cứ điều gì. Có thể những gì bạn đã bỏ lỡ, là bạn có thể đăng ký một tài khoản trong AccountManager theo lập trình. – rds

5

Như đã nêu ở trên, "ContentProvider, AccountManager và SyncAdapter đi cùng nhau". Đối với ứng dụng của bạn, bạn có thể gọi cho hoạt động sau đây là lần đầu tiên ứng dụng của bạn được nạp để xác thực và bắt đầu đồng bộ tự động:

public class LoginActivity extends AccountAuthenticatorActivity { 

private final static String DUMMY_ACCOUNT_NAME = "some_name"; 
private final static String DUMMY_ACCOUNT_PASS = "some_pass"; 
private final static String AUTHORITY = "com.android.contacts"; // for example 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    Account account = new Account(DUMMY_ACCOUNT_NAME, Constants.ACCOUNT_TYPE); 
    AccountManager am = AccountManager.get(this); 
    if (am.addAccountExplicitly(account, DUMMY_ACCOUNT_PASS, null)) { 
     Bundle result = new Bundle(); 
     result.putString(AccountManager.KEY_ACCOUNT_NAME, account.name); 
     result.putString(AccountManager.KEY_ACCOUNT_TYPE, account.type); 
     setAccountAuthenticatorResult(result); 
     ContentResolver.setSyncAutomatically(account, AUTHORITY, true); 
    } 

    finish(); 
} 
} 

này hoạt động trong API Android 5 +.

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