相关描述

已经完成发送彩信功能之后,就来继续向前走一步,来到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

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

Android笔记--通过MediaStore查询图片的更多相关文章

  1. Android学习笔记进阶之在图片上涂鸦(能清屏)

    Android学习笔记进阶之在图片上涂鸦(能清屏) 2013-11-19 10:52 117人阅读 评论(0) 收藏 举报 HandWritingActivity.java package xiaos ...

  2. Android笔记之使用Glide加载网络图片、下载图片

    Glide简介 不想说太多,真的很方便:P)可以节省我不少时间 GitHub地址:https://github.com/bumptech/glide 加载网络图片到ImageView Glide.wi ...

  3. Android笔记(二十八) Android中图片之简单图片使用

    用户界面很大程度上决定了APP是否被用户接收,为了提供友好的界面,就需要在应用中使用图片了,Android提供了丰富的图片处理功能. 简单使用图片 使用Drawable对象 为Android应用增加了 ...

  4. Android笔记——Android中数据的存储方式(二)

    我们在实际开发中,有的时候需要储存或者备份比较复杂的数据.这些数据的特点是,内容多.结构大,比如短信备份等.我们知道SharedPreferences和Files(文本文件)储存这种数据会非常的没有效 ...

  5. Android相机、相册获取图片显示并保存到SD卡

    Android相机.相册获取图片显示并保存到SD卡 [复制链接]   电梯直达 楼主    发表于 2013-3-13 19:51:43 | 只看该作者 |只看大图  本帖最后由 happy小妖同学 ...

  6. (转)Android学习-使用Async-Http实现图片压缩并上传功能

    (转)Android学习-使用Async-Http实现图片压缩并上传功能 文章转载自:作者:RyaneLee链接:http://www.jianshu.com/p/940fc7ba39e1 让我头疼一 ...

  7. Android 笔记之 Android 系统架构

    Android笔记之Android系统架构 h2{ color: #4abcde; } a{ color: blue; text-decoration: none; } a:hover{ color: ...

  8. Android 使用GridView+仿微信图片上传功能(附源代码)

    由于工作要求最近在使用GridView完成图片的批量上传功能,我的例子当中包含仿微信图片上传.拍照.本地选择.相片裁剪等功能,如果有需要的朋友可以看一下,希望我的实际经验能对您有所帮助. 直接上图,下 ...

  9. Android笔记--自定义控件仿遥控器的圆形上下左右OK圆盘按钮

    原文:Android笔记--自定义控件仿遥控器的圆形上下左右OK圆盘按钮 上面就是几张预览图!代码在最底下 主要就两个步骤,画图.监听点击 1.整个控件基本上是一步步画出来的,重写onDraw方法开始 ...

  10. Qt for Android (三) 打开Android相册并选一个图片进行显示

    Qt for Android (三) 这两天弄了一下android相册的相关功能.还是花了挺长时间的,这里总结一下,避免以后再踩坑.同时也在这篇文章里面补齐一些android开发的基础支持 打开And ...

随机推荐

  1. postman导出Collection文件

    postman接口调用工具可以将曾经使用过的请求配置导出为文件保存,方法如下: 1.编写一个接口测试用例 2.按组分类 3.导出 参考来源: https://blog.csdn.net/IBLiplu ...

  2. 链表与malloc的疑惑

    1.奇怪点:如果我只是需要一个结点的空间为什么malloc的转换形式写成--Node=(int *)malloc(sizeof(int)) 自我解答:void *malloc(unsigned int ...

  3. windows安装kafka

    1.软件下载 kafka运行需要有jdk+zookeeper环境才能够使用,官网下载 https://www.apache.org/dyn/closer.cgi/zookeeper/ http://k ...

  4. 微软开源 Python 自动化神器 Playwright

    背景 逛博客时候突然看到 Playwright web自动化,感觉很有意思,就翻看了很多博客,简单记录一下. 简介 Playwright是一个强大的Python库,仅用一个API即可自动执行Chrom ...

  5. pyahocorasick 安装和使用问题总结

    因系统中用到了ahocorasick,但是程序跑起来有BUG,故而10.1假期研究了一下,趟过几个坑,分享一下. 一.安装过程中的坑 直接安装pip install  pyahocorasick 是会 ...

  6. sql server 01

    1. 数据库管理系统(DateBase Management System )DBMS 是专门为管理数据库而设计的一个电脑软件系统 分为两种: (1)关系数据库:建立在关系模型基础上的数据库,比如 S ...

  7. vue3.0+vite按需引入element plus

    1.安装vite-plugin-style-import yarn add vite-plugin-style-import -D 2.在项目根目录下的vite.config.js中配置 import ...

  8. DataRow[]数组转换为DataTable

    DataRow[] drData=DataTable.Select("....."); DataTable dtNew=drData.CopyToDataTable(); 注:Da ...

  9. typora基础语法

    Markdown学习 标题 三级标题 #加空格加你要的文字 字体 加粗 hello world!(前后两个**) hello world!(前后一个**) hello world!(前后三个***) ...

  10. 几个Python线程坑,和连接池的坑

    urlretrieve 没有超时,需要通过socket来设置 socket.setdefaulttimeout(10) 而且还需要为他设置连接池,所以直接改用requests来下载文件 def dow ...