পুনরায় ইনস্টল করার পরে এবং অ্যান্ড্রয়েডব্যাকআপ = অ্যান্ড্রয়েড অটো ব্যাকআপ ব্যবহার করে সত্যের সাথে ভাগ করা পছন্দগুলি থেকে মানগুলি পুনরুদ্ধার করা


9

আমি অ্যাপটি পুনরায় ইনস্টল করার পরে এবং অ্যাকডব্যাকআপ = সত্য হওয়ার পরে ভাগ করা পছন্দগুলি থেকে মানগুলি (একটি অ্যান্ড্রয়েড 9.0 ডিভাইসে) পুনরুদ্ধার করতে আমার সমস্যা হচ্ছে।

<manifest ... >
    ...
    <application android:allowBackup="true" ... >
        ...
    </application>
</manifest>

এটি অনুসারে: https://developer.android.com/guide/topics/data/autobackup

ভাগ করা পছন্দগুলি পুনরুদ্ধার করা উচিত?

    SharedPreferences prefs = getSharedPreferences("TEST", MODE_PRIVATE);
    String name = prefs.getString("name", "No name defined");//"No name defined" is the default value.
    int idName = prefs.getInt("idName", 0); //0 is the default value.

    SharedPreferences.Editor editor = getSharedPreferences("TEST", MODE_PRIVATE).edit();
    editor.putString("name", "Elena");
    editor.putInt("idName", 12);
    editor.apply();
  • আমি আমার জিমেইল অ্যাকাউন্টে (এমুলেটর) ফোনে (এপিআই 27) লগ ইন করেছি এবং ড্রাইভ অ্যাপ, ব্যাকআপস, অ্যাপ্লিকেশন-ডেটাতে যাওয়ার সময় আমি 18 টি অ্যাপ্লিকেশন যেমন ইউটিউব, জিমেইল ইত্যাদি এবং আমার নিজের অ্যাপ্লিকেশনটি দেখতে পাই।
  • আমি যখন "সেটিংস> সিস্টেম> ব্যাকআপ" এ যাই তখন আমি একই অ্যাপ্লিকেশনগুলি এবং আমার নিজের অ্যাপ্লিকেশনটি দেখতে পাই। আমি অ্যাপ লোড করি, শেয়ারডেফেস কোডটি কার্যকর করা হয়। আমি অ্যাপটি বন্ধ করে দিয়েছি এবং এটিকে স্মৃতি থেকে সরিয়ে দিচ্ছি। এবং তারপরে আমি "এখনই ব্যাকআপ" বোতাম টিপুন:

এখানে চিত্র বর্ণনা লিখুন

যাচাই করতে আমি তালিকায় আমার অ্যাপটি দেখতে পাচ্ছি এবং এটি 0 মিনিট আগে ব্যাকআপ পেয়েছে:

এখানে চিত্র বর্ণনা লিখুন

তারপরে আমি অ্যাপটিকে সরিয়ে ফেলা এবং পুনরায় ইনস্টল করব এবং 2 টি মান (এলেনা এবং 12) থাকবে বলে আশা করি। তবে সেগুলি মুছে ফেলা হয়েছে ...

কমান্ড লাইনের মাধ্যমেও আমি একই চেষ্টা করেছি, তবে কাজ করছি না: https://developer.android.com/guide/topics/data/testingbackup.html# পূর্ববর্তীকরণ

adb shell
dreamlte:/ $ bmgr enabled
Backup Manager currently enabled
dreamlte:/ $ bmgr list transports
    android/com.android.internal.backup.LocalTransport
    com.google.android.gms/.backup.migrate.service.D2dTransport
* com.google.android.gms/.backup.BackupTransportService
dreamlte:/ $ bmgr backupnow my.package.name
Running incremental backup for 1 requested packages.
Package @pm@ with result: Success
Package nl.dagelijkswoord.android with progress: 1536/309248
Package nl.dagelijkswoord.android with result: Success
Backup finished with result: Success

dreamlte:/ $ dumpsys backup
Backup Manager is enabled / provisioned / not pending init
Auto-restore is disabled
No backups running
Last backup pass started: 1573804513565 (now = 1573806675410)
  next scheduled: 1573819001046
...
1573806051616 : my.package.name

