格蘭特,
這裏的問題顯然是對Android應用程序模型的誤解。 Commonsware對於如何解決這個問題是絕對正確的。但是,如果不理解Android基礎知識,我可以看到爲什麼您難以應用它。所以,快速解釋:
Android中的每個操作都以Intent開始。活動尤其如此。每個活動都有一個意圖。爲了讓開發人員可以輕鬆使用界面,您可以從操作系統響應Intent,或者可以從Activities類創建一個Intent以供使用。一般來說,最好的做法是做第一個選擇。
響應一個Intent
當選擇的意向作出迴應,你可以從字面上任何意圖做出迴應。這被稱爲行動。如果我創建了一個名爲「FOO」的Intent,則小節活動可以提取並響應。然而,我們有一些約定,其中主要的一點就是將你的軟件包名稱添加到你製作的任何意圖中。例如「com.company.package.FOO」。簡而言之,這是爲了避免與其他應用程序發生衝突。
每個Activity都可能響應不同的事件。這是在AndroidManifest.xml中定義的。
<activity android:name="Activity3" ... >
<intent-filter>
<action android:name="com.company.package.FOO"/>
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
上面,我們還可以設置類別默認值,因此,除非用戶改變它,我們會是響應我們的定製意向的唯一的應用程序。我們隨後致電意圖的方法是使用我們創建的同名(即「com.company.package.FOO」)
startActivity(new Intent("com.company.package.FOO"));
這就是它是如何工作!您只需將上面的「com.company.package.FOO」更改爲您的軟件包名稱(由您的應用程序定義)以及一些有意義的內容。一個例子是「com.testapp.ws.SWAT_FLIES」。
爲什麼您的代碼不起作用
Intent LaunchIntent = getPackageManager().getLaunchIntentForPackage("com.testapp.ws");
上面的代碼查找意向行動的特定種類。記住,當你所做的AndroidManifest和第一活動你就把:
<action android:name="android.intent.action.MAIN">
<category android:name="android.intent.category.LAUNCHER">
嗯...... getLaunchIntentForPackage()只獲取用於第一個活動的意圖。這就是爲什麼我們要制定一個定製的意圖......首先,因爲我們並不真的希望它成爲我們的第三個活動,我們要啓動......第二,因爲操作系統只會告訴我們啓動活動。我們有我們自己的行動來告訴它(即「com.testapp.ws.SWAT_FLIES」)
希望這有助於
FuzzicalLogic
感謝Mr.Fuzzical Logic提供的詳細說明。在提到您的解釋後,我已成功實施了該應用。非常感謝! – Grant
如果我想將數據從一個應用程序中的一個活動發送到另一個應用程序中的服務,這將如何實現? – Aada
實際上,在啓動startService()之前,您只需要Intent ACTION並通過setExtra發送數據。你可能必須首先構建意圖(即意圖myIntent =新的意圖(「com.company.app.ACTION」) –