建立虛設常式內容供應程式

同步轉換介面架構旨在處理由彈性及 高度安全的內容供應器架構因此,同步處理轉換介面架構會預期 使用該架構的應用程式已針對本機資料定義內容供應器。 如果同步轉換介面架構嘗試執行同步轉接程式,而您的應用程式沒有 內容供應器,您的同步轉換介面當機。

如果您正在開發新的應用程式,以便將資料從伺服器轉移到裝置,建議您 強烈建議將本機資料儲存在內容供應器中。除了對 同步轉換介面、內容供應器提供各式各樣的安全性優勢,尤其 專為處理 Android 系統上的資料儲存而設計。進一步瞭解如何建立內容 請參閱建立內容供應器一文。

不過,如果您已以其他形式儲存本機資料,仍然可以使用同步處理功能 處理資料移轉的轉接器。符合 請將虛設常式內容供應器新增至應用程式。虛設常式供應商會 內容供應器類別,但所有的必要方法都會傳回 null0。如果發生以下情況: 新增虛設常式供應商,即可使用同步轉換介面轉移任何儲存空間中的資料 您選擇的機制

如果應用程式已有內容供應器,則不需要虛設常式內容供應器。 這時,您可以略過本課程,直接繼續完成本課程。 建立同步處理配接器。如果你還沒有 這個單元將說明如何新增虛設常式內容供應器 將同步轉換介面插入架構

新增虛設常式內容供應器

如要為應用程式建立虛設常式內容供應器,請擴充 類別 ContentProvider 並找到其必要方法。下列 下列程式碼片段說明如何建立虛設常式提供者:

Kotlin

/*
 * Define an implementation of ContentProvider that stubs out
 * all methods
 */
class StubProvider : ContentProvider() {
    /*
     * Always return true, indicating that the
     * provider loaded correctly.
     */
    override fun onCreate(): Boolean  = true

    /*
     * Return no type for MIME type
     */
    override fun getType(uri: Uri): String?  = null

    /*
     * query() always returns no results
     *
     */
    override fun query(
            uri: Uri,
            projection: Array<String>,
            selection: String,
            selectionArgs: Array<String>,
            sortOrder: String
    ): Cursor?  = null

    /*
     * insert() always returns null (no URI)
     */
    override fun insert(uri: Uri, values: ContentValues): Uri? = null

    /*
     * delete() always returns "no rows affected" (0)
     */
    override fun delete(uri: Uri, selection: String, selectionArgs: Array<String>): Int = 0

    /*
     * update() always returns "no rows affected" (0)
     */
    override fun update(
            uri: Uri,
            values: ContentValues,
            selection: String,
            selectionArgs: Array<String>
    ): Int = 0
}

Java

/*
 * Define an implementation of ContentProvider that stubs out
 * all methods
 */
public class StubProvider extends ContentProvider {
    /*
     * Always return true, indicating that the
     * provider loaded correctly.
     */
    @Override
    public boolean onCreate() {
        return true;
    }
    /*
     * Return no type for MIME type
     */
    @Override
    public String getType(Uri uri) {
        return null;
    }
    /*
     * query() always returns no results
     *
     */
    @Override
    public Cursor query(
            Uri uri,
            String[] projection,
            String selection,
            String[] selectionArgs,
            String sortOrder) {
        return null;
    }
    /*
     * insert() always returns null (no URI)
     */
    @Override
    public Uri insert(Uri uri, ContentValues values) {
        return null;
    }
    /*
     * delete() always returns "no rows affected" (0)
     */
    @Override
    public int delete(Uri uri, String selection, String[] selectionArgs) {
        return 0;
    }
    /*
     * update() always returns "no rows affected" (0)
     */
    public int update(
            Uri uri,
            ContentValues values,
            String selection,
            String[] selectionArgs) {
        return 0;
    }
}

在資訊清單中宣告提供者

同步處理轉換介面架構會檢查您的應用程式 應用程式已在應用程式資訊清單中宣告供應器。如要在 資訊清單,請新增含有下列屬性的 <provider> 元素:

android:name="com.example.android.datasync.provider.StubProvider"
指定實作虛設常式內容供應器的類別完整名稱。
android:authorities="com.example.android.datasync.provider"
可識別虛設常式內容供應器的 URI 授權。將此值設為您應用程式的 含有「.provider」字串的套件名稱。即使您宣告 虛設常式供應商傳送至系統,並未嘗試存取供應器本身。
android:exported="false"
決定其他應用程式是否能存取內容供應器。適合存根內容 提供者,請將值設為 false,因為您不需要允許其他應用程式查看。 。這個值不會影響同步轉換介面架構之間的互動 和內容供應者
android:syncable="true"
設定標記,以指出供應商可以同步。如果您將這個標記設為 true,您不必在程式碼中呼叫 setIsSyncable()。這個標記可讓同步轉換介面架構建立資料 傳輸作業,但只有在您明確執行時才會轉移。

下列程式碼片段說明如何新增 應用程式資訊清單中的 <provider> 元素:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.android.network.sync.BasicSyncAdapter"
    android:versionCode="1"
    android:versionName="1.0" >
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
    ...
    <provider
        android:name="com.example.android.datasync.provider.StubProvider"
        android:authorities="com.example.android.datasync.provider"
        android:exported="false"
        android:syncable="true"/>
    ...
    </application>
</manifest>

現在,您已建立同步轉換介面架構所需的依附元件,您可以 然後建立封裝資料移轉程式碼的元件。這個元件稱為 同步處理轉換介面下一堂課將說明如何將此元件新增至應用程式。