2011-10-11 59 views
1

如果第三方開發人員調用我的一個活動,是否有辦法獲取活動正在運行的進程/應用程序的簽名簽名?例如,第三方應用程序調用,像這樣我的活動之一:找出調用我的活動的應用程序的簽名簽名?

// ThirdPartyActivity.java 
Intent res = new Intent(); 
String mPackage = "com.me.test"; 
String mClass = ".MyActivity"; 
res.setComponent(new ComponentName(mPackage,mPackage+mClass)); 
startActivity(res); 

現在我的活動獲取其進程空間中創建(據我所知)。難道我然後以某種方式找出簽字的簽名是所屬加工?

// MyActivity.java 
public void onCreate() { 
    String signingSignatureOfProcessImRunningIn = ...; 
} 

我基本上看,以驗證第三方是誰,他們說他們是什麼(我知道他們簽署簽名之前,手),

感謝

回答

-1

你可以得到其意圖開始您的活動。看看這裏:http://developer.android.com/reference/android/app/Activity.html#getIntent()

我想你可以KHOW什麼活動發送此意向

============================ ===

可能還有其他方法,但我知道的唯一解決方案是讓Activity A通過startActivityForResult()調用Activity B。然後活動B可以使用getCallingActivity()來檢索活動A的身份。

希望它能幫助你!

1

AFAIK,活動默認情況下運行在相同的過程中,只要它們屬於同一個應用程序。

當安裝應用程序時,它們將獲得唯一的用戶ID,並且它的組件在單獨的進程中運行。您可以在應用程序清單中明確定義一個android:process,以便讓兩個應用程序(具有相同的進程名稱)共享一個進程/ JVM(它們還必須使用相同的密鑰進行簽名)。

更新

你並不需要通過流程來做到這一點(不反正工作)。在您的活動做到這一點:

String callingPackage = getCallingPackage(); 
PackageInfo info = getPackageManager().getPackageInfo(callingPackage, PackageManager.GET_SIGNATURES); 
Signature[] signatures = info.signatures; 
+0

這不是回答網友質疑 –

+0

的OP的前提是,他的活動被在另一個應用程序,這是他想檢查運行。這不會發生 - 被調用的活動從其自己的進程開始。這是我的觀點。 –

+0

雖然你仍然沒有解決簽名問題,這是他的實際問題。進程ID與實際問題是正交的,他/她只是以此爲例。 –

相關問題