Cách tốt nhất để thực hiện “cài đặt ứng dụng” trong Android là gì? [đóng cửa]


108

Tôi muốn lưu trữ một số cài đặt ứng dụng (như URL của API và một số cài đặt để thử nghiệm) cho một ứng dụng Android.

Tôi chủ yếu làm việc với tư cách là nhà phát triển .NET , vì vậy tôi đã quen với việc sử dụng tệp app.configcho mục đích này. Cách tốt để làm điều đó trong Android là gì?

Câu trả lời:


148

Nhiều ứng dụng có thể cung cấp một cách để nắm bắt tùy chọn của người dùng về cài đặt của một ứng dụng cụ thể hoặc một hoạt động. Để hỗ trợ điều này, Android cung cấp một bộ API đơn giản.

Tùy chọn thường là các cặp giá trị tên. Chúng có thể được lưu trữ dưới dạng “Tùy chọn được chia sẻ” trong các hoạt động khác nhau trong một ứng dụng (lưu ý rằng hiện tại nó không thể được chia sẻ giữa các quy trình). Hoặc nó có thể là thứ cần được lưu trữ cụ thể cho một hoạt động.

  1. Sở thích dùng chung: Tất cả các thành phần (hoạt động, dịch vụ, v.v.) trong ứng dụng đều có thể sử dụng các sở thích dùng chung.

  2. Tùy chọn xử lý hoạt động: Các tùy chọn này chỉ có thể được sử dụng với trong hoạt động và không thể được sử dụng bởi các thành phần khác của ứng dụng.

Sở thích Chia sẻ:

Các sở thích được chia sẻ được quản lý với sự trợ giúp của getSharedPreferencesphương thức của Contextlớp. Tùy chọn được lưu trữ trong tệp mặc định (1) hoặc bạn có thể chỉ định tên tệp (2) được sử dụng để tham chiếu đến tùy chọn.

(1) Đây là cách bạn nhận được phiên bản khi bạn chỉ định tên tệp

public static final String PREF_FILE_NAME = "PrefFile";
   SharedPreferences preferences = getSharedPreferences(PREF_FILE_NAME, MODE_PRIVATE);

MODE_PRIVATElà chế độ hoạt động cho các tùy chọn. Đây là chế độ mặc định và có nghĩa là tệp đã tạo sẽ chỉ được truy cập bởi ứng dụng gọi điện. Hai chế độ khác được hỗ trợ là MODE_WORLD_READABLEMODE_WORLD_WRITEABLE. Trong MODE_WORLD_READABLEứng dụng khác có thể đọc tệp đã tạo nhưng không thể sửa đổi nó. Trong trường hợp MODE_WORLD_WRITEABLEcác ứng dụng khác cũng có quyền ghi đối với tệp đã tạo.

(2) Cách được khuyến nghị là sử dụng theo chế độ mặc định, không chỉ định tên tệp

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);

Cuối cùng, khi bạn có phiên bản tùy chọn, đây là cách bạn có thể truy xuất các giá trị được lưu trữ từ tùy chọn:

 int storedPreference = preferences.getInt("storedInt", 0);

Để lưu trữ các giá trị trong SharedPreference.Editorđối tượng tệp ưu tiên phải được sử dụng. Editorlà giao diện lồng nhau của SharedPreferencelớp.

SharedPreferences.Editor editor = preferences.edit();
editor.putInt("storedInt", storedPreference); // value to store
editor.commit();

Editor cũng hỗ trợ các phương pháp như remove()clear()để xóa giá trị ưu tiên khỏi tệp.

Tùy chọn Hoạt động:

Các tùy chọn được chia sẻ có thể được sử dụng bởi các thành phần ứng dụng khác. Nhưng nếu bạn không cần chia sẻ sở thích với các thành phần khác và muốn có các hoạt động sở thích riêng. Bạn có thể làm điều đó với sự trợ giúp của getPreferences()phương pháp của hoạt động. Các getPreferencephương pháp sử dụng các getSharedPreferences()phương pháp với tên của lớp hoạt động cho tên tập tin thích.

Sau đây là mã để nhận ưu đãi

SharedPreferences preferences = getPreferences(MODE_PRIVATE);
int storedPreference = preferences.getInt("storedInt", 0);

Mã để lưu trữ các giá trị cũng giống như trong trường hợp sở thích được chia sẻ.

SharedPreferences preferences = getPreference(MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putInt("storedInt", storedPreference); // value to store
editor.commit();

Bạn cũng có thể sử dụng các phương pháp khác như lưu trữ trạng thái hoạt động trong cơ sở dữ liệu. Lưu ý Android cũng chứa một gói được gọi là android.preference. Gói định nghĩa các lớp để triển khai giao diện người dùng tùy chọn ứng dụng.

Để xem thêm một số ví dụ, hãy kiểm tra bài đăng về Bộ nhớ dữ liệu của Android trên trang web của nhà phát triển.


1
cảm ơn. Có vẻ như những gì tôi cần làm là sử dụng tệp XML cho những gì tôi đang theo đuổi (hoặc có thể tôi sử dụng XML làm dữ liệu để tải nội bộ), nhưng công cụ ưu tiên hữu ích cho một phần khác của dự án của tôi.
Tim Almond

1
Bạn có thể sử dụng tệp xml cho init. Bạn cần phải gọi một cái gì đó giống nhưPreferenceManager.setDefaultValues(this, R.xml.profiles_preferences, false);
Pentium10

3
Hướng dẫn này cũng có thể hữu ích: developer.android.com/guide/topics/ui/settings.html
Hung Tran

1
+1. Chỉ một chút nhỏ cần ghi nhớ. Sau khi thiết lập giá trị trong preferencesđối tượng, việc gọi editor.apply()được khuyến nghị kết thúc editor.commit()vì cái trước sẽ xử lý việc lưu trong nền.
Anindya Chatterjee

2
Tôi hơi bối rối ở đây. SharedPreferences '' là để lưu trữ cài đặt người dùng trên ứng dụng, không phải cài đặt ứng dụng. Người dùng (và tôi cũng vậy) đã tự hỏi nơi lưu trữ cài đặt ứng dụng, url cũ API hoặc các cài đặt khác mà ứng dụng sử dụng để hoạt động bình thường.
albanx
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.