category android:name=android.intent.category.DEFAULT / 惹的祸
生活随笔
收集整理的這篇文章主要介紹了
category android:name=android.intent.category.DEFAULT / 惹的祸
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
今天我自己定義了Intent的Action,可在把這個(gè)Action寫(xiě)入manifest的時(shí)候,沒(méi)有注意到需要加入<category android:name="android.intent.category.DEFAULT" />,調(diào)試了好久才發(fā)現(xiàn)需要加入它,才能讓系統(tǒng)找到你定義的Action對(duì)應(yīng)的Activity,不然會(huì)一直報(bào)找不到Activity的。
下面摘自:http://dev.10086.cn/cmdn/wiki/index.php?doc-view-4941.html
1、要弄清楚這個(gè)問(wèn)題,首先需要弄明白什么是implicit(隱藏) intent什么是explicit(明確) intent。
Explicit Intent明確的指定了要啟動(dòng)的Acitivity ,比如以下Java代碼:
Intent intent= new Intent(this, B.class)
Implicit Intent沒(méi)有明確的指定要啟動(dòng)哪個(gè)Activity ,而是通過(guò)設(shè)置一些Intent Filter來(lái)讓系統(tǒng)去篩選合適的Acitivity去啟動(dòng)。
2、intent到底發(fā)給哪個(gè)activity,需要進(jìn)行三個(gè)匹配,一個(gè)是action,一個(gè)是category,一個(gè)是data。
理論上來(lái)說(shuō),如果intent不指定category,那么無(wú)論intent filter的內(nèi)容是什么都應(yīng)該是匹配的。但是,如果是implicit intent,Android默認(rèn)給加上一個(gè)CATEGORY_DEFAULT,這樣的話如果intent filter中沒(méi)有android.intent.category.DEFAULT這個(gè)category的話,匹配測(cè)試就會(huì)失敗。所以,如果你的 activity支持接收implicit intent的話就一定要在intent filter中加入android.intent.category.DEFAULT。
例外情況是:android.intent.category.MAIN和android.intent.category.LAUNCHER的filter中沒(méi)有必要加入android.intent.category.DEFAULT,當(dāng)然加入也沒(méi)有問(wèn)題。
我們定義的activity如果接受implicit intent的話,intent filer就一定要加上android.intent.category.DEFAULT這個(gè)category。
來(lái)自另一篇文章的解釋:
在寫(xiě) AndroidManifest.xml 的時(shí)候,一直沒(méi)有搞明白,什么時(shí)候要給 Activityandroid.intent.category.DEFAULT 過(guò)濾器,現(xiàn)在才明白。
--------------------------------------------------------------------------------
Android treats all implicit intents passed to startActivity() as if they contained at least one category: "android.intent.category.DEFAULT" (the CATEGORY_DEFAULT constant). Therefore, activities that are willing to receive implicit intents must include "android.intent.category.DEFAULT" in their intent filters
--------------------------------------------------------------------------------
意思是說(shuō),每一個(gè)通過(guò) startActivity() 方法發(fā)出的隱式 Intent 都至少有一個(gè) category,就是 "android.intent.category.DEFAULT",所以只要是想接收一個(gè)隱式 Intent 的 Activity 都應(yīng)該包括 "android.intent.category.DEFAULT" category,不然將導(dǎo)致 Intent 匹配失敗。
從上面的論述還可以獲得以下信息:
1、一個(gè) Intent 可以有多個(gè) category,但至少會(huì)有一個(gè),也是默認(rèn)的一個(gè) category。
2、只有 Intent 的所有 category 都匹配上,Activity 才會(huì)接收這個(gè) Intent。
下面摘自:http://dev.10086.cn/cmdn/wiki/index.php?doc-view-4941.html
1、要弄清楚這個(gè)問(wèn)題,首先需要弄明白什么是implicit(隱藏) intent什么是explicit(明確) intent。
Explicit Intent明確的指定了要啟動(dòng)的Acitivity ,比如以下Java代碼:
Intent intent= new Intent(this, B.class)
Implicit Intent沒(méi)有明確的指定要啟動(dòng)哪個(gè)Activity ,而是通過(guò)設(shè)置一些Intent Filter來(lái)讓系統(tǒng)去篩選合適的Acitivity去啟動(dòng)。
2、intent到底發(fā)給哪個(gè)activity,需要進(jìn)行三個(gè)匹配,一個(gè)是action,一個(gè)是category,一個(gè)是data。
理論上來(lái)說(shuō),如果intent不指定category,那么無(wú)論intent filter的內(nèi)容是什么都應(yīng)該是匹配的。但是,如果是implicit intent,Android默認(rèn)給加上一個(gè)CATEGORY_DEFAULT,這樣的話如果intent filter中沒(méi)有android.intent.category.DEFAULT這個(gè)category的話,匹配測(cè)試就會(huì)失敗。所以,如果你的 activity支持接收implicit intent的話就一定要在intent filter中加入android.intent.category.DEFAULT。
例外情況是:android.intent.category.MAIN和android.intent.category.LAUNCHER的filter中沒(méi)有必要加入android.intent.category.DEFAULT,當(dāng)然加入也沒(méi)有問(wèn)題。
我們定義的activity如果接受implicit intent的話,intent filer就一定要加上android.intent.category.DEFAULT這個(gè)category。
來(lái)自另一篇文章的解釋:
在寫(xiě) AndroidManifest.xml 的時(shí)候,一直沒(méi)有搞明白,什么時(shí)候要給 Activityandroid.intent.category.DEFAULT 過(guò)濾器,現(xiàn)在才明白。
--------------------------------------------------------------------------------
Android treats all implicit intents passed to startActivity() as if they contained at least one category: "android.intent.category.DEFAULT" (the CATEGORY_DEFAULT constant). Therefore, activities that are willing to receive implicit intents must include "android.intent.category.DEFAULT" in their intent filters
--------------------------------------------------------------------------------
意思是說(shuō),每一個(gè)通過(guò) startActivity() 方法發(fā)出的隱式 Intent 都至少有一個(gè) category,就是 "android.intent.category.DEFAULT",所以只要是想接收一個(gè)隱式 Intent 的 Activity 都應(yīng)該包括 "android.intent.category.DEFAULT" category,不然將導(dǎo)致 Intent 匹配失敗。
從上面的論述還可以獲得以下信息:
1、一個(gè) Intent 可以有多個(gè) category,但至少會(huì)有一個(gè),也是默認(rèn)的一個(gè) category。
2、只有 Intent 的所有 category 都匹配上,Activity 才會(huì)接收這個(gè) Intent。
總結(jié)
以上是生活随笔為你收集整理的category android:name=android.intent.category.DEFAULT / 惹的祸的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: java.lang.OutOfMemor
- 下一篇: no signatures that m