一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

【原】對ContentProvider中g(shù)etType(Uri uri)和android....

 techres 2012-02-13

學(xué)習(xí)了ContentProvider,想做個通訊錄,結(jié)果在Intent和getType(Uri uri)上卡住了,經(jīng)過查找資料發(fā)現(xiàn)了問題的所在。在這里解釋下getType(Uri uri)何時被調(diào)用,和android.intent.category.DEFAULT 的理解。

     我們需要什么時候加android.intent.category.DEFAULT呢?

1、要弄清楚這個問題,首先需要弄明白什么是implicit(隱藏) intent什么是explicit(明確) intent。

     Explicit Intent明確的指定了要啟動的Acitivity ,比如以下Java代碼: 
             Intent intent= new Intent(this, B.class)

     Implicit Intent沒有明確的指定要啟動哪個Activity ,而是通過設(shè)置一些Intent Filter來讓系統(tǒng)去篩選合適的Acitivity去啟動。

2、intent到底發(fā)給哪個activity,需要進(jìn)行三個匹配,一個是action,一個是category,一個是data。

理論上來說,如果intent不指定category,那么無論intent filter的內(nèi)容是什么都應(yīng)該是匹配的。但是,如果是implicit intent,android默認(rèn)給加上一個CATEGORY_DEFAULT,這樣的話如果intent filter中沒有android.intent.category.DEFAULT這個category的話,匹配測試就會失敗。所以,如果你的 activity支持接收implicit intent的話就一定要在intent filter中加入android.intent.category.DEFAULT。

例外情況是:android.intent.category.MAIN和android.intent.category.LAUNCHER的filter中沒有必要加入android.intent.category.DEFAULT,當(dāng)然加入也沒有問題。

我們定義的activity如果接受implicit intent的話,intent filer就一定要加上android.intent.category.DEFAULT這個category。

      我的問題就是出現(xiàn)在這里。忘記在intent-filter中加上了<category android:name="android.intent.category.DEFAULT" />了這個。

  

      getType(uri uri)這個方法何時被調(diào)用呢?

      當(dāng)我們在程序中需要啟動例外的activity時,很多時候我們是使用的隱式調(diào)用,即我們不直接指定要跳轉(zhuǎn)的Activity,而是為Intent提供一些相關(guān)的參數(shù),讓其自動去和AndroidManifest.xml中已有的Activity去匹配,而IntentFilter(Intent 過濾器)在xml中有三個主要的參數(shù):action,categary,data。

我們通過Intent的構(gòu)造函數(shù)或者Intent提供的方法可以指定這個三個參數(shù),如方法有:

            intent.setAction(action);
            intent.setData(data);
            intent.addCategory(category);

等,比如在記事本程序中有:

         <intent-filter android:label="@string/resolve_edit">
                <action android:name="android.intent.action.VIEW" />
                <action android:name="android.intent.action.EDIT" />
                <action android:name="com.android.notepad.action.EDIT_NOTE" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:mimeType="vnd.android.cursor.item/vnd.google.note" />
            </intent-filter>

我們很容易看出action和category是很容易匹配的,而我們傳的Uri的數(shù)據(jù)怎么匹配呢,這是系統(tǒng)會去調(diào)用你定義的ContentProvider中的getType,取得相關(guān)的返回值來和上面的data串進(jìn)行匹配,當(dāng)然getType的返回結(jié)果你是需要自己去定義的。

但在程序中你也可以自己知道data的類型,就直接匹配了:intent.setType(type);

標(biāo)簽: android

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    高潮日韩福利在线观看| 在线观看视频日韩成人| 人妻人妻人人妻人人澡| 国产老熟女乱子人伦视频| 天海翼高清二区三区在线| 草草视频精品在线观看| 日本中文在线不卡视频| 精品老司机视频在线观看| 东京热一二三区在线免| 最近最新中文字幕免费| 日韩中文字幕狠狠人妻| 伊人久久五月天综合网| 欧美成人黄色一区二区三区| 中文字幕不卡欧美在线| 欧美日韩亚洲精品在线观看| 妻子的新妈妈中文字幕| 九九热这里只有免费精品| 亚洲精品一区三区三区| 国产高清精品福利私拍| 国产韩国日本精品视频| 东京热电东京热一区二区三区| 人妻一区二区三区在线| 大香蕉久久精品一区二区字幕| 国产欧美日韩一级小黄片| 久久精品亚洲欧美日韩| 久久夜色精品国产高清不卡| 大香蕉网国产在线观看av| 中国少妇精品偷拍视频 | 国产精品一区二区三区激情| 精品一区二区三区三级视频| 日本91在线观看视频| 黄色污污在线免费观看| 亚洲男人天堂成人在线视频| 欧美整片精品日韩综合| 亚洲最新的黄色录像在线| 日本午夜乱色视频在线观看| 日本一品道在线免费观看| 最好看的人妻中文字幕| 中文字幕免费观看亚洲视频| 欧美中文日韩一区久久| 日本高清一区免费不卡|