2011-12-18 11 views
8

बिना सिंकएडाप्टर मैं अपने एंड्रॉइड ऐप के लिए एक विशिष्ट चैनल से यूट्यूब वीडियो दिखाने के लिए एक सिंक एडाप्टर बनाने की कोशिश कर रहा हूं। वीडियो सार्वजनिक डोमेन हैं इसलिए मैं नहीं चाहता कि उपयोगकर्ता लॉगिन करे, खाता बनाएं, स्वयं प्रमाणित करें, डेटा अपलोड करें या संपर्क डेटाबेस का उपयोग करें। मैं बस सिंक एडाप्टर को उस चैनल से नवीनतम वीडियो मेटाडेटा के साथ समय-समय पर अपने ऐप के डेटाबेस को अपडेट करना चाहता हूं। मैंने अपने डेटाबेस तक पहुंचने के लिए पहले से ही ContentProvider बनाया है। मुझे इस तथ्य की तरह लगता है कि सिंकप्रोवाइडर अद्यतन करने के लिए सिंक्रनाइज़ेशन, शेड्यूलिंग और बैकऑफ मैकेनिज्म को पुनः चालू करने की क्षमता को संभालेगा।खाता

मैंने पहले पूछा था कि क्या मेरे सिंकएडाप्टर मेरे उपयोग के मामले के लिए एक अच्छा विकल्प था, और मुझे बताया गया था कि यह था। मैंने Google I/O वीडियो देखा, दस्तावेज़ पढ़े, ब्लॉग पढ़े ... (नीचे दी गई सूची देखें)। मैं काम करने के लिए कुछ भी पाने में असमर्थ रहा हूं। सबसे अच्छा मैंने प्राप्त किया है कि सिंक एडाप्टर खाता वैश्विक "खाता & सिंक सेटिंग्स" में दिखाई देगा, लेकिन गैर-कार्यात्मक हो। यहां तक ​​कि अगर यह काम करता है, तो यह आदर्श से भी कम होगा क्योंकि मैं उपयोगकर्ता को अपने ऐप के अंदर छोड़कर खाता नहीं देखना पसंद करता हूं। यदि कोई अन्य विकल्प नहीं था, तो यह स्वीकार्य होगा, जब तक उन्हें इसे सेट अप करने के लिए इसे एक्सेस करने की आवश्यकता नहीं है क्योंकि दिन समन्वय के बाद सब कुछ स्वचालित हो जाएगा।

मैंने नमूना सिंक एडाप्टर का उपयोग करने की कोशिश की है और प्रमाणीकरण कोड अनुभागों में ब्रेकपॉइंट्स डालने का प्रयास किया है। एक ब्रेकपॉइंट नहीं मारा जाता है इसलिए मैं नहीं देख सकता कि कॉल क्या ट्रिगर करता है या कौन सा डेटा निहित है। मैंने सोचा होगा कि मुझे कम से कम इतना मिल जाएगा।

मुझे सिंकएडाप्टर का उपयोग करने के बारे में सोचना शुरू हो रहा है, सिफारिश के बावजूद एक बुरा विचार है। मुझे अभी तक एक उदाहरण मिलना है जो मैं चाहता हूं कि करीब है, अकेले ट्यूटोरियल या पूर्ण, संगठित और स्पष्ट दस्तावेज़ दें। ऐसा लगता है कि यह एक आम काम होना चाहिए जो कई ऐप्स करना चाहते हैं।

कृपया इस पोस्ट में इस उपयोग के मामले में कोई भी अच्छा दस्तावेज जोड़ें। मुझे कोई नहीं मिला।
इसके बिना, मुझे लगता है कि इस उपयोग के मामले में SyncAdapters का उपयोग न करने के लिए सभी को अनुशंसा करना उचित है। मैं यहां अन्य उपयोग के मामलों के लिए बात नहीं कर रहा हूं इसलिए अपने उपयोग के मामले में यह कैसे काम करता है, इस पर कूद न करें अगर यह मेरी तरह नहीं है।

यह जानना भी सहायक होगा कि एपीआई स्तर का संस्करण प्राइमटाइम के लिए तैयार क्यों माना जाता है। संस्करण संख्याओं के बारे में कई मुद्दे पोस्ट किए गए हैं। मैं अधिकतर उपयोगकर्ताओं को प्राप्त करने के लिए जितना संभव हो उतना कम रहने की कोशिश कर रहा हूं। मेरा वर्तमान एपीआई लक्ष्य 7 है।

यहाँ लिंक मैं कोई लाभ नहीं हुआ की कोशिश की है की सूची दी गई है, दूसरों को इन और अधिक उपयोगी हो सकते हैं:

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

कोई डुप्लिकेट नहीं बल्कि संबंधित प्रश्न [क्या मुझे एंड्रॉइड खाता प्रबंधक का उपयोग करना चाहिए?] (Http://stackoverflow.com/a/8614699/94363) – rds

उत्तर

6

संक्षिप्त उत्तर में है: ContentProvider, AccountManager और SyncAdapter एक साथ चलते हैं। आपके पास इन तीन टुकड़े होना चाहिए, भले ही वे "गूंगा" हों।

+1

और यह मेरी सूची में है [एंड्रॉइड फ्रेमवर्क में s.ck ] (http://regis.decamps.info/blog/2011/08/my-life-with-android-its-complicated/) – rds

+0

जो मैं नहीं समझ सकता वह चीजों का खाता/खाता प्रबंधक पक्ष है। मैं सिस्टम सिंक सेटिंग्स में खाता दिखाना पसंद नहीं करूंगा क्योंकि उपयोगकर्ता को इसे देखने की आवश्यकता नहीं है। अगर इसे वहां होना है (जो सच है), जो मेरे पास नहीं हो सकता है, उसे उपयोगकर्ता को सिंक सेटिंग्स को सक्षम या सेटअप करने की आवश्यकता होती है। वह ऐप की उपयोगिता को मार देगा। मुझे ऐसा खाता बनाने का कोई तरीका नहीं मिल रहा है जो दिखने के लिए इतना मूर्ख नहीं है। मैं एक खाता कैसे बना सकता हूं जिसे उपयोगकर्ता अनजान है? – Mitch

+0

हां, यह वहां होना चाहिए। यदि "सेटिंग> खाते और सिंक" यह प्रदर्शित करता है तो यह आपको परेशान क्यों करता है? कम से कम, यदि वह बैटरी को सहेजना चाहता है तो उपयोगकर्ता सिंक को निलंबित कर सकता है। साथ ही, यदि खाता प्रबंधक गूंगा है, तो आपको उपयोगकर्ता को कुछ भी सेट करने के लिए कहने की आवश्यकता नहीं है। हो सकता है कि आप जो चूक गए हों, यह है कि आप प्रोग्राममैनेजर में प्रोग्रामेटिक रूप से एक खाता पंजीकृत कर सकते हैं। – rds

5

जैसा ऊपर बताया गया है, "ContentProvider, AccountManager और SyncAdapter एक साथ जाएं"।

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

यह Android एपीआई में काम करता है 5 +: आपके आवेदन के लिए आप निम्न गतिविधि पहली बार अपने अनुप्रयोग को प्रमाणित और स्वचालित रूप से सिंक करना प्रारंभ करने के लिए भरी हुई है कॉल कर सकते हैं।

संबंधित मुद्दे