2010-06-23 33 views
9

ứng dụng Android của tôi có hai loại sở thích:ưu đãi về tài khoản nộp vs nộp thích App

1) Tôi có sở thích người dùng quy định tại res/xml/preferences.xml để người dùng có thể quản lý sở thích của họ với một PreferenceActivity .

2) Tôi muốn xác định một tệp khác cho tùy chọn cấu hình toàn cầu của ứng dụng của tôi.

Cách tốt nhất để quản lý tùy chọn cấu hình ứng dụng của tôi là gì? Tôi có nên tạo một tệp XML khác với các giá trị cấu hình hay tôi nên chỉ định các giá trị cấu hình đó trong strings.xml? Phương pháp hay nhất để quản lý tùy chọn cấu hình là gì?

Trả lời

6

file Preference là không storead trong dự án /res/xml/defaults.xml

Họ được lưu trữ trên thiết bị trong thư mục ứng dụng một cái gì đó của bạn như

/data/data/com.your.pkg/default.prefs 

Cố gắng không chỉ định tên tập tin, như bạn sẽ có một số vấn đề với các tệp tùy chọn, như OP này có trong câu hỏi này: How do I get preferences to work in Android?

SharedPreferences preferences = PreferenceManager 
        .getDefaultSharedPreferences(context); 

Sau đó, bạn có thể sẽ phải truy vấn

preferences.getString('weightPref', null); 

Nhiều ứng dụng có thể cung cấp một cách để nắm bắt sở thích của người dùng trên các thiết lập 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ặp giá trị tên. Chúng có thể được lưu trữ dưới dạng "Tùy chọn chia sẻ" trên nhiều hoạt động khác nhau trong một ứng dụng (lưu ý hiện tại nó không thể được chia sẻ trên các quy trình). Hoặc nó có thể là cái gì đó cần được lưu trữ cụ thể cho một hoạt động.

  1. Tùy chọn được chia sẻ: Tùy chọn chia sẻ có thể được sử dụng bởi tất cả các thành phần (hoạt động, dịch vụ, vv).

  2. Tùy chọn được xử lý hoạt động: Các tùy chọn này chỉ có thể được sử dụng 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.

Preferences chung:

Các sở thích chia sẻ được quản lý với sự giúp đỡ của getSharedPreferences phương pháp của lớp Context. Các sở thích được lưu trữ trong một tập tin mặc định (1) hoặc bạn có thể chỉ định một tên tập tin (2) được sử dụng để tham khảo các sở thích.

(1) Đây là cách bạn có được dụ khi bạn chỉ định tên tập tin

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

MODE_PRIVATE là chế độ hoạt động cho các sở thích. Đây là chế độ mặc định và có nghĩa là tệp được 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_WRITEABLE các ứng dụng khác cũng có quyền ghi cho tệp được tạo.

(2) Cách đề nghị là sử dụng bởi chế độ mặc định, mà không chỉ định tên tập tin

SharedPreferences preferences = PreferencesManager.getDefaultSharedPreferences(context); 

Cuối cùng, một khi bạn có các trường hợp sở thích, đây là cách bạn có thể lấy lưu trữ đánh giá cao những ưu đãi:

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

Để cửa hàng đánh giá cao trong file thích SharedPreference.Editor đối tượng đã được sử dụng. Editor là giao diện lồng nhau của lớp SharedPreference.

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 các giá trị ưu tiên từ tập tin.

Preferences

Hoạt động:

Các sở thích 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ẻ các sở thích với các thành phần khác và muốn có các hoạt động riêng tư. Bạn có thể làm điều đó với sự trợ giúp của phương thức hoạt động của getPreferences(). Phương thức getPreference sử dụng phương thức getSharedPreferences() với tên của lớp hoạt động cho tên tệp tùy chọn.

Tiếp theo là mã để có được ưu đãi về

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

Mã để lưu trữ các giá trị cũng tương tự như trong trường hợp sở thích 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ó tên là android.preference. Gói này định nghĩa các lớp để triển khai UI tùy chọn ứng dụng.

Để xem một số ví dụ khác, hãy kiểm tra bài đăng trên Data Storage của Android trên trang web dành cho nhà phát triển.

+0

Hãy [không sử dụng "ở đây" hoặc "bấm vào đây" như liên kết văn bản] (http://www.w3.org/QA/Tips/noClickHere.html). Cảm ơn! –

+0

Điều tôi muốn làm là để một bên xác định tệp xml tùy chọn của người dùng với các giá trị mặc định trong res/xml/preferences.xml, như bạn đã đề cập tôi có thể nhận được các tùy chọn này: PreferenceManager.getDefaultSharedPreferences (context); Ở phía bên kia, tôi muốn định nghĩa trong một tệp khác tùy chọn để định cấu hình ứng dụng của mình (người dùng không thể quản lý tùy chọn cấu hình này, chỉ có mã ứng dụng của tôi mới đọc được). Câu hỏi của tôi là nơi tôi có thể chỉ định các giá trị mặc định cho các tùy chọn cấu hình này, nếu tôi đã có một tệp cho các tùy chọn người dùng (res/xml/preferences.xml). – whynot

+0

Joachim làm cho một điểm tốt. Đã sửa. – MatrixFrog

1

Chúng ta hãy giả thiết rằng xml của bạn đọc như thế này:

<?xml version="1.0" encoding="utf-8"?> 
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> 
    <CheckBoxPreference android:key="gpsOn" 
        android:summaryOff="GPS is Off" 
        android:summaryOn="GPS is On" 
        android:title="GPS State"></CheckBoxPreference> 

tôi giả sử bạn sử dụng một PreferenceActivity để tải các ưu đãi từ xml của bạn. Vì vậy, trong hoạt động của bạn, bạn thực hiện addPreferencesFromResource(R.xml.application_pref);

Khi bạn làm điều này, theo mặc định, tất cả các giá trị được lưu trữ trong SharedPreference mặc định của ứng dụng. Bạn có thể truy cập các tùy chọn này ở bất cứ đâu bạn muốn. Vì vậy, từ một số hoạt động/dịch vụ khác chỉ cần thực hiện:

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext()); 
boolean value = prefs.getBoolean("gpsOn", false); 

Và giống như bạn sẽ nhận được tùy chọn của người dùng trong value.

0

Có lẽ cách tốt nhất để thiết toàn cầu cấu hình ưu đãi đối với một ứng dụng là xác định yếu tố siêu dữ liệu trong Android Manifest