2015-09-10 28 views
5

Tôi có hai ứng dụng, một ứng dụng hoạt động như một ứng dụng chính và một ứng dụng khác làm dịch vụ. Trong ứng dụng dịch vụ file manifest, tôi cấu hình một dịch vụ như:Android - Chia sẻ tài nguyên giữa hai ứng dụng

<service android:name=".services.FirstService"> 
    <intent-filter> 
     <action android:name="ch.service.action.FIRST_SERVICE"/> 
    </intent-filter> 
</service> 

Và trong ứng dụng chính, tôi bắt đầu một dịch vụ như:

Intent intent = new Intent("ch.service.action.FIRST_SERVICE"); 
startService(intent); 

Ở đây, tôi phải lặp lại "ch.service .action.FIRST_SERVICE ". Làm cách nào để tránh điều này? Làm thế nào tôi có thể chia sẻ một số hằng số chung, ví dụ như xác định một trong các ứng dụng dịch vụ, và có thể được lấy trong ứng dụng chính?

Mọi câu trả lời đều được đánh giá cao.

Trả lời

0

cho một cái gì đó như thế này bạn phải tạo một dự án thư viện và đưa nó vào cả ứng dụng chính và dịch vụ của bạn và xác định tên của bạn trong thư viện bạn đã bao gồm. Hy vọng điều này sẽ giúp, không chắc chắn nếu có bất kỳ cách nào tốt hơn :)

+0

Có cách khác, được đăng bên dưới ... xin hãy kiểm tra – Kushal

0

Nếu bạn có thể hợp nhất hai ứng dụng với nhau, chắc chắn bạn có thể chia sẻ bất cứ điều gì bạn muốn. Trên thực tế, một ứng dụng có thể chứa nhiều dịch vụ và mục đích dịch vụ.

Nếu bạn có một số lý do để tách một ứng dụng thành hai, hoặc chúng là hai ứng dụng không liên quan, sử dụng ý định giao tiếp luôn cần tên lớp không thể tránh khỏi.

1

Bạn nên sử dụng SharedPreference giữa cả hai đơn đăng ký của mình. Trong ứng dụng dịch vụ của bạn, bạn nên write các Stringch.service.action.FIRST_SERVICE-SharedPreference:

SharedPreference sharedPreferences = getSharedPreferences("any_name", Context.MODE_WORLD_READABLE); 
SharedPreference.Editor mEditor = sharedPreferences.edit(); 
mEditor.putString("service_string","ch.service.action.FIRST_SERVICE"); 
mEditor.commit(); 

Khi bạn muốn nhận được giá trị từ một ứng dụng khác, trước tiên bạn cần phải nhận được Context của ứng dụng dịch vụ của bạn:

Context mServiceAppContext = createPackageContext("com.example.service_app_package", 0); 

Bạn có thể sử dụng mServiceAppContext để lấy giá trị string:

SharedPreference sharedPreferences = mServiceAppContext.getSharedPreferences("any_name", Context.MODE_WORLD_READABLE);  
// Context.MODE_WORLD_READABLE is important, it makes the value readable across other applications 

sharedPreferences.getString("service_string", /* default value */ "service_string","ch.service.action.FIRST_SERVICE"); 

xuất sắc nhất Giải thích được đưa ra tại địa chỉ: http://thedevelopersinfo.com/2009/11/25/getting-sharedpreferences-from-other-application-in-android/

0

Có nhiều cách khác nhau để lưu trữ những điều tương tự, nhưng tại sao không giữ nó đơn giản:

  1. Bạn có một tham chiếu đến các dự án dịch vụ? nếu có, tại sao không chỉ tạo cài đặt trong dự án dịch vụ và sử dụng lại cài đặt đó trong dự án dịch vụ khi tạo mục đích chính:

    Ý định mục đích = new Intent (cxt.getString ("service_string", giá trị mặc định));

hoặc, như tôi đã làm trong ứng dụng của mình, chỉ cần tạo biến cuối cùng tĩnh trên lớp dịch vụ và truy cập nó từ ứng dụng chính?

public static final String ACTION_FIRST_SERVICE = "ch.service.action.FIRST_SERVICE"; 
  1. Nếu bạn không có một tham chiếu đến các dự án dịch vụ và không muốn thêm vào, cách tốt nhất là để lộ nó cho bất cứ ai ...hoặc tạo dự án lib mà cả hai đều sử dụng
Các vấn đề liên quan