2016-08-23 27 views
0

我有一個Intent的ArrayList,我如何檢查給定位置的intent是否包含一個Activity,Service或什麼都沒有?檢查一個意圖是一個活動還是服務或沒有一個

Intent intent = intents.get(id); 
context.startActivityForResult(intent,1); 

你如何檢查索引ID的意圖,甚至可以適當地通過startActivityForResult,這對活動課的重點過去了。

回答

2

那麼它不是一個完美的解決方案,但你可以嘗試讓意圖的類名是這樣的:

Intent it = new Intent(ctx, AnotherActivity.class); 
it.getComponent().getClassName() // output com.package.app.MainActivity 

Intent it = new Intent(ctx, JustService.class); 
it.getComponent().getClassName() // output com.package.app.JustService 

,並使用

switch (...getClassName()) { 
    case 'com.package.app.JustService' { 
     //todo 
    } 
} 

您可以使用getShortClassName()方法,它會輸出沒有默認包的類名稱:

.JustService 

對於空的意圖,我會檢查是否爲空。

+0

對於非活動和服務,我決定檢查Component是否爲null – CQM

1

如何檢查給定位置的意圖是否包含Activity,Service或Nothing?

我打算將此解釋爲「我怎樣才能看到Intent可以解決什麼組件?」。

如果是這樣,請使用PackageManagerqueryIntentActivities(),queryIntentServices()queryBroadcastReceivers()。請注意,Intent可用於任何或所有這些。

你如何檢查索引ID的意圖,甚至可以適當地通過startActivityForResult通過

你不這樣做,總之找到誰寫的活動開發人員,並要求他們「哎,會這返回結果?「您可以將知名結果返回操作字符串列入白名單(例如,ACTION_PICK,ACTION_GET_CONTENT,ACTION_OPEN_DOCUMENT),但您無法知道任意活動是否會返回給定Intent的結果。

+0

對於非活動和服務我決定檢查Component是否爲空 – CQM

+0

@CQM:我不知道你的'Intents'是從哪裏來的,但是'Intent'不需要'ComponentName'仍然有效。 '新的Intent(Intent.ACTION_VIEW).setDataAndType(...)'沒有'ComponentName',但仍然可以解析爲一個活動,例如。 – CommonsWare

+0

謝謝,這非常有見地。如果我的用例擴大範圍並引入故障,我會記住它。 – CQM

相關問題