我有一個Intent的ArrayList,我如何檢查給定位置的intent是否包含一個Activity,Service或什麼都沒有?檢查一個意圖是一個活動還是服務或沒有一個
Intent intent = intents.get(id);
context.startActivityForResult(intent,1);
你如何檢查索引ID的意圖,甚至可以適當地通過startActivityForResult
,這對活動課的重點過去了。
我有一個Intent的ArrayList,我如何檢查給定位置的intent是否包含一個Activity,Service或什麼都沒有?檢查一個意圖是一個活動還是服務或沒有一個
Intent intent = intents.get(id);
context.startActivityForResult(intent,1);
你如何檢查索引ID的意圖,甚至可以適當地通過startActivityForResult
,這對活動課的重點過去了。
那麼它不是一個完美的解決方案,但你可以嘗試讓意圖的類名是這樣的:
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
對於空的意圖,我會檢查是否爲空。
如何檢查給定位置的意圖是否包含Activity,Service或Nothing?
我打算將此解釋爲「我怎樣才能看到Intent
可以解決什麼組件?」。
如果是這樣,請使用PackageManager
和queryIntentActivities()
,queryIntentServices()
和queryBroadcastReceivers()
。請注意,Intent
可用於任何或所有這些。
你如何檢查索引ID的意圖,甚至可以適當地通過startActivityForResult通過
你不這樣做,總之找到誰寫的活動開發人員,並要求他們「哎,會這返回結果?「您可以將知名結果返回操作字符串列入白名單(例如,ACTION_PICK
,ACTION_GET_CONTENT
,ACTION_OPEN_DOCUMENT
),但您無法知道任意活動是否會返回給定Intent
的結果。
對於非活動和服務我決定檢查Component是否爲空 – CQM
@CQM:我不知道你的'Intents'是從哪裏來的,但是'Intent'不需要'ComponentName'仍然有效。 '新的Intent(Intent.ACTION_VIEW).setDataAndType(...)'沒有'ComponentName',但仍然可以解析爲一個活動,例如。 – CommonsWare
謝謝,這非常有見地。如果我的用例擴大範圍並引入故障,我會記住它。 – CQM
對於非活動和服務,我決定檢查Component是否爲null – CQM