2010-02-21 130 views
1

我正在從事其他第三方希望通過意向在自己的應用中使用的活動。讓第三方應用程序直接啓動我的活動?

眼下這一活動是通過一個意圖過濾器捕獲的URL,就像這樣:

<activity android:name=".MyActivity"> 
    <intent-filter> 
    <action android:name="android.intent.action.VIEW"></action> 
    <category android:name="android.intent.category.DEFAULT"></category> 
    <category android:name="android.intent.category.BROWSABLE"></category> 
    <data android:host="www.mysite.com" android:pathPrefix="/test/" android:scheme="http"></data> 
    </intent-filter> 
</activity> 

上述作品,只要用戶點擊一個鏈接在我的應用程序,如:

「mysite.com/測試/ blah.html「

我的應用程序作爲一個選擇,隨着瀏覽器,打開鏈接。

現在,如果第三方想利用我的應用程序,我認爲他們可以用上面這樣的:

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://mysite.com/test/somedata")); 
startActivity(intent); 

雖然這會工作,這可能不會給他們直接跳躍的預期效果從我的活動 - 他們的android選擇器對話框將出現,問他們是否要打開意向數據與瀏覽器,或我的應用程序。

我該如何讓第三方直接打電話給我的活動,而不用像這樣廣播意圖?我想讓他們仍然傳遞相同的確切數據給我,但讓他們直接打開我的活動。

謝謝

回答

3

你最有可能需要他們打電話給你的活動直接

Class yourClass = Class.forName("com.yourdomain.yourapp.YourClass"); 
Intent intent = new Intent(this, yourClass); 

如果他們沒有一個罐子來鏈接。否則,他們只能使用

Intent intent = new Intent(this, YourClass.class);  

然後在那裏放些額外的東西。可瀏覽意圖(和其他)的整個概念是爲用戶提供他們想要查看/使用某些內容的選擇。這與您在媒體查看器中單擊「共享」時發生的情況類似。整個概念是給他們選擇。如果有人想要開始你的活動,他們需要明確地調用它。

編輯:上面的反射示例不會直接工作,除非Dalvik類加載器知道您的類(它可能不會)。您實際上需要專門告訴虛擬機從外部程序包加載類。你可以用下面的代碼來做到這一點

Context foreignContext = createPackageContext("com.yourdomain.yourapp", Context.CONTEXT_IGNORE_SECURITY | Context.CONTEXT_INCLUDE_CODE); 
Class<?> yourClass = foreignContext.getClassLoader().loadClass("com.yourdomain.yourapp.YourClass"); 

既然他們有類對象,他們可以像以前一樣激發意圖。所以完整的代碼是類似於

Context foreignContext = createPackageContext("com.yourdomain.yourapp", Context.CONTEXT_IGNORE_SECURITY | Context.CONTEXT_INCLUDE_CODE); 
Class<?> yourClass = foreignContext.getClassLoader().loadClass("com.yourdomain.yourapp.YourClass"); 
Intent intent = new Intent(this, yourClass); 
startActivity(intent); 
+0

好吧,我不明白他們如何在他們的源代碼中指定「YourClass」 - 因爲他們不需要在他們的項目中訪問我的活動的java文件來引用它嗎?謝謝 – user246114 2010-02-21 05:08:45

+0

如果他們無法鏈接到您的庫,則可以使用反射來獲取類對象的句柄。 '類。forName(someFullyQualifiedClass)'爲全限定類名返回一個類對象。他們需要了解你的課程,但編譯器不需要。我用示例代碼更新了我的答案。 – 2010-02-21 05:18:00

+0

謝謝克里斯,那有效。如上所述讓第三方打電話給我的活動是非標準的還是不好的主意?它仍然是很好的使用意圖,我只想定義我的意圖,以便它也不會被瀏覽器應用程序解僱?例如,仍然播出了一個意圖,但是定義它的方式是沒有其他應用程序可能也會被註冊。謝謝 – user246114 2010-02-21 05:42:04

相關問題