Android笔记--通过MediaStore查询图片

相关描述

已经完成发送彩信功能之后,就来继续向前走一步,来到MediaStore查询图片界面啦!

具体步骤实现

1、简简单单地一个界面

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".check"
    android:orientation="vertical">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="点击下方图片发送:">

    </TextView>

    <GridLayout
        android:id="@+id/gl"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

    </GridLayout>

</LinearLayout>

2、后台代码

package com.example.myapplication;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.Manifest;
import android.annotation.SuppressLint;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.ImageDecoder;
import android.media.MediaScannerConnection;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.util.Log;
import android.widget.GridLayout;
import android.widget.ImageView;

import java.util.ArrayList;

public class check extends AppCompatActivity {

    private static final String[] PERMISSIONS=new String[]{
            Manifest.permission.READ_EXTERNAL_STORAGE
    };

    private static final int REQUEST_ALL_CODES=1;


    private ArrayList<ImageInfo> list=new ArrayList<>();

    private GridLayout gl;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_check);

        //手动扫描图片入库
        MediaScannerConnection.scanFile(this,new String[]{
                Environment.getExternalStorageState().toString()
        },null,null);

//        gl=findViewById(R.id.gl);
//
//
//        //加载图片列表
//        loadImageList();
//
//        //显示图像网络
//        showImageGrid();
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);

        if(requestCode==REQUEST_ALL_CODES){
            //加载图片列表
            loadImageList();

            //显示图像网络
            showImageGrid();
        }
    }

    //显示图像网络
    private void showImageGrid() {
        //清空
        gl.removeAllViews();

        for(ImageInfo info:list){
            ImageView view=new ImageView(this);

            Bitmap bitMap=BitmapFactory.decodeFile(info.path);
            view.setImageBitmap(bitMap);

            //设置图片的缩放类型
            view.setScaleType(ImageView.ScaleType.FIT_CENTER);

            //设置点击事件
            view.setOnClickListener(v->{

            });
            //将图片添加到网络布局
            gl.addView(view);

        }

    }

    //加载图片列表
    @SuppressLint("Range")
    private void loadImageList() {
        //MediaStore
        String[] columns=new String[]{
                MediaStore.Images.Media._ID,//图片编号
                MediaStore.Images.Media.TITLE,//图片标题
                MediaStore.Images.Media.SIZE,//图片大小
                MediaStore.Images.Media.DATA//图片路径
        };

        Cursor cursor=getContentResolver().query(
                MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
                columns,
                "_size < 307200",
                null,
                "_size DESC"
        );

        int count=0;
        if(cursor!=null){
            while (cursor.moveToNext() && count < 6) {
                ImageInfo info=new ImageInfo();
                info.id=cursor.getLong(cursor.getColumnIndex(MediaStore.Images.Media._ID));
                info.name=cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.TITLE));
                info.size=cursor.getLong(cursor.getColumnIndex(MediaStore.Images.Media.SIZE));
                info.path=cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA));

                count++;
                list.add(info);
                Log.d("ning","images:"+info.toString());

            }
        }

    }
}

3、实体类代码

package com.example.myapplication;

public class ImageInfo {
    @Override
    public String toString() {
        return "ImageInfo{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                ", size='" + size + '\'' +
                ", path='" + path + '\'' +
                '}';
    }

    public long id;
    public String name;
    public long size;
    public String path;
}

4、特殊情况说明

扫描完成再去请求权限:

这里就直接用null代替了那个callback

我们需要保证在出现图片的时候,图片能够进入数据库,但是他需要我们手动调节,不,手动扫描入库:

posted @ 2023-02-25 10:18  yesyes1  阅读(60)  评论(0编辑  收藏  举报