嗯,我搜索了很多,但我沒有找到一個精確的答案如何導出一個活動,所以一個應用程序可以用startActivityforResult
啓動它。如何導出活動以便其他應用程序可以調用它?
我該如何做到這一點?我是否需要在某些方面改變Manifest?
嗯,我搜索了很多,但我沒有找到一個精確的答案如何導出一個活動,所以一個應用程序可以用startActivityforResult
啓動它。如何導出活動以便其他應用程序可以調用它?
我該如何做到這一點?我是否需要在某些方面改變Manifest?
你需要在你的艙單申報意向過濾器(我從條碼掃描儀下面的例子):
<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應該開始你的活動(或者如果有多個應用程序共享相同的操作字符串,它將顯示一個下拉框)。
作爲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);
當然,用這種方法,你需要知道你正在嘗試啓動活動的確切名稱。
謝謝,我剛剛閱讀了Barcodescanner Manifest,發現了同樣的事情。 :] – Force