2010-04-30 72 views
13

我在包裝一中有活動A,並且我想要運行一個意圖,它將啓動包裝二中的活動B.從不同包裝發起活動

我該怎麼做?任何樣品都會受到歡迎。

這是香港專業教育學院做了什麼,以及錯誤我得到:

第一項活動在一個包(「MainActivity」):com.abelski.currencyclient 和第2活動(「SecondActivity」在不同勢包:COM .idan.second

現在我想打電話從MainActivity到SecondActivity

香港專業教育學院的在MainActivity的清單加入這一行:

<activity android:name="com.idan.second.SecondApplicationActivity"></activity> 

現在在主要活動中我得到這個按鈕,運行這行:

Intent intent = new Intent(MainActivity.this,SecondApplicationActivity.class); 

,這是RROR:

04-29 09:20:59.197: ERROR/AndroidRuntime(399): Uncaught handler: thread main exiting due to uncaught exception 
04-29 09:20:59.276: ERROR/AndroidRuntime(399): java.lang.NoClassDefFoundError: com.idan.second.SecondApplicationActivity 
04-29 09:20:59.276: ERROR/AndroidRuntime(399):  
+0

我發現「包」在這裏混淆;包意思是java包或應用離子包? – Samuh 2010-04-30 03:37:25

+0

請再次檢查我的問題,我編輯它。 – rayman 2010-04-30 08:24:40

回答

19

我假設通過「包」來表示應用程序。

我們: - ApplicationA與FirstActivity - ApplicationB與SecondActivity

如果在ApplicationB的AndroidManifest.xml文件,在SecondActivity的聲明中,您可以添加一個Intent過濾器,例如:

<activity android:name=".SecondActivity"> 
    <intent-filter> 
    <action android:name="applicationB.intent.action.Launch" /> 
    <category android:name="android.intent.category.DEFAULT" /> 
    </intent-filter> 
</activity> 

您可以創建一個意圖從FirstActivity啓動此SecondActivity:

Intent intent = new Intent("applicationB.intent.action.Launch"); 
startActivity(intent); 

這一切都說明是:

  • 當您創建與動作的意圖,並稱之爲「startActivity」系統中的SecondActivity是否有「applicationB.intent.action.Launch」
  • 的意圖行動的過濾器會發現,響應它

這個文檔是在活動(如果有的話):https://developer.android.com/reference/android/content/Intent.html

+0

感謝您的幫助。 – rayman 2010-05-02 06:22:53

+0

告訴我你認爲有沒有辦法在沒有GUI的情況下啓動這個應用程序?只是爲了啓動它的背景? – rayman 2010-05-02 07:23:15

+0

我認爲你應該爲此提供服務。你可以在https://developer.android.com/reference/android/app/Service.html查看文檔 – rcabaco 2010-05-03 08:53:44

0

使用顯式意圖:

Intent intent = new Intent(context,ClassName.class); 

,其中類名是從另一個包。

有時,在這種情況下,您將不會知道類的名稱,您將不得不依賴目標類通告處理的Intent。

+2

它沒有工作,請再次檢查我的問題,我編輯它。 – rayman 2010-04-30 08:23:30

9

我有同樣的問題和解決方案是你的包名的根另一個層次。

如果您有兩個包「com.first ....」和「com.second ...」,並且清單引用了「com.first」。然後你可以重構這兩個包以重用第一部分。例如,「com.package。。第一」和‘com.package.second’那您的清單也必須被更新

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.package"> 
... 

    <activity android:name=".first.FirstPackageActivity" android:label="FirstPackageActivity"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER"/> 
     </intent-filter> 
    </activity> 
    <activity android:name=".second.SecondPackageActivity" android:label="SecondPackageActivity"> 
     <intent-filter> 
      <action android:name="android.intent.action.VIEW" /> 
      <category android:name="android.intent.category.LAUNCHER"/> 
     </intent-filter> 
    </activity> 

你的Java代碼可以創建一個意向,並開始以通常的方式活動:

Intent intent = new Intent(this,ActivityClassName.class); 
startActivity(intent);