111.Android简单的监听媒体库,查询媒体库图片、音频、文档文件

1.媒体库监听:

/**
 * 媒体库文件监听
 *
 * @author CJF
 */
public class MediaStoreChangeObserver extends ContentObserver {
    private static final String TAG = "MediaStoreChangeObserver";
    private volatile static MediaStoreChangeObserver mediaStoreChangeObserver = null;

    public static MediaStoreChangeObserver getInstance() {
        if (null == mediaStoreChangeObserver) {
            synchronized (MediaStoreChangeObserver.class) {
                if (null == mediaStoreChangeObserver) {
                    mediaStoreChangeObserver = new MediaStoreChangeObserver();
                }
            }
        }
        return mediaStoreChangeObserver;
    }

    private MediaStoreChangeObserver() {
        super(new Handler());
        RecordApp.context.getContentResolver().registerContentObserver(MediaStore.Files.getContentUri("external"), true, this);
    }

    @Override
    public void onChange(boolean selfChange, Uri uri) {
        super.onChange(selfChange, uri);
        XLog.d(TAG, "selfChange:" + selfChange + " Uri:" + uri);
       
    }

}

2.查询图片文件、查询音频文件、查询文档文件:

 /**
     * 查询图片文件
     *
     * @param context
     * @return
     */
    private List<FileBean> getAllPhoto(Context context) {
        String[] projection = new String[]{MediaStore.Images.ImageColumns._ID, MediaStore.Images.ImageColumns.DATA, MediaStore.Images.ImageColumns.DISPLAY_NAME, MediaStore.Images.ImageColumns.MIME_TYPE};
//        //相当于我们常用sql where 后面的写法
//        String selection = MediaStore.Images.ImageColumns.MIME_TYPE + "= ? "
//                + " or " + MediaStore.Images.ImageColumns.MIME_TYPE + " = ? "
//                + " or " + MediaStore.Images.ImageColumns.MIME_TYPE + " = ? "
//                + " or " + MediaStore.Images.ImageColumns.MIME_TYPE + " = ? "
//                + " or " + MediaStore.Images.ImageColumns.MIME_TYPE + " = ? "
//                + " or " + MediaStore.Images.ImageColumns.MIME_TYPE + " = ? "
//                + " or " + MediaStore.Images.ImageColumns.MIME_TYPE + " = ? ";
//
//        String[] strings = {"jpg", "svg", "png", "webp", "jpeg", "gif", "bmp"};

        //asc 按升序排列
        //    desc 按降序排列
        //projection 是定义返回的数据,selection 通常的sql 语句,例如  selection=MediaStore.Images.ImageColumns.MIME_TYPE+"=? " 那么 selectionArgs=new String[]{"jpg"};
        Cursor cursor = context.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, projection, null, null, MediaStore.Images.ImageColumns.DATE_MODIFIED + "  desc");
        List<FileBean> photos = new ArrayList<>();
        if (null == cursor) {
            return photos;
        }
        while (cursor.moveToNext()) {
            String fileId = cursor.getString(cursor.getColumnIndex(MediaStore.Images.ImageColumns._ID));
            String fileName = cursor.getString(cursor.getColumnIndex(MediaStore.Images.ImageColumns.DISPLAY_NAME));
            String filePath = cursor.getString(cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA));
            String fileType = cursor.getString(cursor.getColumnIndex(MediaStore.Images.ImageColumns.MIME_TYPE));
            Log.e(TAG, "(" + fileId + ")(" + fileName + ")(" + filePath + ")" + "(" + fileType + ")");
            FileBean fileBean = new FileBean();
            fileBean.setFilePath(filePath);
            fileBean.setFileType(1);
            photos.add(fileBean);
        }
        cursor.close();
        return photos;
    }

    /**
     * 查询音频文件
     *
     * @param context
     * @return
     */
    private List<FileBean> getAudioFiles(Context context) {
        String[] projection = new String[]{MediaStore.Audio.Media._ID, MediaStore.Audio.Media.DATA, MediaStore.Audio.Media.TITLE, MediaStore.Files.FileColumns.MIME_TYPE};
        Cursor cursor = context.getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, projection, null, null, MediaStore.Audio.AudioColumns.DATE_MODIFIED + "  desc");
        if (null == cursor) {
            return new ArrayList<>();
        }
        List<FileBean> audioList = new ArrayList<>();
        while (cursor.moveToNext()) {
            String fileId = cursor.getString(cursor.getColumnIndex(MediaStore.Files.FileColumns._ID));
            String fileName = cursor.getString(cursor.getColumnIndex(MediaStore.Files.FileColumns.TITLE));
            String filePath = cursor.getString(cursor.getColumnIndex(MediaStore.Files.FileColumns.DATA));
            String fileType = cursor.getString(cursor.getColumnIndex(MediaStore.Files.FileColumns.MIME_TYPE));
            Log.e(TAG, "(" + fileId + ")(" + fileName + ")(" + filePath + ")" + "(" + fileType + ")");
            FileBean fileBean = new FileBean();
            fileBean.setFilePath(filePath);
            fileBean.setFileType(2);
            audioList.add(fileBean);
        }
        cursor.close();
        return audioList;
    }

    /**
     * 查询文档文件
     *
     * @param context
     * @return
     */
    private List<FileBean> getAllText(Context context) {
        String[] projection = new String[]{MediaStore.Files.FileColumns._ID, MediaStore.Files.FileColumns.DATA, MediaStore.Files.FileColumns.TITLE, MediaStore.Files.FileColumns.MIME_TYPE};
//        //相当于我们常用sql where 后面的写法
        String selection = MediaStore.Files.FileColumns.MIME_TYPE + "= ? "
                + " or " + MediaStore.Files.FileColumns.MIME_TYPE + " = ? "
                + " or " + MediaStore.Files.FileColumns.MIME_TYPE + " = ? "
                + " or " + MediaStore.Files.FileColumns.MIME_TYPE + " = ? "
                + " or " + MediaStore.Files.FileColumns.MIME_TYPE + " = ? "
                + " or " + MediaStore.Files.FileColumns.MIME_TYPE + " = ? "
                + " or " + MediaStore.Files.FileColumns.MIME_TYPE + " = ? "
                + " or " + MediaStore.Files.FileColumns.MIME_TYPE + " = ? "
                + " or " + MediaStore.Files.FileColumns.MIME_TYPE + " = ? "
                + " or " + MediaStore.Files.FileColumns.MIME_TYPE + " = ? ";


        //(xls)  application/vnd.ms-excel
        //(csv) text/comma-separated-values
        //(doc) application/msword
        //(ppt) application/vnd.ms-powerpoint
        //(pdf) application/pdf
        //(txt) text/plain
        //(zip) application/zip
        //(rar) application/rar
        //(xlsx) application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
        //(docx) application/vnd.openxmlformats-officedocument.wordprocessingml.document


        String[] selectionArgs = new String[]{"application/vnd.ms-excel",
                "text/comma-separated-values",
                "application/msword",
                "application/vnd.ms-powerpoint",
                "application/pdf",
                "text/plain",
                "application/zip",
                "application/rar",
                "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
                "application/vnd.openxmlformats-officedocument.wordprocessingml.document"};
        Cursor cursor = context.getContentResolver().query(MediaStore.Files.getContentUri("external"), projection, selection, selectionArgs, MediaStore.Files.FileColumns.DATE_MODIFIED + " desc");
        if (null == cursor) {
            return new ArrayList<>();
        }
        List<FileBean> texts = new ArrayList<>();
        while (cursor.moveToNext()) {
            String fileId = cursor.getString(cursor.getColumnIndex(MediaStore.Files.FileColumns._ID));
            String fileName = cursor.getString(cursor.getColumnIndex(MediaStore.Files.FileColumns.TITLE));
            String filePath = cursor.getString(cursor.getColumnIndex(MediaStore.Files.FileColumns.DATA));
            String fileType = cursor.getString(cursor.getColumnIndex(MediaStore.Files.FileColumns.MIME_TYPE));
            Log.e(TAG, "(" + fileId + ")(" + fileName + ")(" + filePath + ")" + "(" + fileType + ")");
            FileBean fileBean = new FileBean();
            fileBean.setFilePath(filePath);
            fileBean.setFileType(3);
            texts.add(fileBean);
        }
        cursor.close();
        return texts;
    }

