2011-01-11 20 views
7

मैंने Data Backup पर वर्णित बैकअपएजेंट को कार्यान्वित किया है, एक एपीआई कुंजी पंजीकृत की है और मेरे मैनिफेस्ट में बैकअपएजेंट घोषित किया है। बैकअप भाग का काम काफी अच्छा है, मुझे लगता है; जब मैं कमांड लाइन में adb shell bmgr run चलाने के लिए, निम्न उत्पादन LogCat में प्रकट होता है:बैकअपएजेंट: "पैकेज को पुनर्स्थापित करने में असमर्थ ..."

01-11 22:23:09.002: DEBUG/PerformBackupThread(97): starting agent for backup of BackupRequest{app=ApplicationInfo{4547c5b8 com.meins.nightclock} full=false} 
01-11 22:23:09.002: DEBUG/BackupManagerService(97): awaiting agent for ApplicationInfo{4547c5b8 com.meins.nightclock} 
01-11 22:23:09.013: DEBUG/BackupManagerService(97): agentConnected pkg=com.meins.nightclock [email protected] 
01-11 22:23:09.032: DEBUG/BackupHelperDispatcher(9122): handling existing helper 'alarms' [email protected] 
01-11 22:23:09.032: DEBUG/BackupHelperDispatcher(9122): handling existing helper 'prefs' [email protected] 
01-11 22:23:09.032: VERBOSE/LocalTransport(97): performBackup() pkg=com.meins.nightclock 
01-11 22:23:09.032: VERBOSE/LocalTransport(97): Got change set key=alarms:alarms size=16 key64=YWxhcm1zOmFsYXJtcw== 
01-11 22:23:09.042: VERBOSE/LocalTransport(97): data size 16 
01-11 22:23:09.062: VERBOSE/LocalTransport(97): Got change set key=prefs:com.meins.nightclock_preferences size=265 key64=cHJlZnM6Y29tLm1laW5zLm5pZ2h0Y2xvY2tfcHJlZmVyZW5jZXM= 
01-11 22:23:09.072: VERBOSE/LocalTransport(97): data size 265 
01-11 22:23:09.072: VERBOSE/LocalTransport(97): finishBackup() 

दूसरी तरफ भाग बहाल, सब पर काम नहीं करता है onReceive() पद्धति पर नहीं बुलाया जाता है। मेरे एप्लिकेशन, केवल उत्पादन जो (?) BackupAgent का उल्लेख कर सकते पुनः स्थापित

01-11 22:14:01.042: DEBUG/vending(7426): [100] LocalAssetCache.updateOnePackage(): No local info for com.meins.nightclock 

जब मैं adb shell bmgr restore com.meins.nightclock चलाने यह बस कहा गया Unable to restore package com.meins.nightclock है। ,

<application 
    android:icon="@drawable/icon" 
    android:label="@string/app_name" 
    android:debuggable="true" 
    android:backupAgent="MyBackupAgent"> 
    <meta-data 
     android:name="com.google.android.backup.api_key" 
     android:value="AEdPqrEAAAAI4MsUOC-[...]" /> 

    ... 

</application> 

क्या किसी को पता है कि क्यों BackupManager है:


मैं प्रासंगिक प्रकट हिस्सा BackupAgentHelper

package com.meins.nightclock; 

import java.io.IOException; 

import android.app.backup.BackupAgentHelper; 
import android.app.backup.BackupDataInput; 
import android.app.backup.BackupDataOutput; 
import android.app.backup.FileBackupHelper; 
import android.app.backup.SharedPreferencesBackupHelper; 
import android.os.ParcelFileDescriptor; 
import android.util.Log; 

public class MyBackupAgent extends BackupAgentHelper { 

    public static final Object[] DATA_LOCK = new Object[0]; 

    private static final String PREFS_BACKUP_KEY = "prefs"; 
    private static final String ALARMS_BACKUP_KEY = "alarms"; 

    private DataLayerAlarms d; 

    @Override 
    public void onBackup(ParcelFileDescriptor oldState, BackupDataOutput data, 
      ParcelFileDescriptor newState) throws IOException { 

     if (d.backup() != 0) 
      return; 

     synchronized (DATA_LOCK) { 
      super.onBackup(oldState, data, newState); 
     } 
    } 

    @Override 
    public void onCreate() { 
     SharedPreferencesBackupHelper preferencesHelper = new SharedPreferencesBackupHelper(this, 
       getPackageName() + "_preferences"); 
     addHelper(PREFS_BACKUP_KEY, preferencesHelper); 

     FileBackupHelper fileHelper = new FileBackupHelper(this, DataLayerAlarms.BACKUP_FILE); 
     addHelper(ALARMS_BACKUP_KEY, fileHelper); 

     d = new DataLayerAlarms(this); 
    } 

    @Override 
    public void onRestore(BackupDataInput data, int appVersionCode, ParcelFileDescriptor newState) 
      throws IOException { 
     Log.d(toString(), "onRestore()"); 
     synchronized (DATA_LOCK) { 
      super.onRestore(data, appVersionCode, newState); 
     } 

     d.restore(); 
    } 

} 

के निम्नलिखित कार्यान्वयन का उपयोग कर रहा पूर्णता की खातिर इस पैकेज को बहाल करने में असमर्थ?

+0

मुझे वही चीज़ मिल रही है। मैंने इसे काम देखा है लेकिन अचानक यह अब काम नहीं कर रहा है। – slott

+1

मुझे भी। यह काम कर रहा था, और अचानक यह काम करना बंद कर दिया। wtf की तरह .. – coolcool1994

उत्तर

3

में, अपने बैकअप वर्ग के नाम से पहले एक बिंदु के रूप में जोड़ने का प्रयास करें:

android:backupAgent=".MyBackupAgent" 

या अगर आपके बैकअप वर्ग अपने जड़ पैकेज में नहीं है, यह करने के लिए पथ जोड़ें:

android:backupAgent=".package.MyBackupAgent" 
0

बदलना android:backupAgent="MyBackupAgent" से android:backupAgent=".MyBackupAgent" मेरे लिए भी काम किया।

+0

मेरे लिए काम नहीं करता है – abh22ishek

0

यह समस्या तब हुई जब मैंने पैकेज नाम बदल दिया, और फिर बाद में अन्य समस्याएं सामने आईं। मुझे पता लगाने में कुछ घंटे लग गए।

तत्काल रन अक्षम करें। यह मेरे लिए चीजों को गड़बड़ कर दिया।

adb shell bmgr list transports 
    android/com.android.internal.backup.LocalTransport 
    * com.google.android.gms/.backup.BackupTransportService 

यकीन BackupAgentHelper पैकेज का नाम और मेटा डेटा पैकेज का नाम एक ही नाम है बनाओ:

चेक परिवहन सूची सुनिश्चित करें कि Google सेट है। नाम विवाद एक समस्या का कारण बन सकता है।

एंड्रॉयड: वर्ग को लागू आवेदन का बैकअप एजेंट, BackupAgent का एक उपवर्ग है के नाम backupAgent। विशेषता मान पूरी तरह योग्य क्लास नाम होना चाहिए (जैसे "com.example.project.MyBackupAgent")। हालांकि, एक शॉर्टेंड के रूप में, यदि नाम का पहला अक्षर एक अवधि है (उदाहरण के लिए, ".MyBackupAgent"), यह तत्व में निर्दिष्ट पैकेज नाम में जोड़ा गया है। कोई डिफ़ॉल्ट नहीं है। नाम निर्दिष्ट किया जाना चाहिए।

संबंधित मुद्दे