คำถามติดแท็ก android-contentprovider

17
การติดตั้งแสดงข้อผิดพลาดในคอนโซล: ผู้ให้บริการติดตั้งล้มเหลวความขัดแย้ง
ฉันกำลังทดลองกับโปรแกรมตัวอย่าง NotesList ใน Android SDK ฉันสร้างความแตกต่างเล็กน้อยในโปรแกรม แต่เมื่อฉันติดตั้งเวอร์ชันที่แก้ไขของฉันฉันจะได้รับข้อความต่อไป INSTALL_FAILED_CONFLICTING_PROVIDER ในคอนโซลเมื่อฉันพยายามติดตั้งเมื่อโปรแกรมบันทึกดั้งเดิมอยู่บนอุปกรณ์แล้ว ฉันต้องเปลี่ยนอะไรในผู้ให้บริการเพื่อให้เป็นฐานข้อมูลที่ไม่ซ้ำกัน มันทำงานได้ดีถ้าฉันถอนการติดตั้งโปรแกรมบันทึกดั้งเดิมแล้วติดตั้งรุ่นที่แก้ไข

9
จะใช้การสนับสนุน FileProvider เพื่อแชร์เนื้อหาไปยังแอพอื่น ๆ ได้อย่างไร?
ฉันกำลังมองหาวิธีการอย่างถูกต้องหุ้น (ไม่เปิด) ไฟล์ภายในกับโปรแกรมภายนอกใช้ห้องสมุดสนับสนุน Android ของFileProvider ทำตามตัวอย่างในเอกสาร <provider android:name="android.support.v4.content.FileProvider" android:authorities="com.example.android.supportv4.my_files" android:grantUriPermissions="true" android:exported="false"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/my_paths" /> </provider> และใช้ ShareCompat เพื่อแชร์ไฟล์ไปยังแอปอื่นดังนี้: ShareCompat.IntentBuilder.from(activity) .setStream(uri) // uri from FileProvider .setType("text/html") .getIntent() .addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) ไม่ทำงานเนื่องจาก FLAG_GRANT_READ_URI_PERMISSION จะให้สิทธิ์แก่ Uri ที่ระบุไว้ในdataเจตนาเท่านั้นไม่ใช่มูลค่าของส่วนEXTRA_STREAMเสริม (ตามที่กำหนดโดยsetStream) ผมพยายามที่จะรักษาความปลอดภัยการประนีประนอมโดยการตั้งค่าandroid:exportedไปยังtrueผู้ให้บริการ แต่FileProviderภายในตรวจสอบว่าตัวเองจะถูกส่งออกเมื่อเป็นเช่นนั้นก็พ่นยกเว้น

14
การใช้ประเภทการสร้างใน Gradle เพื่อเรียกใช้แอปเดียวกับที่ใช้ ContentProvider บนอุปกรณ์เดียว
ฉันได้ตั้งค่า Gradle เพื่อเพิ่มคำต่อท้ายชื่อแพ็กเกจให้กับแอปดีบักของฉันเพื่อที่ฉันจะได้มีเวอร์ชันที่วางจำหน่ายที่ฉันใช้และเวอร์ชันดีบักในโทรศัพท์เครื่องเดียว ฉันกำลังอ้างถึงสิ่งนี้: http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Types ไฟล์ build.gradle ของฉันมีลักษณะดังนี้: ... android { ... buildTypes { debug { packageNameSuffix ".debug" versionNameSuffix " debug" } } } ทุกอย่างทำงานได้ดีจนกว่าฉันจะเริ่มใช้ ContentProvider ในแอปของฉัน ฉันเข้าใจ: Failure [INSTALL_FAILED_CONFLICTING_PROVIDER] ฉันเข้าใจว่าสิ่งนี้เกิดขึ้นเนื่องจากสองแอป (รุ่นและการแก้ไขข้อบกพร่อง) กำลังลงทะเบียนสิทธิ์ ContentProvider เดียวกัน ฉันเห็นความเป็นไปได้อย่างหนึ่งที่จะแก้ปัญหานี้ ถ้าฉันเข้าใจถูกต้องคุณควรระบุไฟล์ต่างๆที่จะใช้ในการสร้างได้ จากนั้นฉันควรจะสามารถใส่หน่วยงานที่แตกต่างกันในไฟล์ทรัพยากรที่แตกต่างกัน (และจาก Manifest set authority เป็นทรัพยากรสตริง) และบอก Gradle ให้ใช้ทรัพยากรที่แตกต่างกันสำหรับ debug build เป็นไปได้หรือไม่ ถ้าใช่คำแนะนำใด …

