在mms这个应用,就是短信中他的androidmanifest.xml的provider中使用了隐式的intent解析content://sms/inbox这个uri。

解决方案 »

  1.   


    谢谢你的回答,我想问的是,如何得到content://sms/inbox这个uri???现在我短信收件箱是这个,但下次如果找其它资源的uri,又不会找了
      

  2.   

    在Manifest.xml文件中,注册内容提供者是一下方式:
    <provider 
            android:name=".RememberWordContentProvider" 
            android:authorities="jxt.base.contentprovider.rememberword"
            android:multiprocess="true"/>authorities这个属性定义的是每个内容提供者的唯一标志即对应于 content://sms/inbox 中的sms部分
    Android系统将部分的内容提供者的authority定义成了变量,有phone、sms等,现在忘了具体定义了,楼主可以查查一般自己定义的内容提供者,可以如下写(以上面的为例):
    content://jxt.base.contentprovider.rememberword/
    后面加的就是要操作的参数,这个参数在nrtgz中进行了匹配:如下:
    //定义匹配的变量
    private static final int TYPE = 1;
    private static final int BOOK = 2;
    private static final int WORDS = 3;//用UriMatcher进行匹配
    static{
    //常量UriMatcher.NO_MATCH表示不匹配任何路径的返回码(-1)
    uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
    /**
     * addUri方法用于添加ContentProvider的URI
     * 参数一:ContentProvider的ID
     * 参数二:表示URI的path部分,这里是要操作的表名
     * 参数三:表示与path对应的代码
     */
    uriMatcher.addURI(AUTHORITY, T_BOOK_TYPE, TYPE);
    uriMatcher.addURI(AUTHORITY, T_BOOK_INFOR, BOOK);
    uriMatcher.addURI(AUTHORITY, T_WORD_INFOR, WORDS);
    }最后用内容解析者解析时传的Uri 中的第三个参数,对应楼主的inbox最后在内容提供者的每个增删改查方法中匹配该Uri:
    int match = uriMatcher.match(uri);
    用match 和上面定义的 变量进行匹配,做相应的操作。‘大致流程就是这样,希望楼主能听懂!
      

  3.   


    请问是不是一定要把jxt.base.contentprovider.rememberword声明成名称为AUTHORITY的常量呢?
    还要是不是我们在Manifest.xml中进行声明后,其它程序如果想访问,写入我们提供的CONTENT_URI系统就会自动去找到我们的数据源??谢谢你
      

  4.   

    这个AUTHORITY名称是可以随便取得,只是用来接收这个内容提供者唯一的标志是的!必须在Manifest.xml中进行设置后,其他的应用程序才能访问,也是一种跨进程通讯的方式