2012-09-19 1 views
9

Tôi đã phát triển một ứng dụng Android tương tác với các ứng dụng khác được cài đặt trên thiết bị thông qua tệp sharedpreference.Tùy chọn chia sẻ trên Android trên các ứng dụng khác nhau

Tệp này được tạo dưới dạng MODE.WORLD_READABLE và mọi ứng dụng đã cài đặt đều có tệp riêng với tên và thuộc tính được xác định chung (những thay đổi là giá trị cho thuộc tính cụ thể đó). Ví dụ: App2 và AppB phải có mỗi tệp được chia sẻ có tên là "app_shared_file.xml" với thuộc tính "property_shared_file".

Từ ứng dụng của tôi, tôi muốn truy cập tệp này lần đầu tiên và đọc giá trị thuộc tính đó, và tùy thuộc vào kết quả mà tôi muốn tạo/cập nhật của tôi.

Tuy nhiên, tôi đang gặp một số vấn đề trong việc đạt được điều đó. Trên giấy tờ Android tôi thấy rằng:

Lấy và giữ các nội dung của các ưu đãi nộp 'tên', trả lại một SharedPreferences thông qua đó bạn có thể lấy và sửa đổi giá trị của nó. Chỉ một cá thể của đối tượng SharedPreferences được trả lại cho bất kỳ người gọi nào có cùng tên, nghĩa là họ sẽ thấy các chỉnh sửa của nhau ngay khi chúng được thực hiện.

Sau khi đọc tệp tùy chọn chia sẻ ứng dụng khác, khi tôi cố gắng tạo/cập nhật hệ thống của tôi thay vì chỉnh sửa của tôi, hãy sử dụng cái tôi đã đọc trước đó. Nếu ngược lại, tôi bắt đầu bằng cách cập nhật của tôi và đọc các ứng dụng khác sau này - thay vì đọc một trong những khác, một trong những được truy cập là của tôi.

Mọi suy nghĩ?

Mã Tôi đang sử dụng để đọc pref chia sẻ là [nơi PACKAGENAME là ứng dụng pckg khác]:

Context con = context.createPackageContext(packageName, Context.CONTEXT_IGNORE_SECURITY); 
SharedPreferences pref = con.getSharedPreferences(SHARED_PREF_NAME, Context.MODE_WORLD_READABLE); 
pref.getBoolean(SHARED_PREF_PROP, false); 

Mã Tôi đang sử dụng cho các văn bản trong ứng dụng chia sẻ pref là:

SharedPreferences prefs= getSharedPreferences(SHARED_PREF_NAME, context.MODE_WORLD_READABLE); 
SharedPreferences.Editor editor = prefs.edit(); 
editor.putBoolean(SHARED_PREF_PROP, value); 
editor.commit(); 

Xin cảm ơn trước.

Trả lời

3

SharedPreferences are stored local to the package name of your application. Từ những gì nó giống như âm thanh, bạn có hai ứng dụng hoàn toàn riêng biệt với các tên gói khác nhau. Điều này có nghĩa là thay vì đọc từ một, bạn đang tạo hai tệp cùng tên được lưu trữ trong các thư mục khác nhau. Để các hoạt động khác nhau đọc từ cùng một tệp SharedPreferences, bạn phải có chúng dưới cùng một tên gói như được xác định bởi tệp AndroidManifest.

Tùy chọn khác, vì bạn biết tên gói của các ứng dụng khác (tôi giả định), là chọn ứng dụng chính sẽ tạo và xử lý nó. Sau đó đọc trực tiếp từ chính tệp bằng cách sử dụng URI trực tiếp. Vì bạn đang đặt quyền cho MODE_WORLD_READABLE, hệ thống sẽ cho phép bạn thực hiện việc này. Mặc dù, nó có thể ngăn bạn truy cập vào thư mục. Cá nhân tôi chưa bao giờ thử.

I believe I have found the answer you are looking for.

+0

Có, có hai ứng dụng khác nhau và mỗi ứng dụng có tệp tùy chọn chia sẻ riêng được lưu trữ trên thư mục shared_prefs của riêng chúng. Có, tôi biết tên gói của ứng dụng khác thông qua PackageManager, nhưng tôi không có tùy chọn nào để biết hoạt động/lớp nào sẽ xử lý nó. Tôi đã thấy liên kết đó, vấn đề ở đây là truy cập vào hai phần mở rộng được chia sẻ khác nhau có cùng tên - của riêng tôi và ứng dụng khác. Sau khi mở một, khi tôi cố gắng để mở khác các điểm tham chiếu đến một điểm ban đầu mở và không phải là một trong những gửi như bối cảnh. – user1683087

0

bạn có thể đọc các tùy chọn từ ứng dụng khác với đoạn mã này.

String PACKAGE_NAME = "com.gr.iasi"; 
String PREFERENCE_NAME = "GlobalPrefsJorge"; 


try { 
     myContext = createPackageContext(PACKAGE_NAME,Context.MODE_WORLD_WRITEABLE);    
      SharedPreferences testPrefs = myContext.getSharedPreferences(PREFERENCE_NAME, Context.MODE_WORLD_READABLE); 

     Map<String, ?> items = testPrefs .getAll(); 
     for(String s : items.keySet()){ 
      //Print keys and values; 
      Log.i("***" +s.toString(), items.get(s).toString()); 
      } 

     } catch (NameNotFoundException e) {  
      e.printStackTrace(); 
     }