dreamlte:/ $ bmgr restore 1573806051616 my.package.name                                                                                                            
No matching restore set token.  Available sets:
  35e84268c94b7d9c : SM-G950F
  3a8e32898034f8af : SM-G950F
  3e2610c4ea45fb96 : Nexus 5X
done

dreamlte:/ $ bmgr restore 35e84268c94b7d9c my.package.name                                                                                                         
Scheduling restore: SM-G950F
restoreStarting: 1 packages
onUpdate: 0 = my.package.name 
restoreFinished: 0
done
  1. অ্যাপ সরান
  2. অ্যাপ্লিকেশন পুনরায় ইনস্টল করুন এবং ভাগ করা পছন্দসমূহ মানগুলি এখনও আছে কিনা তা পরীক্ষা করুন।
  3. মানগুলি চলে গেছে ...

আচরণটি স্যামসাং ক্লাউডের সাথে স্যামসাং ডিভাইসের ক্ষেত্রেও পৃথক বলে মনে হয়, তবে আপাতত স্টক অ্যান্ড্রয়েডের দিকে নজর দেওয়া উচিত।

হালনাগাদ:

এটি আর কাজ করছে না কারণ আমি বিল্ড.gradle এ সংস্করণটি ডাউনগ্রেড করেছি:

build.gradle:
versionCode 70
versionName "1.6.1"

এমনকি android:restoreAnyVersion="true"এতে AndroidManifestএটি তখনই কাজ করবে যখন সংস্করণটি ডাউনগ্রেড করা হয়নি।



হ্যালো @ প্রেভেনএসপি আমি অ্যান্ড্রয়েড অটো ব্যাকআপ ব্যবহার করতে চাই পুরানো কী / মান স্টোর সংস্করণটি নয়।
জিম ক্লারমন্টস

উত্তর:


1

ডিফল্ট অ্যান্ড্রয়েড সিস্টেমের ব্যাকআপের মাধ্যমে সমস্ত ডিফল্ট ডেটা যদি ডিভাইস কোনও ওয়াই-ফাই নেটওয়ার্কের সাথে সংযুক্ত থাকে (যদি ডিভাইস ব্যবহারকারী মোবাইল-ডেটা ব্যাকআপগুলি বেছে না নেয়), অ্যাপ্লিকেশনটি পুনরায় ইনস্টল করার চেষ্টা করুন এবং সাধারণত অ্যান্ড্রয়েড সিস্টেম সিঙ্কের সাথে সংযুক্ত হন যদি কোনও পরিবর্তন হয় তবে প্রতি 24 ঘন্টা একবারে ডেটা। আপনি এটির মতো ব্যাকআপের জন্য নিজের বিধিগুলি নির্দিষ্ট করার চেষ্টা করতে পারেন।

`<application 
 android:fullBackupContent="@xml/backup_rules">
</application>`

এবং একটি এক্সএমএল ফাইল তৈরি করে এটি রেজ / এক্সএমএল ডিরেক্টরিতে রেখে দিন। ফাইলের অভ্যন্তরে, উপাদান এবং উপাদানগুলির সাথে বিধি যুক্ত করুন। নিম্নলিখিত নমুনা ডিভাইস.এক্সএমএল বাদে সমস্ত ভাগ করা পছন্দগুলিকে ব্যাক আপ করে।

`<?xml version="1.0" encoding="utf-8"?>
<full-backup-content>
<include domain="sharedpref" path="."/>
<exclude domain="sharedpref" path="device.xml"/>
</full-backup-content>`

আমি আশা করি এটি আপনার সমস্যা সমাধান করবে।


আমি কেবল শেয়ার্ডপ্রেফগুলি সংরক্ষণ করতে চাই, কোনও এক্সএমএল নেই।
জিম ক্লারমন্টস

উপরের কোডটি অ্যান্ড্রয়েড সিস্টেমের ব্যবহারকারীর ড্রাইভে ডেটা সংরক্ষণ করার নিয়ম, এটি এক্সএমএল হিসাবে সংরক্ষণ করা হবে না, অন্তর্ভুক্ত এবং বাদ দিন ট্যাগটি সিস্টেমে অবহিত করুন যে কোন ডেটা সিঙ্ক করতে হবে এবং সংরক্ষণ করতে হবে এবং কোন ডেটা সিঙ্ক অপারেশনে বাদ দিতে হবে ।
আশীষ শ্রীবাস্তব

আমি বুঝতে পারছি কিন্তু এটা কি অপ্রয়োজনীয় মনে হয়?
জিম ক্লারমন্টস