2
เหตุใด ContentResolver.requestSync จึงไม่ทริกเกอร์การซิงค์
ฉันกำลังพยายามใช้รูปแบบอะแดปเตอร์ Content-Provider-Sync ตามที่กล่าวไว้ในGoogle IO - สไลด์ 26 ผู้ให้บริการเนื้อหาของฉันใช้งานได้และการซิงค์ของฉันทำงานได้เมื่อฉันเรียกใช้จากแอปพลิเคชัน Dev Tools Sync Tester อย่างไรก็ตามเมื่อฉันเรียก ContentResolver requestSync (บัญชีผู้มีอำนาจบันเดิล) จาก ContentProvider การซิงค์ของฉันจะไม่ถูกทริกเกอร์ ContentResolver.requestSync( account, AUTHORITY, new Bundle()); แก้ไข - เพิ่มตัวอย่างข้อมูล Manifest xml รายการของฉันประกอบด้วย: <service android:name=".sync.SyncService" android:exported="true"> <intent-filter> <action android:name="android.content.SyncAdapter" /> </intent-filter> <meta-data android:name="android.content.SyncAdapter" android:resource="@xml/syncadapter" /> </service> --Edit syncadapter.xml ของฉันที่เชื่อมโยงกับบริการซิงค์ของฉันประกอบด้วย: <?xml version="1.0" encoding="utf-8"?> <sync-adapter …

5
การใช้งาน CursorLoader โดยไม่มี ContentProvider
เอกสาร Android SDK ระบุว่าstartManagingCursor()เมธอดนั้นถูกยกเลิก: วิธีนี้เลิกใช้แล้ว ใช้คลาส CursorLoader ใหม่กับ LoaderManager แทน นอกจากนี้ยังมีให้บริการบนแพลตฟอร์มรุ่นเก่าผ่านแพ็คเกจความเข้ากันได้ของ Android วิธีนี้ช่วยให้กิจกรรมดูแลจัดการวงจรชีวิตของเคอร์เซอร์ที่กำหนดให้คุณตามวงจรชีวิตของกิจกรรม นั่นคือเมื่อหยุดกิจกรรมมันจะเรียก deactivate () บนเคอร์เซอร์ที่กำหนดโดยอัตโนมัติและเมื่อเริ่มต้นใหม่ในภายหลังมันจะเรียกการร้องขอ () สำหรับคุณ เมื่อกิจกรรมถูกทำลายเคอร์เซอร์ที่มีการจัดการทั้งหมดจะถูกปิดโดยอัตโนมัติ หากคุณกำหนดเป้าหมาย HONEYCOMB หรือใหม่กว่าให้พิจารณาใช้ LoaderManager แทนซึ่งมีให้ผ่าน getLoaderManager () CursorLoaderดังนั้นผมจึงต้องการที่จะใช้ แต่ฉันจะใช้มันCursorAdapterได้ContentProviderอย่างไรเมื่อฉันต้องการ URI ในตัวสร้างCursorLoader?

