2012-03-27 103 views
2

當使用Eclipse的仿真器從應用程序調用另一個應用程序的活動時,我總是收到「ActivityNotFoundException:無法找到顯式活動類...」。也許這個問題可能與我在點擊設置中的「管理應用程序」時無法同時下載/查找這兩個應用程序有關。這是我需要調用另一個應用程序的活動的第一個項目。但我不確定代碼是否正確。請幫助我確定下面的代碼片段是否存在錯誤。有人暗示我可以設定達成目標的意圖的行動領域,但沒有找到這方面的學習材料。我瞭解瞭如何在調用應用程序中使用setComponent方法,並將android:export添加到被調用活動的AndroidManifest.xml中。提前致謝!ActivityNotFoundException當調用另一個應用程序的活動

調用應用程序的相關源代碼:

Intent intent = new Intent();     
intent.setComponent(new ComponentName("com.MyPackage", om.MyPackage.Activity1)); 
startActivity(intent); 

調用應用程序的相關的AndroidManifest.xml:AndroidManifest.xml中的其他應用程序

<activity android:name=".Activity1" android:exported = "true">   
     <intent-filter> 
      <action android:name="com.MyPackage.Activity1" /> 
      <category android:name="android.intent.category.DEFAULT" />    
     </intent-filter> 
</activity> 

回答

4

的活動

<application android:icon="@drawable/icon" android:label="@string/app_name"> 
    <activity android:name=".MainActivity" 
       android:label="@string/app_name"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

    <activity android:name=".Activity1"> 
     <intent-filter> 
      <action android:name="com.MyPackage.Activity1" /> 
      <category android:name="android.intent.category.DEFAULT" />    
     </intent-filter> 
    </activity> 

</application> 

相關代碼首先指出你正在嘗試在應用2,從活動中應用1開始活動

  • 你必須給他們不同的命名空間
    • 這兩個應用程序現在有com.MyPackage.*前綴
  • OR使用的名稱Activity1Activity2

所以,你將有

com.MyPackage1.Activity1 
// and 
com.MyPackage2.Activity1 

然後你可以使用此代碼,從MyPackage1在MyPackage2開始活動1。

// in file com.MyPackage1.Activity1 
Intent intent = new Intent(); 
intent.setComponent(new ComponentName("com.MyPackage2", "com.MyPackage2.Activity1")); 
startActivity(intent); 

和你AndroidManifest.xml文件應該是這樣的:

第一

<application android:icon="@drawable/icon" android:label="@string/app_name"> 
    <activity android:name="com.MyPackage1.Activity1" 
       android:label="@string/app_name"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

</application> 

第二

<application android:icon="@drawable/icon" android:label="@string/app_name"> 
    <activity android:name="com.MyPackage2.Activity1" 
       android:label="@string/app_name"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

</application> 

查看相關的SO問題:
How to start activity in another application?

+0

在進行建議的更改後,我仍然收到ActivityNotFoundException或ClassNotFoundException。也許這與無法正確地在應用程序上安裝應用程序有關。在我最近的努力中,首先我使用adb命令安裝了被調用的應用程序(其中包含Activity1類)。然後我從Eclipse運行調用應用程序。這會產生有關Activity1的ClassNotFoundException,這可能是由於某種奇怪的原因,被調用的應用程序不再在模擬器中引起的。爲什麼不再安裝?如果這是我的問題的一部分,如何解決它?謝謝! – macrogeo 2012-03-31 08:19:19

+0

您正試圖在另一個應用程序中調用Activity?我指着同一個應用程序開始第二個活動。看到我編輯的答案 – 2012-03-31 12:05:34

+1

它的工作原理!謝謝你Marek! – macrogeo 2012-04-03 23:13:06

相關問題