3.更新媒体库文件,往媒体库里插入文件,例如:

/**
 * 更新音频媒体文件
 *
 * @param path
 * @param context
 */
private void updateMedia(String path, Context context) {
    ContentValues values = new ContentValues();
    //媒体文件的标题
    values.put(MediaStore.Audio.AudioColumns.TITLE, "录音媒体文件");
    //时间戳
    values.put(MediaStore.Audio.AudioColumns.DATE_ADDED, System.currentTimeMillis() / 1000);
    //文件类型 统一通配符
    values.put(MediaStore.Audio.AudioColumns.MIME_TYPE, "audio/*");
    //指定文件路径。必须是绝对路径
    values.put(MediaStore.Audio.Media.DATA, path);
    //把文件插入到媒体库ContentProvider中
    ContentResolver resolver = context.getContentResolver();
    Uri uri = resolver.insert(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, values);
    //发送广播。通知此媒体文件已经可以用啦
    context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, uri));
}

4.FileBean:

public class FileBean {




    private String filePath;//文件路径


    private int fileType;//文件类型 1是图片 2是录音 3是文件


    private boolean isUpload;//是否已经上传

    @Generated(hash = 1718135030)
    public FileBean( String filePath, int fileType
                  ) {

        this.filePath = filePath;
        this.fileType = fileType;

    }

