`
寻梦者
  • 浏览: 624957 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

对ContentProvider中getType(Uri uri)

 
阅读更多

进修了ContentProvider,想做个通信录,成果在Intent和getType(Uri uri)上卡住了,经过查找材料发了然题目的地点。在这里申明下getType(Uri uri)何时被调用,和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 ,而是经由过程设置一些Intent Filter来让体系去筛选合适的Acitivity去启动。


2、intent到底发给哪个activity,须要进行三个匹配,一个是action,一个是category,一个是data。


理论上来说,若是intent不指定category,那么无论intent filter的内容是什么都应当是匹配的。然则,若是是implicit intent,android默认给加上一个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,当然参加也没有题目。


我们定义的activity若是接管implicit intent的话,intent filer就必然要加上android.intent.category.DEFAULT这个category。


      我的题目就是呈如今这里。忘怀在intent-filter中加上了<category android:name="android.intent.category.DEFAULT" />了这个。


 


      getType(uri uri)这个办法何时被调用呢?


      当我们在法度中须要启动例外的activity时,很多时辰我们是应用的隱式調用,即我们不直接指定要跳转的Activity,而是为Intent供给一些相干的参数,让其主动去和AndroidManifest.xml中已有的Activity去匹配,而IntentFilter(Intent 过滤器)在xml中有三個首要的参数:action,categary,data。


我们经由过程Intent的机关函数或者Intent供给的办法可以指定这个三个参数,如办法有:


            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的数据怎么匹配呢,这是体系会去调用你定义的ContentProvider中的getType,取得相干的返回值來和上方的data串进行匹配,当然getType的返回成果你是须要本身去定义的。


但在法度中你也可以本身知道data的类型,就直接匹配了:intent.setType(type);

分享到:
评论
1 楼 goontosoon 2014-01-28  
抄的什么啊,狗屁不通

相关推荐

Global site tag (gtag.js) - Google Analytics