2011-11-16 79 views

回答

13

你需要在你的艙單申報意向過濾器(我從條碼掃描儀下面的例子):

<activity android:name="..."> 
    <intent-filter> 
     <action android:name="com.google.zxing.client.android.SCAN" /> 
     <category android:name="android.intent.category.DEFAULT" /> 
    </intent-filter> 
</activity> 

然後用相同的動作字符串創建意圖:

Intent intent = new Intent("com.google.zxing.client.android.SCAN"); 
startActivityForResult(intent, code); 

Android應該開始你的活動(或者如果有多個應用程序共享相同的操作字符串,它將顯示一個下拉框)。

+0

謝謝,我剛剛閱讀了Barcodescanner Manifest,發現了同樣的事情。 :] – Force

21

作爲Dalmas答案的替代方案,您可以實際導出Activity而不創建<intent-filter>(以及提出自定義操作的麻煩)。

Manifest編輯您的Activity標籤,像這樣:

<activity 
    android:name=".SomeActivity" 
    .... 
    android:exported="true" /> 

的重要組成部分,是android:exported="true",這export標籤決定「是否將活動可以通過其他應用程序的組件啓動」。如果您的<activity>包含<intent-filter>,則該標籤自動設置爲true,如果不是,則默認情況下它將設置爲false

然後啓動Activity做到這一點:

Intent i = new Intent(); 
i.setComponent(new ComponentName("package name", "fully-qualified name of activity")); 
startActivity(i); 

當然,用這種方法,你需要知道你正在嘗試啓動活動的確切名稱。

+0

非常感謝!我的應用程序突然開始拋出這個錯誤,即使在我做出一個無關緊要的改變之後,即使我刪除了這個改變,但是這固定了! – Michael

+0

有關默認行爲的非常好的規範。一個外部應用程序說,我的應用程序的主要活動已導出,我不明白爲什麼,直到我看到你的答案...有一個美好的一天! – Antonino

相關問題