9
เมื่อใดควรใช้ผู้ให้บริการเนื้อหา
ฉันเข้าใจว่าผู้ให้บริการเนื้อหาทำขึ้นเพื่ออนุญาตให้แชร์ข้อมูลแบบสาธารณะระหว่างแอปพลิเคชัน อย่างไรก็ตามฉันสงสัยว่ามีใครคิดจะสร้าง Content Provider เพื่อใช้ภายในแอปของคุณเอง การทำเช่นนี้จะมีข้อดีหรือไม่? ข้อเสียใด ๆ ? ในอดีตฉันเพิ่งติดตั้ง SQliteOpenHelper เพื่อเข้าถึงข้อมูลจากฐานข้อมูลของฉัน แต่ฉันกำลังพิจารณาที่จะสร้างผู้ให้บริการเนื้อหา ฉันรู้สึกว่าวิธีการขอข้อมูล URI นั้นชัดเจนและรัดกุม ในทางกลับกันการใช้ Content Provider สำหรับแอปพลิเคชันของฉันจะซ้ำซ้อน (เนื่องจากภายในนั้นฉันจะมีคลาส SQliteOpenHelper) และทำงานได้มากกว่าที่ฉันต้องการหรือไม่

5
แนวทางปฏิบัติที่ดีที่สุดสำหรับการเปิดเผยตารางหลายตารางโดยใช้ผู้ให้บริการเนื้อหาใน Android
ฉันกำลังสร้างแอปที่มีโต๊ะสำหรับงานอีเวนต์และโต๊ะสำหรับสถานที่ต่างๆ ฉันต้องการอนุญาตให้แอปพลิเคชันอื่นเข้าถึงข้อมูลนี้ได้ ฉันมีคำถามสองสามข้อเกี่ยวกับแนวทางปฏิบัติที่ดีที่สุดสำหรับปัญหาประเภทนี้ ฉันควรจัดโครงสร้างคลาสฐานข้อมูลอย่างไร ขณะนี้ฉันมีคลาสสำหรับ EventsDbAdapter และ VenuesDbAdapter ซึ่งให้ตรรกะสำหรับการสืบค้นแต่ละตารางในขณะที่มี DbManager แยกต่างหาก (ขยาย SQLiteOpenHelper) สำหรับจัดการเวอร์ชันฐานข้อมูลสร้าง / อัปเกรดฐานข้อมูลให้การเข้าถึงฐานข้อมูล (getWriteable / ReadeableDatabase) นี่เป็นวิธีแก้ปัญหาที่แนะนำหรือฉันจะดีกว่าถ้ารวมทุกอย่างไว้ในคลาสเดียว (เช่น DbManager) หรือแยกทุกอย่างแล้วปล่อยให้ Adapter แต่ละตัวขยาย SQLiteOpenHelper ฉันจะออกแบบผู้ให้บริการเนื้อหาสำหรับหลาย ๆ ตารางได้อย่างไร ขยายคำถามก่อนหน้านี้ฉันควรใช้ผู้ให้บริการเนื้อหารายเดียวสำหรับทั้งแอปหรือควรสร้างผู้ให้บริการแยกต่างหากสำหรับกิจกรรมและสถานที่ ตัวอย่างส่วนใหญ่ฉันพบเฉพาะแอปตารางเดียวดังนั้นฉันจะขอบคุณคำแนะนำใด ๆ ที่นี่

9
ความแตกต่างที่แน่นอนระหว่าง“ Content-Provider” และ“ SQLite Database”
ฉันได้ทำการเขียนโปรแกรมฐานข้อมูล SQLite สำหรับ Android แล้ว แต่ฉันไม่รู้อะไรเลยเกี่ยวกับ Content-Provider ยกเว้นสิ่งนี้: "ตามที่ฉันได้อ้างถึงหน้านักพัฒนาซอฟต์แวร์ Android Android SDK ได้อธิบายเกี่ยวกับ" ผู้ให้บริการเนื้อหา "ซึ่งใช้ในการจัดเก็บและดึงข้อมูล" แต่แล้ว, อะไรคือความแตกต่างที่แน่นอนระหว่าง "Content-Provider" และ "SQLite Database"? ข้อใดดีที่สุดในการจัดเก็บข้อมูลเมื่อใด ตัวอย่างหรือช่วยด้วย !!
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.