    @Generated(hash = 1910776192)
    public FileBean() {
    }


    public String getFilePath() {
        return this.filePath;
    }

    public void setFilePath(String filePath) {
        this.filePath = filePath;
    }

    public int getFileType() {
        return this.fileType;
    }

    public void setFileType(int fileType) {
        this.fileType = fileType;
    }

    public boolean getIsUpload() {
        return this.isUpload;
    }

    public void setIsUpload(boolean isUpload) {
        this.isUpload = isUpload;
    }

    @Override
    public String toString() {
        return "{" +
                "filePath='" + filePath + '\'' +
                ", fileType=" + fileType +
                ", isUpload=" + isUpload +
                '}';
    }

}

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在Vue.js中监听模糊查询可以使用watch监听input框的值的变化,然后通过debounce方法进行防抖处理,最后调用查询方法进行数据查询。 假设你有一个input框和一个用户列表,你想要实现根据输入框的值进行模糊查询用户的功能。首先,你需要在input框上绑定一个v-model指令,将输入的值绑定到data中: ```html <template> <div> <input v-model="keyword" type="text" placeholder="请输入关键字" /> <ul> <li v-for="user in userList" :key="user.id">{{ user.name }}</li> </ul> </div> </template> <script> export default { data() { return { keyword: "", userList: [] }; }, watch: { keyword: { handler: _.debounce(function(newVal, oldVal) { this.queryUsers(newVal); }, 300), immediate: false } }, methods: { queryUsers(keyword) { // 发送模糊查询请求,将结果保存到userList中 } } }; </script> ``` 在上面的代码中,首先绑定了一个v-model指令将input框的值绑定到keyword属性中。然后使用watch监听keyword属性的变化,通过debounce方法进行防抖处理,最后调用queryUsers方法进行数据查询。 需要注意的是,在handler函数中,使用了_.debounce方法进行防抖处理。这个方法需要引入lodash库,可以通过npm安装: ``` npm install --save lodash ``` 然后在组件中引入: ```javascript import _ from "lodash"; ``` 这样就可以实现监听模糊查询功能了。当用户在input框中输入关键字时,会触发watch监听,然后进行防抖处理,最后调用queryUsers方法进行数据查询

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值