1
আমি ভাবি না, অ্যান্ড্রয়েড সিস্টেম বুটটি সম্পূর্ণ হওয়ার কারণে এটির অযৌক্তিক বিন্যাসটি ডিফল্টরূপে ম্যানিফেস্টে কনফিগার করা সমস্ত অ্যাপ্লিকেশন নিয়মগুলি পরীক্ষা করে এটি অনুমতিব্যাকআপ সত্য হওয়ার সময় এটিও সিঙ্ক হয়, তবে আমরা যখন নিয়মগুলি লিখি তখন অ্যান্ড্রয়েড সিস্টেম স্থানীয় নিয়মে রক্ষা করে এবং প্যাকেজের নামের সাথে যুক্ত করে।
আশীষ শ্রীবাস্তব

আমি উপরের এক্সএমএল কোডটি যুক্ত করেছি তবে এটি কোনও পার্থক্য করে না।
জিম ক্লারমন্টস

1

ডেটা ব্যাক ডকুমেন্ট অনুসারে, আপনাকে SharedPreferencesBackupHelper তৈরি করতে হবে এবং SharedPreferences ব্যাক আপ অর্জনের জন্য এই পদক্ষেপগুলি অনুসরণ করতে হবে আপনার ক্ষেত্রে ব্যাকআপ পরিষেবাগুলিও নিবন্ধিত করতে হবে


হ্যালো, আমি অ্যান্ড্রয়েড ব্যাকআপ পরিষেবা নয়, অ্যান্ড্রয়েড অটো ব্যাকআপের কথা বলছি।
জিম ক্লারমন্টস

এটি শুধুমাত্র অটো ব্যাকআপের সাথে সম্পর্কিত। নমুনা জন্য আপনাকে অনুসরণ করতে পারেন এই পদক্ষেপগুলি codelabs.developers.google.com/codelabs/android-backup-codelab/...
Damodhar

1

এই পদ্ধতি আপনার জন্য কাজ করবে। কোনও ব্যবহারকারীর ভাগ করা পছন্দগুলি ব্যাক আপ এবং পুনরুদ্ধার করার চেষ্টা করুন। এটি কোনও বাহ্যিক স্টোরেজ বা ডিভাইসে আপনার পছন্দটিকে ব্যাকআপ করবে।

যখন ব্যবহারকারী অ্যাপ্লিকেশন আনইনস্টল করেন, ব্যবহারকারীর এটিকে ব্যাক আপ নেওয়া উচিত। কিছু যুক্তি যুক্ত করুন যে ফাইলটি যদি বাহ্যিক স্টোরেজ বা ডিভাইসে উপস্থিত থাকে তবে এটি পুনরুদ্ধার করুন।

আপনার পছন্দটিকে ব্যাক আপ করতে নীচের কোডটি ব্যবহার করুন।

