22

Tôi đã tạo một ứng dụng tạo và lưu trữ tệp vào sdcard. Có cách nào để ràng buộc thư mục với ứng dụng để xóa tất cả các tệp khi người dùng chạy gỡ cài đặt trên thiết bị Android không?Android - Bảo tồn hoặc xóa các tệp do ứng dụng tạo ra khi gỡ cài đặt

+0

ứng dụng Lệnh 'NQ Mobile Security' đang kêu gọi một Hoạt động tại uninstall nhìn vào http://i.imgur.com/ Fos9N.png, http://i.imgur.com/fIZbK.png, http://i.imgur.com/cG9Hr.png và câu hỏi http://stackoverflow.com/questions/10219328/how-to- show-an-activity-before-my-app-được-gỡ cài đặt-android –

Trả lời

10

Không có cách nào để ứng dụng của bạn biết rằng ứng dụng đó đang được gỡ cài đặt (mà không sửa đổi hạt nhân). Tất cả các tệp được tạo trong dữ liệu/dữ liệu/your.app.package sẽ tự động bị xóa khi cài đặt.

Tôi không nghĩ rằng mọi thứ bị xóa khỏi sdcard. Bạn có thể làm một bài kiểm tra nhanh và tìm ra điều đó.

Một cách tiếp cận khác có thể là có ứng dụng khác kiểm tra xem ứng dụng này có được cài đặt hay không. Nếu không, nó có thể làm công việc dọn dẹp.

+0

Ứng dụng 'NQ Mobile Security' đang gọi Hoạt động khi gỡ cài đặt xem tại http://i.imgur.com/Fos9N.png, http: //i.imgur.com/fIZbK.png, http://i.imgur.com/cG9Hr.png và câu hỏi http://stackoverflow.com/questions/10219328/how-to-show-an-activity-android –

+0

Đối với các ứng dụng được biên dịch cho Android 6.0 trở lên và bật sao lưu đám mây, hãy xem câu trả lời của Y.S. – dermatthias

23

Dường như đã có một số diễn biến từ năm 2009 :).

Từ documentation:

Nếu bạn đang sử dụng API Cấp 8 hoặc lớn hơn, sử dụng getExternalCacheDir() để mở một tập tin đại diện cho thư mục lưu trữ bên ngoài nơi bạn nên lưu file cache. Nếu người dùng gỡ cài đặt ứng dụng của bạn, các tệp này sẽ tự động bị xóa. Tuy nhiên, trong thời hạn của ứng dụng , bạn nên quản lý các tệp bộ nhớ cache này và xóa những tệp đó không cần thiết để giữ không gian tệp .

Nếu bạn đang sử dụng API Level 7 hoặc thấp hơn, sử dụng getExternalStorageDirectory() để mở một tập tin đại diện cho rễ của lưu trữ bên ngoài, sau đó viết dữ liệu bộ nhớ cache trong các thư mục sau:

/Android/data // cache/ Đây là tên gói Java kiểu Java của bạn, chẳng hạn như "com.example.android.app".

0

nếu bạn muốn lưu trữ dữ liệu lớn sau đó lưu trữ nó trong bộ nhớ ngoài với tập tin tên đường dẫn như

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

nơi tên gói là tên gói ứng dụng của bạn ví dụ như com.think.abc

4

Ngay cả khi sử dụng getExternalCacheDir(), tôi đã thấy rằng thư mục bộ nhớ cache, là tên gói ứng dụng của bạn, không bị xóa tự động như đã nói trên Tài liệu Android, ít nhất là không phải trên Lenovo A1. Nó có thể là một chút ngây thơ nhưng bạn có thể muốn làm sạch dữ liệu trước đó trong khi cài đặt lại. Ở đó, bạn có thể tìm hiểu xem ứng dụng của bạn chưa được cài đặt hay đang được cài đặt lần đầu tiên - bạn lưu trữ một giá trị, có thể là boolean, sử dụng các tùy chọn được chia sẻ. Nó có thể là một cái gì đó như:

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

Bằng cách này, mỗi khi ứng dụng chạy, nó sẽ kiểm tra xem đây là lần đầu tiên nó chạy. Khi ứng dụng bị xóa, do đó, các tùy chọn được chia sẻ cho ứng dụng. Sau đó, lần sau khi nó được cài đặt, nếu (...) sẽ đúng và bạn có thể làm một số dọn dẹp ở đó.

