7

मैं अपने एंड्रॉइड एप्लिकेशन में साझा किए गए शेयरों को बैकअप कैसे ले सकता हूं, विशेष रूप से पीछे की संगतता बनाए रखने के लिए प्रतिबिंब का उपयोग करके अपना होमवर्क कर रहा हूं। कम से कम मैं कोशिश कर रहा हूँ। दुर्भाग्य से, मेरी कोड में से कोई भी वास्तव में एक बैकअप बनाने समाप्त होता है! इस एमुलेटर पर आदेशों bmgr एडीबी के लिए मजबूर कर के रूप में समझाया here भी शामिल है। इसलिए मैं अगर समुदाय शायद मुझे बाहर मदद कर सकता है और इस प्रक्रिया में कुछ बेहतर प्रलेखन के साथ आने सोच रहा हूँ?एंड्रॉइड शेयरधारक बैकअप कार्य नहीं कर रहे

मेरा कोड यहां है। इसे दूसरों के लिए जितना संभव हो उतना सामान्य रखने के लिए, मैं अपने आवेदन एंडी को com.example.andy के पैकेज नाम के साथ बस कॉल करूँगा।

एंड्रॉयड प्रकट (अंश)

<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

नोट: /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

package com.example.andy; 

import android.app.backup.BackupManager; 
import android.content.Context; 

public class BackupAgentWrapper { 

    private BackupManager wrappedInstance; 

    static { 

     try { 

      Class.forName("android.app.backup.BackupManager"); 
     } 
     catch (Exception e) { 

      throw new RuntimeException(e); 
     } 
    } 

    public static void checkAvailable() {} 

    public void dataChanged() { 

     wrappedInstance.dataChanged(); 
    } 

    public BackupAgentWrapper(Context ctx) { 

     wrappedInstance = new BackupManager(ctx); 
    } 
} 

और आखिरकार, रन-टाइम के दौरान बैकअप शुरू करने के लिए आदेश। अपने आवेदन में, यह कोड अपने आवेदन करने के लिए एक वर्ग उपलब्ध नहीं है (मुख्य गतिविधि), जो निर्माण पर एक संदर्भ के रूप में इस पारित हो जाता है और उसके बाद निजी चर mContext में संग्रहीत से चलाया जाता है।

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

संक्षेप में, उपरोक्त समारोह है और न ही वास्तव में बैकअप किसी भी डेटा नीचे दिए गए आदेशों:

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

उत्तर

5

आपका मुख्य बुला गतिविधि (पहले एक आप अपने ऐप्लिकेशन में शुरू होता है) में, आप BackupManager का दृष्टांत करने की जरूरत है :

BackupManager mBackupManager = new BackupManager(getApplicationContext()); 

यह बैकअप फ़ाइल को बैकअप फ़ाइल देखने और लोड करने के लिए बताएगा।

आपको यह सुनिश्चित करना होगा कि वरीयता फ़ाइल प्रारूप "packagename_preferences" उदाहरण है। andy_preferences। और एक ही नाम जब आप पहली बार अपनी प्राथमिकताएँ बचाया का उपयोग करें। (! बहुत महत्वपूर्ण)

अपनी सेटिंग्स गतिविधि apply() या commit() के माध्यम से बचाता है के बाद, आप BackupManager बताने के लिए है कि कुछ बदल गया है की जरूरत है ताकि तुरंत बाद में शामिल हैं:

mBackupManger.dataChanged(); 
संबंधित मुद्दे