2016-09-23 33 views
1

我想用隱式意圖啓動應用程序,但在該應用程序啓動之前,我需要處理意圖並啓動一個狀態機,然後該狀態機將會載入一個ActivityAndroid:不是Activity或BroadcastReceiver的類中的隱式意圖

我可以做到這一點使用廣播接收器或活動

<receiver android:name="com.13.MyBroadcastReceiver"> 
    <intent-filter> 
     <action android:name="com.13.StartStateMachine" /> 
    </intent-filter> 
</receiver> 

但後來我管不着,如果其他的應用程序將這個目的相同迴應。

<activity android:name="com.13.MyReceiverActivity"> 
    <intent-filter> 
     <action android:name="com.13.StartStateMachine" /> 
    </intent-filter> 
</activity > 

但是這不會是乾淨的,我可以做一些處理onCreate()然後finish()

任何想法,如果我可以有這些方法的組合? 我的意思是使用隱式(或顯式)意圖從另一個應用程序加載類(不是BroadcastReceiverActivity)?

+0

「我想用隱式意圖啓動應用程序」 - 其他一些應用程序正在啓動您的應用程序。爲什麼該應用程序會使用隱式的'Intent'來啓動您的應用程序?誰會寫這個其他應用程序? 「但是,如果其他應用程序會響應這一相同的意圖,我無法控制」 - 您通常對隱含的「意圖」缺乏控制。您無法控制其他應用程序是否有響應隱式「意圖」的活動。 「我的意思是使用隱式(或顯式)意圖從另一個應用程序加載類(不是BroadcastReceiver或Activity)?」 - 沒有任何解決您的問題。 – CommonsWare

+0

感謝您的回覆,我有兩個應用程序的代碼。 – Serj

+0

那你爲什麼要用隱式的'Intent'?如果您同時控制兩個應用程序,並且您希望應用程序A啓動應用程序B,則使用明確的「意圖」。或者,從一個隱含的'Intent'開始,使用'PackageManager'來確定App B中的哪個組件支持'Intent',並使用這些信息來使'Intent'明確。 – CommonsWare

回答

1

由於這兩個應用程序都是你的,所以歡迎使用任何你想要的IPC機制。

使用Activity的優點是您可以選擇將所有內容都放在同一個任務中。因此,當應用程序A啓動應用程序B的活動時,這可能都是一項任務。任何其他IPC機制都會迫使你開始一項新任務。

因此,正如我在評論中所建議的那樣,請使用PackageManager將隱含的Intent轉換爲明確的。然後,使用任何你想要的IPC。如果您想使用「廣播」(其中顯式Intent確實使其更像是「窄播」),歡迎您這樣做。

恕我直言,說一個活動轉移到另一個活動,也許使用finish(),控制不是真的「髒」。畢竟,應用程序使用的許多啓動畫面都可以做到這一點。恕我直言,使用任何其他IPC機制開始活動,當startActivity()將工作得很好,是「髒」。

+0

謝謝,我不喜歡以這種方式使用活動,但似乎我別無選擇。 – Serj

相關問題