2011-04-11 14 views
5

मैं डेटा & सिंक्रनाइज़ेशन के तहत दिखाने के लिए कस्टम सामग्री प्रदाता प्राप्त करने का प्रयास कर रहा हूं, और मैं कुछ समस्याओं में भाग रहा हूं। अर्थात्, यह प्रदर्शित नहीं हो रहा है।सामग्री प्रदाता डेटा और सिंक्रनाइज़ेशन क्षेत्र में दिखाई नहीं देगा

बारीकियों:

मेरे AndroidManifest.xml प्रदाता और सेवा है:

<?xml version="1.0" encoding="utf-8"?> 
<sync-adapter xmlns:android="http://schemas.android.com/apk/res/android" 
    android:contentAuthority="com.clientname.reader.books" 
    android:accountType="com.google" 
    android:supportsUploading="true" 
    android:userVisible="true" 
/> 

बस होने के लिए:

<provider android:name="BooksProvider" 
    android:label="ClientName Books" 
    android:authorities="com.clientname.reader.books" 
    android:enabled="true" 
    android:exported="true" 
    android:syncable="true"> 
    <grant-uri-permission android:pathPattern=".*" /> 
</provider> 
<service android:name=".sync.SyncService" 
    android:exported="true" android:process=":sync"> 
    <intent-filter> 
     <action android:name="android.content.SyncAdapter" /> 
    </intent-filter> 
    <meta-data android:name="android.content.SyncAdapater" 
     android:resource="@xml/syncadapter" /> 
</service> 

और रेस/xml/syncadapter.xml निम्नलिखित है सुरक्षित, मैंने निम्नलिखित पर भी निम्न कहा है:

AccountManager accountManager = AccountManager.get(getApplicationContext()); 
Account[] accounts = accountManager.getAccountsByType("com.google"); 
for(Account account : accounts){ 
    Log.d(TAG, "Account: " + account.name); 
    ContentResolver.setIsSyncable(account, Reader.AUTHORITY, 1); 
} 

जब मैं गतिविधि को लोड करता हूं, तो मुझे ContentResolver.setIsSyncable से adb लॉगिंग मिलता है, यह कहकर कि खाता पहले ही सिंक करने योग्य सेट है, इसलिए विधि कुछ भी नहीं कर रही है।

और फिर भी, प्रदाता मना कर दिया सेटिंग्स में दिखाने के लिए> खाते & सिंक> डेटा & तुल्यकालन। क्यों कोई विचार? किसी को पता है कि यह निर्धारित करता है कि उस खंड में क्या दिखाई देता है?

[संपादित करें] कुछ अधिक जानकारी:

घंटे डिबगिंग बिताने के बाद, मैं इस त्रुटि के पार आ रहा हूँ:

04-11 10:46:02.370: DEBUG/SyncManager(105): can't find a sync adapter for SyncAdapterType Key {name=com.clientname.reader.books, type=com.google}, removing settings for it 

यह भी प्रतीत होता मेरी SyncService वर्ग वास्तव में बुलाया जा रहा है कभी नहीं किया गया है। क्या मुझे इसे खुद का आह्वान करना चाहिए? मैंने देखा है कि नमूने में से कोई भी या जंगली में अनुप्रयोग खुद को आह्वान नहीं करते हैं, लेकिन वे सभी के पास भी घटक हैं। विचार?

उत्तर

4
<meta-data android:name="android.content.SyncAdapater" 
    android:resource="@xml/syncadapter" /> 

क्या कोई और जवाब देखता है?

ईश्वर, मुझे बेवकूफ होने से नफरत है।

+0

टाइपो सबसे कष्टप्रद और निराशाजनक प्रोग्रामिंग त्रुटियां हैं !! – petersaints

+1

यहां तक ​​कि आपके उत्तर के साथ, मुझे नहीं पता कि क्या गलत था। क्या आप इसे स्पष्ट कर सकते हैं? – rds

+0

android.content.SyncAdapater android.content.SyncAdapter – Paddy

3

तो एक अर्थशास्त्र परिप्रेक्ष्य से, प्रदाता सीधे & सिंक में दिखाई नहीं देते हैं। इसके बजाए, प्रदाता उनके विवरण पृष्ठों पर प्रदाताओं के साथ दिखाई देते हैं। इसलिए जब आप अपने सिंक एडाप्टर को कॉम्फ स्टाइल खाते में बाध्य कर रहे हैं, तो सिंक एडैप्टर आपके Google खाते के भीतर दिखाई देगा - "संपर्क" और "कैलेंडर" और "जीमेल" के साथ, आपको "क्लाइंटनाम पुस्तकें"

देखना चाहिए

हालांकि, आपकी वास्तविक समस्या आपका एक्सएमएल है। प्रति AndroidManifest.xml docs,

android:name

The name of the Service subclass that implements the service. This should be a fully qualified class name (such as, "com.example.project.RoomService"). However, as a shorthand, if the first character of the name is a period (for example, ".RoomService"), it is appended to the package name specified in the

इसलिए, यह है क्योंकि यह FQCN या अपने संकुल के माध्यम से रिश्तेदार पथ की जरूरत है जैसे कि यह अपने BooksProvider वर्ग नहीं मिल रहा है लग रहा है।

+2

जानकारी के लिए धन्यवाद होना चाहिए। असली मुद्दा एक टाइपो था। भगवान, मैं बेवकूफ महसूस करता हूँ। इस विंडो में Ctrl + F "adapater", और आप इसे देखेंगे। – Paddy

2

जैसा कि मैंने अंततः पता लगाया है, सिंक्रनाइज़ेशन सेटिंग्स स्क्रीन के तहत ContentProvider दिखाई नहीं दे रहा है, क्योंकि मैनिफेस्ट में अनुपलब्ध android.permission.WRITE_SYNC_SETTINGS अनुमति की वजह से है। दुर्भाग्य से मैंने पढ़ा है कि सभी ट्यूटोरियल, लेख, और प्रलेखन इस बिंदु को याद करता है या स्पष्ट रूप से उल्लिखित नहीं है। इसके अलावा, मंच (एपीआई स्तर 13 के तहत परीक्षण) किसी भी प्रकार के अनुमति अपवाद को फेंकने के लिए प्रतीत नहीं होता है - मुझे उम्मीद है कि वे इसे ठीक करेंगे। उम्मीद है कि यह किसी की मदद करता है।

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