日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android踩坑日记:监听软键盘多次调用和刷新系统相册和获取所有相片

發(fā)布時(shí)間:2025/3/20 Android 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android踩坑日记:监听软键盘多次调用和刷新系统相册和获取所有相片 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

EditText設(shè)置監(jiān)聽軟鍵盤刪除鍵(或enter)

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

  • 爬坑姿勢(shì):

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

刷新系統(tǒng)相冊(cè)

當(dāng)我們?cè)谙到y(tǒng)的相冊(cè)中增加或者刪除圖片,需要再次獲取系統(tǒng)相冊(cè)的所有圖片時(shí),需要通知系統(tǒng)刷新一下系統(tǒng)相冊(cè)

/*通知系統(tǒng)刷新相冊(cè)*/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) {//對(duì)于android M及更高版本,intent需要提供URI相關(guān)權(quán)限以操作文件//文件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;}

獲取系統(tǒng)所有圖片和按相冊(cè)名分類

/*本地相片文件描述類*/ public class LocalPhotoBean implements Serializable{/** 系統(tǒng)數(shù)據(jù)庫中的id */public long mediaId;/*文件名*/public String fileName;/*文件路徑*/public String path;/*縮略圖路徑*/public String thumbNailPath;/*文件大小*/public long fileSize;/*所屬文件夾名稱*/public String albumName;/*文件夾識(shí)別id*/public String albumId;/*緩存用于顯示的路徑*/private String showPicPath; } /*相冊(cè)文件夾描述類*/ public class PhotoAlbumBean implements Serializable{/*文件夾識(shí)別Id*/public String albumId;/*文件夾名稱*/public String albumName;/*文件夾封面路徑*/public String albumCoverPath;/*文件夾封面縮略圖路徑*/public String albumCoverThumbNailPath;/*文件夾包含的圖片*/public ArrayList<LocalPhotoBean> imageList;/*緩存的用于顯示的路徑*/private String showPicPath;}/*查詢返回結(jié)果集*/public static class LocalPhotoDataList{//所有圖片列表public ArrayList<LocalPhotoBean> photoList;//相冊(cè)文件夾列表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 {//需要查詢的數(shù)據(jù)'String[] queryColumns={MediaStore.Images.ImageColumns.DISPLAY_NAME,//圖片名MediaStore.Images.ImageColumns.DATA,//圖片路徑MediaStore.Images.ImageColumns._ID,//圖片數(shù)據(jù)庫MediaStore.Images.ImageColumns.BUCKET_ID,//圖片所在文件夾IdMediaStore.Images.ImageColumns.BUCKET_DISPLAY_NAME,//圖片所在文件夾文件名MediaStore.Images.ImageColumns.SIZE,//圖片大小MediaStore.Images.ImageColumns.MIME_TYPE,//圖片格式MediaStore.Images.ImageColumns.MINI_THUMB_MAGIC,//縮略圖IdMediaStore.Images.ImageColumns.DATE_MODIFIED//修改時(shí)間};//查詢的條件String selection=MediaStore.Images.ImageColumns.SIZE +" >= ? AND "+MediaStore.Images.ImageColumns.MIME_TYPE + " != ? ";//排序規(guī)則 修改時(shí)間降序排列String orderBy=MediaStore.Images.ImageColumns.DATE_MODIFIED+" DESC";String[] args=new String[]{String.valueOf(minImageSize),"image/gif"};//查詢資源數(shù)據(jù)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))/*暫時(shí)縮略圖*/;photoList.add(photoItem);//刷新文件夾集合數(shù)據(jù)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());}/*相冊(cè)文件夾列表*/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;}

總結(jié)

以上是生活随笔為你收集整理的Android踩坑日记:监听软键盘多次调用和刷新系统相册和获取所有相片的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。