public static void backupUserPrefs(Context context) {
    final File prefsFile = new File(context.getFilesDir(), "../shared_prefs/" + context.getPackageName() + "_preferences.xml");
    final File backupFile = new File(context.getExternalFilesDir(null),
        "preferenceBackup.xml");
    String error = "";

    try {
        FileChannel src = new FileInputStream(prefsFile).getChannel();
        FileChannel dst = new FileOutputStream(backupFile).getChannel();

        dst.transferFrom(src, 0, src.size());

        src.close();
        dst.close();

        Toast toast = Toast.makeText(context, "Backed up user prefs to " + backupFile.getAbsolutePath(), Toast.LENGTH_SHORT);
        toast.show();
        return;
    } catch (FileNotFoundException e) {
        error = e.getMessage();
        e.printStackTrace();
    } catch (IOException e) {
        error = e.getMessage();
        e.printStackTrace();
    }

পছন্দ পুনরুদ্ধার করতে নীচের কোডটি ব্যবহার করুন

public static boolean restoreUserPrefs(Context context) {
    final File backupFile = new File(context.getExternalFilesDir(null),
        "preferenceBackup.xml");
    String error = "";

    try {

        SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);

        Editor editor = sharedPreferences.edit();

        InputStream inputStream = new FileInputStream(backupFile);

        DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder docBuilder = docFactory.newDocumentBuilder();

        Document doc = docBuilder.parse(inputStream);
        Element root = doc.getDocumentElement();

        Node child = root.getFirstChild();
        while (child != null) {
            if (child.getNodeType() == Node.ELEMENT_NODE) {

                Element element = (Element) child;

                String type = element.getNodeName();
                String name = element.getAttribute("name");

                // In my app, all prefs seem to get serialized as either "string" or
                // "boolean" - this will need expanding if yours uses any other types!    
                if (type.equals("string")) {
                    String value = element.getTextContent();
                    editor.putString(name, value);
                } else if (type.equals("boolean")) {
                    String value = element.getAttribute("value");
                    editor.putBoolean(name, value.equals("true"));
                }
            }

            child = child.getNextSibling();

        }

        editor.commit();

        Toast toast = Toast.makeText(context, "Restored user prefs from " + backupFile.getAbsolutePath(), Toast.LENGTH_SHORT);
        toast.show();

        return true;

    } catch (FileNotFoundException e) {
        error = e.getMessage();
        e.printStackTrace();
    } catch (ParserConfigurationException e) {
        error = e.getMessage();
        e.printStackTrace();
    } catch (SAXException e) {
        error = e.getMessage();
        e.printStackTrace();
    } catch (IOException e) {
        error = e.getMessage();
        e.printStackTrace();
    }

    Toast toast = Toast.makeText(context, "Failed to restore user prefs from " + backupFile.getAbsolutePath() + " - " + error, Toast.LENGTH_SHORT);
    toast.show();

    return false;
}


    Toast toast = Toast.makeText(context, "Failed to Back up user prefs to " + backupFile.getAbsolutePath() + " - " + error, Toast.LENGTH_SHORT);
    toast.show();

}

তারপরে এই অগ্রাধিকারটি ধরে রাখার আগে আপনার অ্যাপ্লিকেশনটি পুনরায় চালু করুন

if (restoreUserPrefs(context)) {
    // Restart              
    AlarmManager alm = (AlarmManager) context.getSystemService(
    Context.ALARM_SERVICE);
    alm.set(AlarmManager.RTC,
    System.currentTimeMillis() + 1000, PendingIntent.getActivity(context, 0,
    new Intent(context, MainActivityName.class), 0));
    android.os.Process.sendSignal(android.os.Process.myPid(),
    android.os.Process.SIGNAL_KILL);
}

হ্যালো, সমস্যাটি হ'ল বিল্ড.gradle এ আমার সংস্করণকোডটি ডাউনগ্রেড করা হলে এটি ব্যাকআপ হয় না। সে কারণেই এটি কাজ করছিল না। কেবল একটি সরল স্ট্রিং সঞ্চয় করার জন্য এই বেশি কোডের প্রয়োজন হয় না।
জিম ক্লারমন্টস

আমার জন্য কাজ করেছে ... আমার দিন বাঁচিয়েছে ... ধন্যবাদ
অজানা

0

কনসোল বার্তায় যেমন দেখানো হয়েছে আপনি অটো-রিস্টোর সেটিংস চালু করেননি। আপনার সিস্টেম সেটিংসে গিয়ে এটি চালু করা উচিত। এর পরে, পুনরুদ্ধার কাজ করতে পারে।

সেটিংস -> ব্যাকআপ -> স্বয়ংক্রিয় পুনরুদ্ধার।

বিটিডাব্লু, আপনি যে টোকেনটি ব্যবহার করেছেন তা সঠিক নয়। 1573806051616 টোকেনের পরিবর্তে একটি টাইমস্ট্যাম্প। টোকেনটি নীচে প্রদর্শিত হবে:

Ancestral packages: none
Ever backed up: XXXXXXXXXXXXXXXX

এখানে, XXXXXXXXXXXXXXXXচিহ্নটি হওয়া উচিত।


-1

পুনরুদ্ধারের পরীক্ষা করার জন্য, আপনাকে আপনার অ্যাপ্লিকেশনটি সরিয়ে না দিয়ে নীচের কমান্ডটি চালানো দরকার। পুনরুদ্ধার কমান্ড অ্যাপটিকে থামাতে বাধ্য করবে, এর ডেটা মুছে ফেলবে এবং পুনরুদ্ধারটি সম্পাদন করবে তাই অ্যান্ড্রয়েড অটব্যাকআপের কার্যকারিতা অনুকরণ করে:

bmgr restore <TOKEN> <PACKAGE>

