上图: 可以通过车牌和日期进行查询
详细注解代码中看,废话不多说直接上代码:
----------------------------Main2Activity---------------------------
package com.example.zhuoshi.watermarkdemo;
import android.graphics.Bitmap;
import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import java.util.ArrayList;
public class Main2Activity extends AppCompatActivity{
private static String filePath = Environment.getExternalStorageDirectory()+"";
private static final String TAG = "Main2Activity";
private ArrayList<Bitmap> imageList = new ArrayList<>();
private EditText researchEdit;
private Button researchBtn;
private ListView listview;
private String editContent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
listview = findViewById(R.id.listview);
researchEdit = findViewById(R.id.research_edit);
researchBtn = findViewById(R.id.research_btn);
researchBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
editContent = researchEdit.getText().toString().trim();
Log.d(TAG, "onCreate: editContent:"+editContent);
if (!editContent.equals("")){
queryImage(editContent);
MyAdatpter myAdatpter = new MyAdatpter();
listview.setAdapter(myAdatpter);
}
}
});
}
private void queryImage(String editContent) {
//第一步
QueryImageUtil.getmInstance(Main2Activity.this);
//第二步
QueryImageUtil.setOnQueryListener(new QueryImageUtil.OnQueryListener() {
@Override
public void onQuerySuccess(String success) {
Toast.makeText(Main2Activity.this, success, Toast.LENGTH_SHORT).show();
}
@Override
public void onQueryFailure(String failure) {
Toast.makeText(Main2Activity.this, failure, Toast.LENGTH_SHORT).show();
}
});
//第三步
ArrayList<Bitmap> bitmaps = QueryImageUtil.initFile(filePath, editContent);
imageList = bitmaps;
}
private class MyAdatpter extends BaseAdapter{
@Override
public int getCount() {
return imageList.size();
}
@Override
public Object getItem(int i) {
return imageList.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
View mView = View.inflate(Main2Activity.this,R.layout.listview_item,null);
TextView plateTv = mView.findViewById(R.id.plate_tv);
ImageView cardImg = mView.findViewById(R.id.card_img);
plateTv.setText("");
cardImg.setImageBitmap(imageList.get(i));
return mView;
}
}
}
----------------------------QueryImageUtil---------------------------
package com.example.zhuoshi.watermarkdemo;
import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Environment;
import android.util.Log;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
/**
* Author: baipenggui
* Date: 2019/1/24 16:06
* Email: 1528354213@qq.com
* Description: 从sdcard中查询出保存的图片
*/
public class QueryImageUtil {
private static ArrayList<Bitmap> imageList = new ArrayList<>();
private static List<String> imagePathList = new ArrayList<>();
private static QueryImageUtil mInstance;
private static String mFileRootPath;
private static Bitmap bitmap;
private static String filePath;
private static Context mContext;
private static String TAG;
private static boolean successCallOne = false;//查询成功的接口只调用一侧
private static boolean failureCallOne = false;//查询成功的接口只调用一侧
private static OnQueryListener onQueryListener;
/*
*@Description: 获取查询图片的实例,这是第一步
*@Params:
*@Author: baipenggui
*@Date: 2019/1/24
*/
public static QueryImageUtil getmInstance(Context context) {
mContext = context;
if (mInstance == null) {
mInstance = new QueryImageUtil();
}
TAG = mContext.getClass().getName();
return mInstance;
}
/*
*@Description:初始化sdcard文件 这是第三步
*@Params: fileRootPath 存储文件的根路径
*@params: editcontent 输入框中的内容
*@Author: baipenggui
*@Date: 2019/1/24
*/
public static ArrayList<Bitmap> initFile(String fileRootPath, String editcontent) {
mFileRootPath = fileRootPath;
//获取路径是否成功
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
filePath = fileRootPath + "/plate/";
}
//添加之前先清空集合
imageList.clear();
//获取图片路径集合
List<String> imagePathList = getImagePathFromSD();
File mFile = new File(filePath);
//文件夹不存在则创建
if (!mFile.exists()) {
mFile.mkdir();
} else {
//遍历路径集合,判读路径找回功能是否存在输入框中获取的内容
for (int i = 0; i < imagePathList.size(); i++) {
Log.d(TAG, "imagePathList: " + imagePathList.get(i));
String imagePath = imagePathList.get(i);
if (editcontent.length() > 0 || editcontent != null) {
boolean contains = imagePath.contains(editcontent);
//如果存在,则将已存在该字段的路径通过BitmapFactory.decodeFile转化为bitmap格式,通过接口获取查询结果
if (contains) {
bitmap = BitmapFactory.decodeFile(imagePathList.get(i));
imageList.add(bitmap);
if (successCallOne == false) {
Log.d(TAG, "onQueryListener: " + onQueryListener);
if (onQueryListener != null) {
onQueryListener.onQuerySuccess("查询成功");
}
successCallOne = true;
}
} else {
if (failureCallOne == false) {
if (onQueryListener != null) {
onQueryListener.onQueryFailure("没有发现该车辆");
}
}
failureCallOne = true;
}
} else {
Log.d(TAG, "editcontent is null !");
}
}
Log.d(TAG, "imageList: " + imageList);
}
return imageList;
}
/**
* 从sd卡获取图片资源
*/
private static List<String> getImagePathFromSD() {
//添加之前先清空集合
imagePathList.clear();
// 得到sd卡内plate文件夹的路径
String filePath = mFileRootPath.toString() + File.separator + "/plate/";
// 得到该路径文件夹下所有的文件
File fileAll = new File(filePath);
File[] files = fileAll.listFiles();
// 将所有的文件存入ArrayList中,并过滤所有图片格式的文件
for (int i = 0; i < files.length; i++) {
File file = files[i];
if (checkIsImageFile(file.getPath())) {
imagePathList.add(file.getPath());
}
}
// 返回得到的图片列表
return imagePathList;
}
/**
* 检查扩展名,得到图片格式的文件
*/
@SuppressLint("DefaultLocale")
private static boolean checkIsImageFile(String fName) {
boolean isImageFile = false;
//获取扩展名
String FileEnd = fName.substring(fName.lastIndexOf(".") + 1,
fName.length()).toLowerCase();
if (FileEnd.equals("jpg") || FileEnd.equals("png") || FileEnd.equals("gif")
|| FileEnd.equals("jpeg") || FileEnd.equals("bmp")) {
isImageFile = true;
} else {
isImageFile = false;
}
return isImageFile;
}
/*
*@Description: 查询成功,失败结果的回调 这是第二步, 注意:调用接口需要在initFile()之前, 否则onQueryListener为空
*@Params:
*@Author: baipenggui
*@Date: 2019/1/24
*/
public static void setOnQueryListener(OnQueryListener onQuery) {
onQueryListener = onQuery;
}
public interface OnQueryListener {
void onQuerySuccess(String success);
void onQueryFailure(String failure);
}
}
----------------------------activity_main2.xml---------------------------
<?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"
android:orientation="vertical"
tools:context=".Main2Activity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="60dp">
<EditText
android:id="@+id/research_edit"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1" />
<Button
android:id="@+id/research_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="搜索" />
</LinearLayout>
<ListView
android:id="@+id/listview"
android:layout_width="match_parent"
android:layout_height="match_parent"></ListView>
</LinearLayout>
Demo源码 从百度云下载 ,提取码 zsix