Stub-Inhaltsanbieter erstellen

Der Synchronisierungsadapter ist darauf ausgelegt, mit Gerätedaten zu arbeiten, die vom flexiblen und hochsicheres Framework für Contentanbieter. Aus diesem Grund erwartet das Framework des Synchronisierungsadapters dass eine App, die das Framework verwendet, bereits einen Contentanbieter für ihre lokalen Daten definiert hat. Wenn das Framework des Sync-Adapters versucht, Ihren Synchronisierungsadapter auszuführen, und Ihre App keinen stürzt Ihr Synchronisierungsadapter ab.

Wenn Sie eine neue App entwickeln, die Daten von einem Server auf das Gerät überträgt, sollten Sie sollten Sie die lokalen Daten bei einem Contentanbieter speichern. Neben ihrer Bedeutung für Synchronisierungsadapter bieten Content-Provider eine Vielzahl von Sicherheitsvorteilen für die Datenspeicherung auf Android-Systemen. Weitere Informationen zum Erstellen von Inhalten finden Sie unter Contentanbieter erstellen.

Wenn Sie lokale Daten jedoch bereits in einer anderen Form speichern, können Sie trotzdem eine Synchronisierung verwenden, Adapter für die Datenübertragung. Um die Framework-Anforderung des Synchronisierungsadapters für eine einen Stub-Contentanbieter zu Ihrer App hinzufügen. Ein Stub-Anbieter implementiert die Content Provider-Klasse, aber alle erforderlichen Methoden geben null oder 0 zurück. Wenn Sie einen Stub-Anbieter hinzufügen, können Sie dann einen Synchronisierungsadapter verwenden, um Daten aus einem beliebigen Speicher zu übertragen. Mechanismus Ihrer Wahl.

Wenn Sie bereits einen Contentanbieter in Ihrer App haben, benötigen Sie keinen Stub-Contentanbieter. In diesem Fall können Sie diese Lektion überspringen und mit der Lektion fortfahren. Synchronisierungsadapter erstellen Wenn Sie noch kein Content-Anbieter zu erstellen, erfahren Sie in dieser Lektion, wie Sie einen Stub-Content-Anbieter hinzufügen, Verbinden Sie den Synchronisierungsadapter mit dem Framework.

Anbieter von Stub-Content hinzufügen

Erweitern Sie die Klasse, um einen Stub-Content-Anbieter für Ihre App zu erstellen. ContentProvider und führen einen Stub-out für die erforderlichen Methoden durch. Die folgenden zeigt Ihnen, wie Sie den Stub-Anbieter erstellen:

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

Anbieter im Manifest deklarieren

Das Framework für den Synchronisierungsadapter überprüft, ob Ihre Anwendung einen Contentanbieter hat, indem das App hat in ihrem App-Manifest einen Anbieter deklariert. So deklarieren Sie den Stub-Anbieter in der Manifestdatei ein <provider>-Element mit den folgenden Attributen hinzu:

android:name="com.example.android.datasync.provider.StubProvider"
Gibt den voll qualifizierten Namen der Klasse an, die den Stub-Inhaltsanbieter implementiert.
android:authorities="com.example.android.datasync.provider"
Eine URI-Zertifizierungsstelle, die den Anbieter des Stub-Inhalts identifiziert. Legen Sie diesen Wert als Wert für Ihre App fest. Paketname mit der Zeichenfolge „.provider“ angehängt wird. Auch wenn Sie Ihre eigenen nicht versucht, auf den Anbieter selbst zuzugreifen.
android:exported="false"
Legt fest, ob andere Apps auf den Contentanbieter zugreifen können. Für deinen Stub-Inhalt legen Sie den Wert auf false fest, da Sie anderen Apps nicht erlauben müssen, und den Anbieter. Dieser Wert hat keinen Einfluss auf die Interaktion zwischen dem Framework des Synchronisierungsadapters und den Contentanbieter.
android:syncable="true"
Legt ein Flag fest, das angibt, dass der Anbieter synchronisierbar ist. Wenn Sie dieses Flag auf true, du musst setIsSyncable() nicht über deinen Code anrufen. Mit diesem Flag kann das Framework des Synchronisierungsadapters Daten Übertragungen mit dem Contentanbieter erfolgen, aber nur, wenn Sie dies ausdrücklich tun.

Das folgende Snippet zeigt Ihnen, wie Sie den <provider>-Element zum App-Manifest hinzu:

<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>

Nachdem Sie nun die für das Synchronisierungsadapter-Framework erforderlichen Abhängigkeiten erstellt haben, können Sie Erstellen Sie die Komponente, die Ihren Datenübertragungscode einschließt. Diese Komponente wird als Sync Adapter. In der nächsten Lektion erfahren Sie, wie Sie diese Komponente zu Ihrer App hinzufügen.