TOKENlogcatব্যাকআপ কমান্ড চালানোর সময় বা কমান্ড থেকে কমান্ড থেকে পুনরুদ্ধার করা হয় dumpsys backup। এছাড়াও আপনি dumpsys backupব্যাকআপ তৈরি হয়েছে তা যাচাই করতে পরীক্ষা করতে পারেন।

এখানে আরও তথ্য: https://developer.android.com/guide/topics/data/testingbackup.html# টেস্টিংস্ট্রিস্টোর


আমি এটি চেষ্টা করেছিলাম এবং উত্তরটি সম্পাদনা করেছি তবে অংশীদারি মানগুলি এখনও চলে গেছে।
জিম ক্লারমন্টস

ব্যাকআপের জন্য কিছু পূর্ব শর্ত পূরণ করতে হবে। নীচের লিঙ্কটি দয়া করে চেক করুন :: ব্লগ.দেভনক্স.আইও /
টিকু

পূর্বশর্তগুলি পূরণ হয়েছে এবং এটি কার্যকর হচ্ছে না।
জিম ক্লারমন্টস

-1

এটি করার একটি উপায় নিম্নরূপ, (দয়া করে নোট করুন, এটি সর্বোত্তম উপায় নাও হতে পারে, তবে এটি কার্যকর হয়!)

অ্যাপটি আনইনস্টল করার আগে এটিকে আবার নিতে হবে। কিছু যুক্তি যুক্ত করুন যে ফাইলটি যদি বাহ্যিক সঞ্চয়স্থানে উপস্থিত থাকে তবে এটি পুনরুদ্ধার করুন।

ভাগ করা পছন্দসই ক্লাসে সঞ্চিত পছন্দগুলি /data/data//shared_prefs/_preferences.xml এ সংরক্ষণ করা হয় - ব্যাক আপ নেওয়া সহজ, আপনার কেবলমাত্র এই ফাইলটির সামগ্রী বাইরের স্টোরেজে অনুলিপি করতে হবে:

public static void backupUserPrefs(Context context) {
final File prefsFile = new File(context.getFilesDir(), "../shared_prefs/" + context.getPackageName() + "_preferences.xml");
final File backupFile = new File(context.getExternalFilesDir(null),
    "preferenceBackup.xml");
String error = "";

try {
    FileChannel src = new FileInputStream(prefsFile).getChannel();
    FileChannel dst = new FileOutputStream(backupFile).getChannel();

    dst.transferFrom(src, 0, src.size());

    src.close();
    dst.close();

    Toast toast = Toast.makeText(context, "Backed up user prefs to " + backupFile.getAbsolutePath(), Toast.LENGTH_SHORT);
    toast.show();
    return;
} catch (FileNotFoundException e) {
    error = e.getMessage();
    e.printStackTrace();
} catch (IOException e) {
    error = e.getMessage();
    e.printStackTrace();
}

পছন্দ পুনরুদ্ধার করতে নিম্নলিখিত কোড ব্যবহার করুন

তবে পুনরুদ্ধার করা আরও একটি চ্যালেঞ্জ সরবরাহ করে, যেহেতু ভাগ করা_পরিচয় ফাইলটি সরাসরি অ্যাপ্লিকেশন দ্বারা লিখিত হয় না এবং শেরেডপ্রেফ শ্রেণি সরাসরি এর কার্যকারিতাটি এক্সএমএল থেকে সিরিয়ালে প্রকাশ করে না। পরিবর্তে আপনাকে নিজের এক্সএমএলকে বিশ্লেষণ করতে হবে এবং মানগুলি আবার পিছনে যেতে হবে fully ধন্যবাদ XML ফাইলটির একটি সরল কাঠামো রয়েছে, সুতরাং উপাদানগুলির উপর লুপ করা এবং এগুলি পছন্দগুলিতে ফিরিয়ে আনা সহজ।

if (restoreUserPrefs(context)) {
// Restart              
AlarmManager alm = (AlarmManager) context.getSystemService(
Context.ALARM_SERVICE);
alm.set(AlarmManager.RTC,
System.currentTimeMillis() + 1000, PendingIntent.getActivity(context, 0,
new Intent(context, MainActivityName.class), 0));
android.os.Process.sendSignal(android.os.Process.myPid(),
android.os.Process.SIGNAL_KILL);
}

দ্রষ্টব্য : বাহ্যিক স্টোরেজ লিখন এবং পড়ার অনুমতি প্রয়োজন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.