2015-09-10 18 views
5

Mam dwie aplikacje, jedna działa jako główna aplikacja, a druga jako usługa. W pliku manifestu aplikacji usługa, skonfigurować usługi takie jak:Android - Udostępnij zasób między dwiema aplikacjami

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

A w głównym aplikacji, zacznę usługi jak:

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

Tutaj muszę powielić „ch.service .action.FIRST_SERVICE ". Jak mogę tego uniknąć? W jaki sposób mogę udostępnić niektóre wspólne stałe, na przykład zdefiniować jedną w aplikacji usługi i można je pobrać w głównej aplikacji?

Każda odpowiedź jest doceniana.

Odpowiedz

0

Aby coś takiego trzeba było utworzyć projekt biblioteki i dołączyć go do aplikacji głównej i usługi, a także zdefiniować swoje nazwisko w dołączonej bibliotece. Mam nadzieję, że to pomoże, nie jestem pewien, czy jest jakaś inna lepsza droga :)

+0

Jest inny sposób, który jest zamieszczony poniżej ... – Kushal

0

Jeśli możesz połączyć ze sobą dwie aplikacje, z pewnością możesz udostępnić wszystko, co chcesz. W rzeczywistości jedna aplikacja może zawierać wiele usług i intencji.

Jeśli masz jakiś powód, aby oddzielić jedną aplikację na dwie, lub są dwiema nieistotnymi aplikacjami, użycie intencji do komunikacji wymaga zawsze nazwy klasy, co jest nieuniknione.

1

Powinieneś użyć SharedPreference między oboma aplikacjami. W aplikacji Serwisu należy writeStringch.service.action.FIRST_SERVICE do 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(); 

Kiedy chcesz uzyskać wartość z innej aplikacji, trzeba najpierw dostać Context swojej aplikacji usług:

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

można użyć mServiceAppContext uzyskać wartość wyrażenie:

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"); 

Najlepszy wyjaśnieniu podano w: http://thedevelopersinfo.com/2009/11/25/getting-sharedpreferences-from-other-application-in-android/

0

Istnieją różne sposoby archiwizowania samo, ale dlaczego nie keep it simple:

  1. Czy masz odniesienie do projektu serwisu? jeśli tak, to dlaczego nie po prostu utworzyć ustawienie w projekcie usługi i użyć go ponownie na głównym, gdy utworzy się intencję:

    Intencja intencji = nowa intencja (cxt.getString ("service_string", wartość domyślna));

lub, tak jak w moich aplikacjach, po prostu utworzyć publiczną statyczną zmienną końcową w klasie serwisowej i uzyskać do niej dostęp z głównej aplikacji?

public static final String ACTION_FIRST_SERVICE = "ch.service.action.FIRST_SERVICE"; 
  1. Jeśli nie masz odniesienie do projektu usług i nie chcą, aby dodać, że najlepszym sposobem jest, aby wystawiać go nikomu ...lub utworzyć projekt lib, który oba używają
Powiązane problemy