Android踩坑日記:監聽軟鍵盤多次調用和刷新系統相冊和獲取所有相片


EditText設置監聽軟鍵盤刪除鍵(或enter)

  • 一般使用方法
edittext.setOnKeyListener(new View.OnKeyListener(){
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_DEL ){
//處理操作
}
}
});
  • 問題:
    當點擊軟鍵盤的刪除鍵時,處理操作會只執行兩次或多次

  • 爬坑姿勢:

edittext.setOnKeyListener(new View.OnKeyListener(){
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
/*必須是這兩個條件,否則會執行多次*/
if (keyCode == KeyEvent.KEYCODE_DEL && event.getAction()==KeyEvent.ACTION_DOWN){
//處理操作
}
}
});

刷新系統相冊

當我們在系統的相冊中增加或者刪除圖片,需要再次獲取系統相冊的所有圖片時,需要通知系統刷新一下系統相冊


/*通知系統刷新相冊*/
public static void noticeSystemRefreshAlbum(Context context,String path){

Intent mediaScanIntent=new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
Uri uri=null;
if (path!=null){
uri= Uri.fromFile(new File(path));
}

mediaScanIntent.setData(uri);
mediaScanIntent = PermissionUtil.getUriAuthority(mediaScanIntent);
context.sendBroadcast(mediaScanIntent);
}

public static Intent getUriAuthority(Intent intent) {
//對於android M及更高版本,intent需要提供URI相關權限以操作文件
//文件uri需要通過FileProvider獲取
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.M) {
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
}
return intent;
}

獲取系統所有圖片和按相冊名分類

/*本地相片文件描述類*/
public class LocalPhotoBean implements Serializable{

/** 系統數據庫中的id */
public long mediaId;
/*文件名*/
public String fileName;
/*文件路徑*/
public String path;
/*縮略圖路徑*/
public String thumbNailPath;
/*文件大小*/
public long fileSize;
/*所屬文件夾名稱*/
public String albumName;
/*文件夾識別id*/
public String albumId;

/*緩存用於顯示的路徑*/
private String showPicPath;
}
/*相冊文件夾描述類*/
public class PhotoAlbumBean implements Serializable{
/*文件夾識別Id*/
public String albumId;
/*文件夾名稱*/
public String albumName;
/*文件夾封面路徑*/
public String albumCoverPath;
/*文件夾封面縮略圖路徑*/
public String albumCoverThumbNailPath;
/*文件夾包含的圖片*/
public ArrayList<LocalPhotoBean> imageList;

/*緩存的用於顯示的路徑*/
private String showPicPath;
}

/*查詢返回結果集*/
public static class LocalPhotoDataList{
//所有圖片列表
public ArrayList<LocalPhotoBean> photoList;
//相冊文件夾列表
public ArrayList<PhotoAlbumBean> albumList;

public LocalPhotoDataList(ArrayList<LocalPhotoBean> photoList, ArrayList<PhotoAlbumBean> albumList) {
this.photoList = photoList;
this.albumList = albumList;
}
}

/**
* 通過ContentResolver ,查詢本地圖片信息
* @param resolver
* @return
*/

public static LocalPhotoDataList getLocalPhotos(ContentResolver resolver, int minImageSize){
ArrayList<LocalPhotoBean> photoList=new ArrayList<>();
HashMap<String ,PhotoAlbumBean> albumMap=new HashMap<>();
ArrayList<PhotoAlbumBean> albumList=new ArrayList<>();

Cursor cursor=null;
try {
//需要查詢的數據'
String[] queryColumns={
MediaStore.Images.ImageColumns.DISPLAY_NAME,//圖片名
MediaStore.Images.ImageColumns.DATA,//圖片路徑
MediaStore.Images.ImageColumns._ID,//圖片數據庫
MediaStore.Images.ImageColumns.BUCKET_ID,//圖片所在文件夾Id
MediaStore.Images.ImageColumns.BUCKET_DISPLAY_NAME,//圖片所在文件夾文件名
MediaStore.Images.ImageColumns.SIZE,//圖片大小
MediaStore.Images.ImageColumns.MIME_TYPE,//圖片格式
MediaStore.Images.ImageColumns.MINI_THUMB_MAGIC,//縮略圖Id
MediaStore.Images.ImageColumns.DATE_MODIFIED//修改時間
};
//查詢的條件
String selection=MediaStore.Images.ImageColumns.SIZE +" >= ? AND "+MediaStore.Images.ImageColumns.MIME_TYPE + " != ? ";
//排序規則 修改時間降序排列
String orderBy=MediaStore.Images.ImageColumns.DATE_MODIFIED+" DESC";

String[] args=new String[]{String.valueOf(minImageSize),"image/gif"};
//查詢資源數據
cursor=resolver.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,queryColumns,selection,args,orderBy);
if (cursor!=null&&cursor.moveToFirst()){
int IndexName=cursor.getColumnIndex(MediaStore.Images.ImageColumns.DISPLAY_NAME);
int IndexPath=cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
int IndexId=cursor.getColumnIndex(MediaStore.Images.ImageColumns._ID);
int IndexBucket=cursor.getColumnIndex(MediaStore.Images.ImageColumns.BUCKET_ID);
int IndexBucketName=cursor.getColumnIndex(MediaStore.Images.ImageColumns.BUCKET_DISPLAY_NAME);
int IndexSize=cursor.getColumnIndex(MediaStore.Images.ImageColumns.SIZE);
int IndexThumbId=cursor.getColumnIndex(MediaStore.Images.ImageColumns.MINI_THUMB_MAGIC);

do{

LocalPhotoBean photoItem=new LocalPhotoBean()
.setMediaId(cursor.getLong(IndexId))
.setFileName(cursor.getString(IndexName))
.setPath(cursor.getString(IndexPath))
.setAlbumName(cursor.getString(IndexBucketName))
.setAlbumId(cursor.getString(IndexBucket))
.setFileSize(cursor.getLong(IndexSize))
/*暫時縮略圖*/
;
photoList.add(photoItem);
//刷新文件夾集合數據
PhotoAlbumBean photoAlbum=albumMap.get(photoItem.albumId);
if (photoAlbum==null){
photoAlbum=PhotoAlbumBean.getInstance(photoItem.albumName,photoItem.albumId);
albumMap.put(photoItem.albumId,photoAlbum);
}
photoAlbum.addItem(photoItem);

}while (cursor.moveToNext());
}
/*相冊文件夾列表*/
albumList.addAll(albumMap.values());
/*排序*/
Collections.sort(albumList);

return new LocalPhotoDataList(photoList, albumList);
}catch (SecurityException se) {

} catch (Exception e) {
e.printStackTrace();
LogUtils.d(ApiConstants.MEDIA_LOG_TAG, "Error getLocalPhotos");
} finally {
if (cursor != null) {
cursor.close();
}
}
return null;
}

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
  © 2014-2022 ITdaan.com 联系我们: