2011-08-30 2 views
1

1.6에 대한 이전 버전과의 호환성을 포함하여 설명서에 따라 BackupAgentHelper을 구현하여 모두 SharedPreferences을 백업했습니다. 에뮬레이터 안드로이드 2.2에서 테스트 할 때 그리고 USB를 통해 안드로이드 2.3.3을 실행하는 내 장치에서 실행할 때 잘 작동합니다. 이 두 가지 테스트 케이스 모두에서 나는 adb shell bmgr run을 발행하여 백업을 트리거합니다.Android 마켓에서 다시 설치할 때 BackupAgent를 작동시키지 못함

그러나 Android 마켓에서 내 앱을 다시 설치할 때 모두 SharedPreferences은 없어졌습니다. 설명서에 dataChanged()이 호출 된 후 "백업 관리자는 나중에 적절한 시간에 백업 에이전트의 onBackup() 메소드를 호출합니다"라고 표시됩니다. 좋아,하지만 누가 실제로 백업을 할 시스템을 만드는 사람을 알고 있습니까? 나는 이것이 내 사건에서 일어나지 않는다고 생각한다.

설명서에 "장치를 사용하는 경우 시스템 설정을 열고 개인 정보를 선택한 다음 내 데이터 백업 및 자동 복원을 활성화하십시오."라는 메시지가 표시됩니다. 그 옵션은 내 장치 (SE Xperia Mini)에 없습니다. 이 옵션은 항상 활성화되어 있고 끌 수는 없다고 추측 할 수 있습니다. 저는 스웨덴에서 Telia를 운영자로 사용하고 있습니다 (문제가있는 경우).

누구든지 시장에서 다시 설치할 때 백업이 작동하지 않지만 USB를 통해 장치에서 에뮬레이터를 사용할 때 완벽하게 작동하는 이유를 알 수 있습니까?

+0

옵션이없는 것은 백업이 지원되지 않는다는 사실을 실제로 반증하는 것이라고 생각합니다. HTC Desire에서는 공식 ROM에 백업 옵션이 표시되지 않고 백업이 작동하지 않지만 Cyanogenmod를 사용하면 옵션이 표시됩니다. –

답변

0

시장을 사용할 때 기능을 테스트하기위한 이전의 시도는 모두 (상대적으로 빠른?) 순서로 수행했습니다. SharedPreferences의 일부 매개 변수를 변경 한 다음 내 전화를 다시 시작한 다음 종료가 보류중인 백업 동기화 작업을 트리거한다고 생각하여 내 앱을 제거했습니다. 불행히도 백업 서버와의 동기화가 실행되지 않아 SharedPreferences가 손실되었습니다.

이제 유익한 정보를 얻으십시오. 일부 SharedPreferences를 변경하고 내 앱을 제거하기 전에 전화를 몇 시간 동안 기다리십시오. 다음 번에 Market에서 설치했을 때 SharedPreferences가 클라우드 백업에서 복원되었습니다! 그래서 해결책은 "미래의 적절한 시간"을 실현하는 것입니다. 나는이 동작을 좋아하지 않지만 dataChanged()가 호출 될 때마다 서버에 동기화 할 수 없다는 것을 인식하고 받아 들일 수 있습니다.

개인 정보 보호 아래의 "내 데이터 백업 및 자동 복원"옵션이 장치에 없더라도 BackupAgent를 사용하여 백업을 수행합니다. 그것을하기 위해선 얼마되지 않은 시간이 필요합니다.

2

개인 정보 설정의 백업 및 복원 설정은 공급 업체에 따라 다릅니다. Privacy class에서 찍은의 코드를 참조하십시오

// Vendor specific 
    if (getPackageManager().resolveContentProvider(GSETTINGS_PROVIDER, 0) == null) { 
     screen.removePreference(findPreference(BACKUP_CATEGORY)); 
    } 

소니 에릭슨은 그 내용과 조건문을 교체하고는 무조건이 환경 설정을 제거합니다.

이 코드는 아파치 라이선스에 해당되므로 소스 코드를 제공 할 필요가 없습니다. 이 목적을 위해 리버스 엔지니어링은 내가 믿는 법적 나라에 살고 있다면 당신이 할 수있는 (나는 변호사가 아니에요) :

  1. 풀 설정 패키지를 장치에서 :

    adb pull /system/app/Settings.apk Settings.apk 
    
  2. 디코드 설정.apktool 사용하여 APK는 :

    apktool d -s Settings.apk 
    
  3. 새로 만든 설정 디렉토리에서 당신은 classes.dex를 찾을 수 있습니다. Smali를 사용하여 컴파일하기 (code.google.com에서 찾을 수 있습니다) :

    baksmali classes.dex -o classes 
    
  4. 마지막으로 당신이 클래스/COM/안드로이드/설정에 관심이/PrivacySettings.smali

을 Android Emulator에서 가져온 Settings.apk를 사용하여 동일한 작업을 수행하고이 두 파일을 비교할 수 있습니다.

나는 엑스 페리아 미니도 (SK17i) 프로하고 환경 설정 중 하나가없는있다.