static int getCardId(Context context) {
        ContentResolver res = context.getContentResolver();
        Cursor c = res.query(Uri.parse("content://media/external/fs_id"), null, null, null, null);
        int id = -1;
        if (c != null) {
            c.moveToFirst();
            id = c.getInt(0);
            c.close();
        }
        return id;
    }
    以上代码是com.android.music AP中的一部分。我想问下Uri.parse("content://media/external/fs_id")这个东西是是啥玩意?SDcard的序列号?还是别的什么东西?

解决方案 »

  1.   

    这是一个uri,是android规定的一组规则,具体的规则看一下android官方对uri的解释,content://media/external/fs_id:这个应该是读取一个共享的数据,是以content provider的形式提供的。
      

  2.   

    Content://media/external/fs_id
    media:媒体介质
    external:外部的
    fs_id:文件系统id从字面意思看,这个应该就是查询你有几个外部磁盘吧,然后获取磁盘的id以供后继使用
      

  3.   

        不好意思,能提供具体点的资料么?google提供的reference中找不到这个家伙。
      

  4.   

    在源码目录\packages\providers\MediaProvider\src\com\android\providers\media\MediaProvider.java
    里定义了
    URI_MATCHER.addURI("media", "*/images/media", IMAGES_MEDIA);
            URI_MATCHER.addURI("media", "*/images/media/#", IMAGES_MEDIA_ID);
            URI_MATCHER.addURI("media", "*/images/thumbnails", IMAGES_THUMBNAILS);
            URI_MATCHER.addURI("media", "*/images/thumbnails/#", IMAGES_THUMBNAILS_ID);        URI_MATCHER.addURI("media", "*/audio/media", AUDIO_MEDIA);
            URI_MATCHER.addURI("media", "*/audio/media/#", AUDIO_MEDIA_ID);
            URI_MATCHER.addURI("media", "*/audio/media/#/genres", AUDIO_MEDIA_ID_GENRES);
            URI_MATCHER.addURI("media", "*/audio/media/#/genres/#", AUDIO_MEDIA_ID_GENRES_ID);
            URI_MATCHER.addURI("media", "*/audio/media/#/playlists", AUDIO_MEDIA_ID_PLAYLISTS);
            URI_MATCHER.addURI("media", "*/audio/media/#/playlists/#", AUDIO_MEDIA_ID_PLAYLISTS_ID);
            URI_MATCHER.addURI("media", "*/audio/genres", AUDIO_GENRES);
            URI_MATCHER.addURI("media", "*/audio/genres/#", AUDIO_GENRES_ID);
            URI_MATCHER.addURI("media", "*/audio/genres/#/members", AUDIO_GENRES_ID_MEMBERS);
            URI_MATCHER.addURI("media", "*/audio/genres/#/members/#", AUDIO_GENRES_ID_MEMBERS_ID);
            URI_MATCHER.addURI("media", "*/audio/playlists", AUDIO_PLAYLISTS);
            URI_MATCHER.addURI("media", "*/audio/playlists/#", AUDIO_PLAYLISTS_ID);
            URI_MATCHER.addURI("media", "*/audio/playlists/#/members", AUDIO_PLAYLISTS_ID_MEMBERS);
            URI_MATCHER.addURI("media", "*/audio/playlists/#/members/#", AUDIO_PLAYLISTS_ID_MEMBERS_ID);
            URI_MATCHER.addURI("media", "*/audio/artists", AUDIO_ARTISTS);
            URI_MATCHER.addURI("media", "*/audio/artists/#", AUDIO_ARTISTS_ID);
            URI_MATCHER.addURI("media", "*/audio/artists/#/albums", AUDIO_ARTISTS_ID_ALBUMS);
            URI_MATCHER.addURI("media", "*/audio/albums", AUDIO_ALBUMS);
            URI_MATCHER.addURI("media", "*/audio/albums/#", AUDIO_ALBUMS_ID);
            URI_MATCHER.addURI("media", "*/audio/albumart", AUDIO_ALBUMART);
            URI_MATCHER.addURI("media", "*/audio/albumart/#", AUDIO_ALBUMART_ID);
            URI_MATCHER.addURI("media", "*/audio/media/#/albumart", AUDIO_ALBUMART_FILE_ID);        URI_MATCHER.addURI("media", "*/video/media", VIDEO_MEDIA);
            URI_MATCHER.addURI("media", "*/video/media/#", VIDEO_MEDIA_ID);
            URI_MATCHER.addURI("media", "*/video/thumbnails", VIDEO_THUMBNAILS);
            URI_MATCHER.addURI("media", "*/video/thumbnails/#", VIDEO_THUMBNAILS_ID);        URI_MATCHER.addURI("media", "*/media_scanner", MEDIA_SCANNER);        URI_MATCHER.addURI("media", "*/fs_id", FS_ID);
            URI_MATCHER.addURI("media", "*", VOLUMES_ID);
            URI_MATCHER.addURI("media", null, VOLUMES);
    URI_MATCHER.addURI("media", "*/fs_id", FS_ID);
    发现是常数
    private static final int FS_ID = 600;作用不详...
      

  5.   

        DEBUG调试了一下:
    static int getCardId(Context context) {
            ContentResolver res = context.getContentResolver();
            Cursor c = res.query(Uri.parse("content://media/external/fs_id"), null, null, null, null);
            int id = -1;
            if (c != null) {
                c.moveToFirst();
                id = c.getInt(0);//id = -1133417252
                c.close();
            }
            return id;
        }
        谁能告诉我这是怎么回事?
      

  6.   

    content://media/external/fs_idfs_id:唯一文件系统标识号,也就是定死的
    个人理解是:此URL返回Sdcard上和fs_id对应的存储路径下所有媒体文件content://media/external/fs_id此URL决定了ContentResolver 应该与哪一个ContentProvider对话即和此\packages\providers\MediaProvider\src\com\android\providers\media\MediaProvider.java对话
      

  7.   

    查询外部SD卡中的文件,fs_id就是该SD卡上所有文件实体的ID号,不是其他的抽象资源号,其他的资源号正如4楼所说的。
      

  8.   

        不好意思,没搞清楚,上次遇到这个问题,应该是在看MiediaScanner部分的源码的时候吧,后来不再关注MediaScanner的部分了,也就放弃了。