Tôi biết điều này không trực tiếp trả lời câu hỏi và không nên để dữ liệu chưa sử dụng trên thiết bị của người dùng, nhưng tôi nghĩ rằng đó có thể là cách thay thế để xóa sạch khi ứng dụng bị xóa. nhưng dường như không thể.

+0

Tôi không biết mình có hiểu nhầm hay không, nhưng có vẻ như nó sẽ hoạt động như mong đợi nếu bạn sử dụng nó kể từ khi phát hành ứng dụng đầu tiên, bạn có đồng ý không? –

3

có vẻ như kể từ đó có một soltuion thích hợp, Context.getExternalFilesDir():

Trả về đường dẫn tuyệt đối đến thư mục trên hệ thống tập tin bên ngoài (có nghĩa là ở đâu đó trên Environment.getExternalStorageDirectory()), nơi ứng dụng có thể đặt các tệp liên tục mà nó sở hữu. Các tệp này là riêng tư đối với các ứng dụng và thường không hiển thị với người dùng dưới dạng phương tiện truyền thông .

này giống như getFilesDir() ở chỗ những file này sẽ được xóa khi ứng dụng được gỡ cài đặt

3

tôi thêm này vì câu trả lời hiện đang lỗi thời vào năm 2017. Trong khi đúng là có không có gọi lại về gỡ cài đặt ứng dụng, một số cơ chế đã được cung cấp để giữ lại dữ liệu ứng dụng ngoài quá trình gỡ cài đặt.

  • Kể từ Android 6.0 (API 23), tính năng Auto Backup for Apps đã được giới thiệu, trong đó cho phép các nhà phát triển cho một trong hai giấy phép hoặc ngăn chặn sao lưu ứng dụng tự động. Tính năng sao lưu API 23 được bật theo mặc định.

  • Hai thẻ mới application đã được giới thiệu cho tệp kê khai: android:allowBackupandroid:fullBackupContent.

Để chọn không tham gia sao lưu tự động, hãy thêm android:allowBackup="false" vào tệp kê khai theo thẻ application. Giá trị "true" sẽ tự động lưu các tùy chọn và cơ sở dữ liệu được chia sẻ vào đám mây, cũng như other files.

Thứ hai, bạn có thể rất cụ thể về các tập tin bạn muốn bao gồm hoặc loại trừ để xóa hoặc bảo quản trên gỡ bỏ cài đặt với thẻ android:fullBackupContent. Thuộc tính này trỏ đến một tệp XML chứa các quy tắc dự phòng. Tạo một tập tin cấu hình XML trong thư mục res/xml/ với cú pháp sau:

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

Ở đây bạn có thể thêm các loại tập tin cụ thể bao gồm hoặc loại trừ và đường dẫn liên quan của họ. Thêm thẻ android:fullBackupContent = "@xml/my_backup_rules" vào tệp kê khai dưới thẻ application.

Các tệp được chỉ định sẽ được sao lưu vào Google Drive trong tài khoản email chính của thiết bị. Dữ liệu sẽ được khôi phục khi cài đặt lại nếu cài đặt sau được bật bởi người dùng:

Settings -> Backup & Reset -> Automatic Restore.

Cũng cần lưu ý rằng người dùng hoặc các ứng dụng khác không thể đọc dữ liệu sao lưu trên thiết bị.

enter image description here

Quy định này cũng có thể được truy cập từ ứng dụng Google Drive từ đây:

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

enter image description here

Điều đáng chú ý là nếu cùng chính tài khoản Google được sử dụng cho nhiều thiết bị, sau đó nhiều bản sao lưu thiết bị được tạo. Các bản sao lưu cho các thiết bị cá nhân có thể được truy cập từ đây:

Google Drive -> Settings -> Backups

Google Drive -> Settings -> Backups

+1

Câu trả lời hay. Đang tìm kiếm chính xác điều này. Trong năm 2017 (hoặc kể từ Android 6.0) đây là câu trả lời đúng. – dermatthias

+1

@ Y.S. câu trả lời hoàn hảo: D –

Các vấn đề liên quan