7

Android uygulamasında SharedPreferences'ı nasıl yedekleyeceğim konusunda ödevlerimi yapıyorum, özellikle de geriye dönük uyumluluğu korumak için yansıma. En azından deniyorum. Maalesef, kodumun hiçbiri aslında bir yedek oluşturuyor! Bu, here açıklandığı gibi emülatörde adb bmgr komutlarını zorlamayı içerir. Bu yüzden toplumun belki de bana yardımcı olabileceğini ve bu süreçte daha iyi belgelere sahip olup olmadığını merak ediyorum.Android SharedPreferences Yedekleme Çalışmıyor

İşte kodum. Bunu diğerleri için olabildiğince genel olarak tutmak için, Andy numaralı uygulamayı com.example.andy paket adıyla arayacağım.

Android Manifest (alıntı)

<application 
    ... 
    android:backupAgent="com.example.andy.backupHelper" 
    android:restoreAnyVersion="true"> 
    ... 
    <meta-data 
     android:name="com.google.android.backup.api_key" 
     android:value="GIVEN KEY GOES HERE" /> 
    ... 

backupHelper.java

Not: /data/data/com.example.andy/shared_prefs/com.example.andy_preferences.xml

package com.example.andy; 

import android.app.backup.BackupAgentHelper; 
import android.app.backup.SharedPreferencesBackupHelper; 

public class BlinkyBackup extends BackupAgentHelper { 

    static final String PREFS_FILE = "andy_preferences"; 
    static final String BACKUP_KEY = "AndyPreferencesBackup"; 

    public void onCreate() { 

     SharedPreferencesBackupHelper backupHelper = new SharedPreferencesBackupHelper(this, PREFS_FILE); 
     addHelper(BACKUP_KEY, backupHelper); 
    } 
} 

BackupAgentWrapper

Son olarak, çalışma zamanı sırasında bir yedekleme başlatma komutları. Benim uygulamada, bu kod benim uygulama için bir ana sınıftan çalıştırılır (ana aktivite değil), geçirilen bu bir içerik oluşturma ve sonra mContext özel değişkeninde saklanır. Ana arama faaliyeti (uygulamanızda başlar birincisi) olarak

$ adb shell bmgr enable true 
$ adb shell bmgr backup com.example.andy 
$ adb shell bmgr run 

cevap

5

, sen BackupManager örneğini gerekir:

private void backupData() { 

    boolean backupAgentAvailable = false; 

    try { 

     BackupAgentWrapper.checkAvailable(); 
     backupAgentAvailable = true; 
    } 
    catch (Throwable t) { 

     // really nothing to do 
    } 

    if(backupAgentAvailable) { 

     BackupAgentWrapper backupWrapper = new BackupAgentWrapper(mContext); 
     backupWrapper.dataChanged(); 
    } 
} 

yukarıdaki fonksiyon ne de aslında yedekleme herhangi verilerinin altındaki komutlar ne Özetlemek gerekirse :

BackupManager mBackupManager = new BackupManager(getApplicationContext()); 

Bu, backupmanager'a yedekleme dosyasını aramasını ve yüklemesini söyleyecektir.

Tercihler dosyasının "packagename_preferences" biçiminde olduğundan emin olmanız gerekir. andy_preferences. Tercihlerinizi ilk kaydettiğinizde de aynı adı kullanın.

mBackupManger.dataChanged(); 
: (! Çok önemli) etkinliği apply() veya commit() aracılığıyla kaydeder ayarları sonra

, bunu hemen sonra şunlardır şey değişti BackupManager söylememe gerek