Android - Java - MediaStore - 如何在多种条件下使用选择

时间:2016-02-05 18:09:54

标签: java android android-contentresolver mediastore

我想从Android设备获取所有文档(Docs)文件。我使用ContentResolver和MediaStore.Files来实现。我可以从一种类型中获取所有文件,例如:pdf,但我想知道如何从多种类型中获取文件。

我的代码:

    String selection = MediaStore.Files.FileColumns.MIME_TYPE + "=?" +
            "";
    String[] selectionArgs = new String[] { MimeTypeMap.getSingleton().getMimeTypeFromExtension("pdf")};

    ArrayList<MyFile> list  = new ArrayList<MyFile>();

    Uri contentUri  = MediaStore.Files.getContentUri("external");


    String[] columns = {
            MediaStore.Files.FileColumns.MIME_TYPE ,
            MediaStore.Files.FileColumns.MEDIA_TYPE ,
            MediaStore.Files.FileColumns.DATA ,
    };
    String SortOrder = null;


    Cursor cursor = contentR.query(contentUri ,
            columns ,
            selection ,
            selectionArgs ,
            SortOrder);

我如何使用选择&amp; selectioArgs用于SQL中的多个条件:OR,AND ... selectionArgs将包含我正在寻找的所有文件类型:pdf,txt,doc ...

例如: Selection = MediaStore.Files.FileColumns.MIME_TYPE +&#34; =?&#34; +&#34;或&#34; + MediaStore.Files.FileColumns.MIME_TYPE +&#34; =?&#34; ;

SelectionArgs = {&#34; pdf&#34; ,&#34; txt&#34;};

感谢您的帮助或指导: - )

1 个答案:

答案 0 :(得分:0)

您只需要为每种文件类型添加更多selectionArgs。或者您只需创建一个包含所有文件类型的列表或数组作为字符串。接下来,您只需要一个循环,它将转到下一个文件类型,直到不再剩下。 例如:

<Style x:Key="MyButtonStyle" TargetType="ButtonBase">
    <Setter Property="Foreground" Value="Black"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="ButtonBase">
                <Grid x:Name="RootGrid">
                    <VisualStateManager.VisualStateGroups>
                        <VisualStateGroup x:Name="CommonStates">
                            <VisualState x:Name="Normal"/>
                            <VisualState x:Name="PointerOver">
                                <Storyboard>
                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="ContentPresenter">
                                        <DiscreteObjectKeyFrame KeyTime="0" Value="Blue" />
                                    </ObjectAnimationUsingKeyFrames>
                                </Storyboard>
                            </VisualState>
                        </VisualStateGroup>
                    </VisualStateManager.VisualStateGroups>
                    <ContentPresenter
                            x:Name="ContentPresenter"
                            Foreground="{TemplateBinding Foreground}" 
                            ContentTemplate="{TemplateBinding ContentTemplate}"
                            ContentTransitions="{TemplateBinding ContentTransitions}"
                            Content="{TemplateBinding Content}" />
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>