Android - الاحتفاظ بالملفات التي أنشأها التطبيق أو حذفها عند إلغاء التثبيت

StackOverflow https://stackoverflow.com/questions/1222269

سؤال

لقد قمت بإنشاء تطبيق يقوم بإنشاء الملفات وتخزينها على sdcard.هل هناك طريقة لربط المجلد بالتطبيق لحذف جميع الملفات عندما يقوم المستخدم بإلغاء التثبيت على جهاز Android؟

هل كانت مفيدة؟

المحلول

ولا توجد طريقة للتطبيق الخاص بك لمعرفة أن يتم إلغاء تثبيت (بدون تعديل النواة). يتم حذف كافة الملفات التي تم إنشاؤها في data/data/your.app.package تلقائيا عند إلغاء الطلب.

وأنا لا أعتقد أن يتم مسح أي شيء من SDCARD. يمكنك أن تفعل اختبار سريع وجدت أن بها.

وثمة نهج آخر يمكن أن يكون لديك تطبيق آخر يتحقق ما إذا تم تثبيت هذا التطبيق أم لا. إن لم يكن، فإنه يمكن القيام بعمل تنظيف.

نصائح أخرى

ويبدو أنه كانت هناك بعض التطورات منذ عام 2009:)

الوثائق :

<اقتباس فقرة>   

إذا كنت تستخدم مستوى API أو 8   أكبر، استخدم getExternalCacheDir() ل   فتح ملف الذي يمثل   دليل التخزين الخارجي حيث كنت   يجب حفظ ملفات ذاكرة التخزين المؤقت. إذا كان المستخدم   إلغاء تثبيت التطبيق الخاص بك، هذه   سيتم حذف الملفات تلقائيا.   ومع ذلك، أثناء حياة الخاصة بك   تطبيق، يجب أن إدارة هذه   ملفات ذاكرة التخزين المؤقت وإزالة تلك التي   ليست هناك حاجة للحفاظ على   مساحة ملف.

     

إذا كنت تستخدم مستوى API 7 أو أقل،   استخدام getExternalStorageDirectory() ل   فتح الملفات التي تمثل الجذر   من تخزين خارجي، ثم كتابة   بيانات ذاكرة التخزين المؤقت في ما يلي   الدليل:

     

و/ الروبوت / بيانات // مخبأ /   وبك على غرار جافا   اسم الحزمة، مثل   "com.example.android.app".

وحتى عند استخدام getExternalCacheDir()، لقد رأيت أن الدليل ذاكرة التخزين المؤقت، والذي هو اسم الحزمة التطبيق الخاص بك لا يتم إزالة تلقائيا كما جاء في وثائق الروبوت، على الأقل ليس على لينوفو A1. يمكن أن يكون ساذجا بعض الشيء ولكن قد تحتاج لتنظيف البيانات السابقة خلال إعادة تثبيت. هناك، يمكنك معرفة ما إذا كان التطبيق الخاص بك برنامج الأمم المتحدة للتثبيت أو يتم تثبيت لأول مرة - قمت بتخزين قيمة، وربما منطقية، وذلك باستخدام تفضيلات المشتركة. ويمكن أن يكون شيئا مثل:

SharedPreferences sharedPrefs = getSharedPreferences(INSTALL_PREFS, MODE_PRIVATE);
if(sharedPrefs.getBoolean("AppInstalled", false) == false){
    //DELETE APP DIRECTORY
    SharedPreferences.Editor editor = sharedPrefs.edit();
    editor.putBoolean("AppInstalled", true);
    editor.commit();
}

وبهذه الطريقة، في كل مرة يتم تشغيل التطبيق، فإنه يتحقق إذا أنها المرة الأولى انها تعمل. عند إزالة التطبيق، وبالتالي فإن تفضيلات المشتركة عن التطبيق. ثم، في المرة القادمة يتم تثبيته، وإذا (...) سوف يكون ذلك صحيحا، ويمكنك القيام ببعض تنظيف هناك.

وأنا أعلم أن هذا لا يجيب على السؤال مباشرة وليس من الجميل أن ترك البيانات غير المستخدمة على أجهزة المستخدمين، ولكن أعتقد أنها يمكن أن تكون بديلا عن محاولة لتنظيف عندما يتم إزالة أحد التطبيقات، وهو عاقل ولكن يبدو مستحيلا.

أقوم بإضافة هذا لأن الإجابات الحالية قديمة في عام 2017.على الرغم من أنه لا يوجد رد اتصال عند إلغاء تثبيت التطبيق، فقد تم توفير بعض الآليات للحفاظ على بيانات التطبيق بعد إلغاء التثبيت.

  • منذ Android 6.0 (API 23)، أصبح النسخ الاحتياطي التلقائي للتطبيقاتتم تقديم الميزة، والتي سمحت للمطورين إما بالسماح بالنسخ الاحتياطي التلقائي للتطبيقات أو منعه.اعتبارًا من API 23، يتم تمكين النسخ الاحتياطي افتراضيًا.

  • اثنان جديدان application تم تقديم العلامات لملف البيان: android:allowBackup و android:fullBackupContent.

لإلغاء الاشتراك في النسخ الاحتياطي التلقائي، أضف android:allowBackup="false" إلى ملف البيان تحت application بطاقة شعار.ستؤدي القيمة "صحيح" إلى حفظ التفضيلات وقواعد البيانات المشتركة تلقائيًا في السحابة، بالإضافة إلى ملفات اخرى.

ثانيًا، يمكنك أن تكون محددًا جدًا بشأن الملفات التي تريدها يشمل أو استبعاد للحذف أو الحفاظ على إلغاء التثبيت باستخدام android:fullBackupContent بطاقة شعار.تشير هذه السمة إلى ملف XML الذي يحتوي على قواعد النسخ الاحتياطي.قم بإنشاء ملف تكوين XML في ملف res/xml/ الدليل مع بناء الجملة التالي:

<full-backup-content>
    <include domain=["file" | "database" | "sharedpref" | "external" | "root"]
    path="string" />
    <exclude domain=["file" | "database" | "sharedpref" | "external" | "root"]
    path="string" />
</full-backup-content>

هنا يمكنك إضافة أنواع الملفات المحددة لتضمينها أو استبعادها والمسارات المرتبطة بها.أضف ال android:fullBackupContent = "@xml/my_backup_rules" ضع علامة على ملف البيان ضمن ملف application بطاقة شعار.

سيتم نسخ الملفات المحددة احتياطيًا إلى Google Drive ضمن حساب البريد الإلكتروني الأساسي للجهاز.سيتم استعادة البيانات عند إعادة التثبيت بشرط تمكين الإعداد التالي من قبل المستخدم:

Settings -> Backup & Reset -> Automatic Restore.

وتجدر الإشارة أيضًا إلى أن بيانات النسخ الاحتياطي لا يمكن قراءتها بواسطة المستخدم أو التطبيقات الأخرى الموجودة على الجهاز.

enter image description here

يمكن أيضًا الوصول إلى نفس الشيء من تطبيق Google Drive من هنا:

Google Drive -> Settings -> Auto backup for apps -> Backup and reset

enter image description here

ومن الجدير بالذكر أنه إذا كان نفسه أساسي يتم استخدام حساب Google لأجهزة متعددة، ثم يتم إنشاء نسخ احتياطية لأجهزة متعددة.يمكن الوصول إلى النسخ الاحتياطية للأجهزة الفردية من هنا:

Google Drive -> Settings -> Backups

Google Drive - loading= Settings -> Backups">

وعلى ما يبدو منذ ذلك الحين هناك soltuion المناسبة، <وأ href = "http://developer.android.com/reference/android/content/Context.html#getExternalFilesDir٪28java.lang.String٪29" يختلط = "نوفولو"> Context.getExternalFilesDir () :

<اقتباس فقرة>   

وإرجاع المسار المطلق إلى الدليل على الملفات الخارجية   (وهذا هو في مكان ما على Environment.getExternalStorageDirectory ()) حيث   التطبيق يمكن وضع ملفات المستمرة التي تمتلكها. هذه الملفات هي   القطاع الخاص إلى التطبيقات، وغير مرئية عادة على المستخدم كما   وسائل الاعلام.

     

وهذا هو مثل getFilesDir () في أنه سيتم حذف هذه الملفات عند   يتم تثبيت التطبيق

وإذا كنت ترغب في تخزين البيانات الكبيرة ثم تخزينها في تخزين خارجي مع اسم مسار الملف مثل

Environment.getExternalStorageDirectory().toString()+"/Android/data/packageName"

وحيث اسم الحزمة هو اسمك حزمة التطبيق على سبيل المثال com.think.abc

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top