protected int queryOrientationForImage(long id, CancellationSignal signal) { final ContentResolver resolver = getContext().getContentResolver(); Cursor cursor = null; try { cursor = resolver.query(Images.Media.EXTERNAL_CONTENT_URI, ImageOrientationQuery.PROJECTION, ImageColumns._ID + "=" + id, null, null); if (cursor.moveToFirst()) { return cursor.getInt(ImageOrientationQuery.ORIENTATION); } else { Log.w(TAG, "Missing orientation data for " + id); return 0; } } finally { IoUtils.closeQuietly(cursor); } }
/** * Try to return the absolute file path from the given Uri * * @param context * @param uri * @return the file path or null */ public static String getRealFilePath( final Context context, final Uri uri ) { if ( null == uri ) return null; final String scheme = uri.getScheme(); String data = null; if ( scheme == null ) data = uri.getPath(); else if ( ContentResolver.SCHEME_FILE.equals( scheme ) ) { data = uri.getPath(); } else if ( ContentResolver.SCHEME_CONTENT.equals( scheme ) ) { Cursor cursor = context.getContentResolver().query( uri, new String[] { ImageColumns.DATA }, null, null, null ); if ( null != cursor ) { if ( cursor.moveToFirst() ) { int index = cursor.getColumnIndex( ImageColumns.DATA ); if ( index > -1 ) { data = cursor.getString( index ); } } cursor.close(); } } return data; }
/** 根据Uri获取图片文件的绝对路径 */ public static String getRealFilePath(Context context, Uri uri) { if (null == uri) { return null; } final String scheme = uri.getScheme(); String data = null; if (scheme == null) { data = uri.getPath(); } else if (ContentResolver.SCHEME_FILE.equals(scheme)) { data = uri.getPath(); } else if (ContentResolver.SCHEME_CONTENT.equals(scheme)) { Cursor cursor = context.getContentResolver().query(uri, new String[] { ImageColumns.DATA }, null, null, null); if (null != cursor) { if (cursor.moveToFirst()) { int index = cursor.getColumnIndex(ImageColumns.DATA); if (index > -1) { data = cursor.getString(index); } } cursor.close(); } } return data; }
public static PhotoUpload photosCursorToSelection(Uri contentUri, Cursor cursor) { PhotoUpload item = null; try { File file = new File(cursor.getString(cursor .getColumnIndexOrThrow(ImageColumns.DATA))); if (file.exists()) { item = PhotoUpload .getSelection(contentUri, cursor.getInt(cursor .getColumnIndexOrThrow(ImageColumns._ID))); } } catch (Exception e) { e.printStackTrace(); } return item; }
/** * 获取最近使用的照片 * * @return */ public List<PhotoModel> getCurrent() { Cursor cursor = resolver.query(Media.EXTERNAL_CONTENT_URI, new String[] { ImageColumns.DATA, ImageColumns.DATE_ADDED, ImageColumns.SIZE }, null, null, ImageColumns.DATE_ADDED); if (cursor == null || !cursor.moveToNext()) return new ArrayList<PhotoModel>(); List<PhotoModel> photos = new ArrayList<PhotoModel>(); cursor.moveToLast(); do { if (cursor.getLong(cursor.getColumnIndex(ImageColumns.SIZE)) > 1024 * 10) { PhotoModel photoModel = new PhotoModel(); photoModel.setOriginalPath(cursor.getString(cursor .getColumnIndex(ImageColumns.DATA))); photos.add(photoModel); } } while (cursor.moveToPrevious()); IOUtils.closeQuietly(cursor); return photos; }
/** * 获取某个相册中的所有图片 * * @param name * @return */ public List<PhotoModel> getAlbum(String name) { Cursor cursor = resolver.query(Media.EXTERNAL_CONTENT_URI, new String[] { ImageColumns.BUCKET_DISPLAY_NAME, ImageColumns.DATA, ImageColumns.DATE_ADDED, ImageColumns.SIZE }, "bucket_display_name = ?", new String[] { name }, ImageColumns.DATE_ADDED); if (cursor == null || !cursor.moveToNext()) return new ArrayList<PhotoModel>(); List<PhotoModel> photos = new ArrayList<PhotoModel>(); cursor.moveToLast(); do { if (cursor.getLong(cursor.getColumnIndex(ImageColumns.SIZE)) > 1024 * 10) { PhotoModel photoModel = new PhotoModel(); photoModel.setOriginalPath(cursor.getString(cursor .getColumnIndex(ImageColumns.DATA))); photos.add(photoModel); } } while (cursor.moveToPrevious()); IOUtils.closeQuietly(cursor); return photos; }
public static ContentValues getContentValuesForData(String title, long date, Location location, int orientation, long jpegLength, String path, int width, int height, String mimeType) { File file = new File(path); long dateModifiedSeconds = TimeUnit.MILLISECONDS.toSeconds(file.lastModified()); ContentValues values = new ContentValues(11); values.put(ImageColumns.TITLE, title); values.put(ImageColumns.DISPLAY_NAME, title + JPEG_POSTFIX); values.put(ImageColumns.DATE_TAKEN, date); values.put(ImageColumns.MIME_TYPE, mimeType); values.put(ImageColumns.DATE_MODIFIED, dateModifiedSeconds); // Clockwise rotation in degrees. 0, 90, 180, or 270. values.put(ImageColumns.ORIENTATION, orientation); values.put(ImageColumns.DATA, path); values.put(ImageColumns.SIZE, jpegLength); setImageSize(values, width, height); if (location != null) { values.put(ImageColumns.LATITUDE, location.getLatitude()); values.put(ImageColumns.LONGITUDE, location.getLongitude()); } return values; }
public static String getMimeTypeForMedia(ContentResolver cr, int id, boolean isImage) { Cursor cursor; if(isImage) cursor = cr.query( MediaStore.Images.Media.EXTERNAL_CONTENT_URI, new String [] {MediaStore.Images.Media.MIME_TYPE}, ImageColumns._ID+" = ?", new String [] { String.valueOf(id) }, null); else cursor = cr.query( MediaStore.Video.Media.EXTERNAL_CONTENT_URI, new String [] {MediaStore.Video.Media.MIME_TYPE}, VideoColumns._ID+" = ?", new String [] { String.valueOf(id) }, null); try { if(!cursor.moveToFirst()) return null; return cursor.getString(0); } finally { cursor.close(); } }
public static String getDataFilepathForMedia(ContentResolver cr, int id, boolean isImage) { Cursor cursor; if(isImage) cursor = cr.query( MediaStore.Images.Media.EXTERNAL_CONTENT_URI, new String [] {MediaStore.Images.Media.DATA}, ImageColumns._ID+" = ?", new String [] { String.valueOf(id) }, null); else cursor = cr.query( MediaStore.Video.Media.EXTERNAL_CONTENT_URI, new String [] {MediaStore.Video.Media.DATA}, VideoColumns._ID+" = ?", new String [] { String.valueOf(id) }, null); try { if(!cursor.moveToFirst()) return null; return cursor.getString(0); } finally { cursor.close(); } }
public LocalAlbum(Path path, GalleryApp application, int bucketId, boolean isImage, String name) { super(path, nextVersionNumber()); mApplication = application; mResolver = application.getContentResolver(); mBucketId = bucketId; mName = name; mIsImage = isImage; if (isImage) { mWhereClause = ImageColumns.BUCKET_ID + " = ?"; mOrderClause = ImageColumns.DATE_TAKEN + " DESC, " + ImageColumns._ID + " DESC"; mBaseUri = Images.Media.EXTERNAL_CONTENT_URI; mProjection = LocalImage.PROJECTION; mItemPath = LocalImage.ITEM_PATH; } else { mWhereClause = VideoColumns.BUCKET_ID + " = ?"; mOrderClause = VideoColumns.DATE_TAKEN + " DESC, " + VideoColumns._ID + " DESC"; mBaseUri = Video.Media.EXTERNAL_CONTENT_URI; mProjection = LocalVideo.PROJECTION; mItemPath = LocalVideo.ITEM_PATH; } mNotifier = new ChangeNotifier(this, mBaseUri, application); }
/** * Gets the actual filename for a Uri from Gallery's ContentProvider. */ private static String getTrueFilename(Context context, Uri src) { if (context == null || src == null) { return null; } final String[] trueName = new String[1]; querySource(context, src, new String[] { ImageColumns.DATA }, new ContentResolverQueryCallback() { @Override public void onCursorResult(Cursor cursor) { trueName[0] = new File(cursor.getString(0)).getName(); } }); return trueName[0]; }
private static ContentValues getContentValues(Context context, Uri sourceUri, File file, long time) { final ContentValues values = new ContentValues(); time /= 1000; values.put(Images.Media.TITLE, file.getName()); values.put(Images.Media.DISPLAY_NAME, file.getName()); values.put(Images.Media.MIME_TYPE, "image/jpeg"); values.put(Images.Media.DATE_TAKEN, time); values.put(Images.Media.DATE_MODIFIED, time); values.put(Images.Media.DATE_ADDED, time); values.put(Images.Media.ORIENTATION, 0); values.put(Images.Media.DATA, file.getAbsolutePath()); values.put(Images.Media.SIZE, file.length()); final String[] projection = new String[] { ImageColumns.DATE_TAKEN, ImageColumns.LATITUDE, ImageColumns.LONGITUDE, }; SaveImage.querySource(context, sourceUri, projection, new ContentResolverQueryCallback() { @Override public void onCursorResult(Cursor cursor) { values.put(Images.Media.DATE_TAKEN, cursor.getLong(0)); double latitude = cursor.getDouble(1); double longitude = cursor.getDouble(2); // TODO: Change || to && after the default location // issue is fixed. if ((latitude != 0f) || (longitude != 0f)) { values.put(Images.Media.LATITUDE, latitude); values.put(Images.Media.LONGITUDE, longitude); } } }); return values; }
/** 获取最近照片列表 */ public List<PhotoModel> getCurrent() { Cursor cursor = resolver.query(Media.EXTERNAL_CONTENT_URI, new String[] { ImageColumns.DATA, ImageColumns.DATE_ADDED, ImageColumns.SIZE }, null, null, ImageColumns.DATE_ADDED); if (cursor == null || !cursor.moveToNext()) return new ArrayList<PhotoModel>(); List<PhotoModel> photos = new ArrayList<PhotoModel>(); cursor.moveToLast(); do { if (cursor.getLong(cursor.getColumnIndex(ImageColumns.SIZE)) > 1024 * 10) { PhotoModel photoModel = new PhotoModel(); photoModel.setOriginalPath(cursor.getString(cursor.getColumnIndex(ImageColumns.DATA))); photos.add(photoModel); } } while (cursor.moveToPrevious()); return photos; }
/** 获取对应相册下的照片 */ public List<PhotoModel> getAlbum(String name) { Cursor cursor = resolver.query(Media.EXTERNAL_CONTENT_URI, new String[] { ImageColumns.BUCKET_DISPLAY_NAME, ImageColumns.DATA, ImageColumns.DATE_ADDED, ImageColumns.SIZE }, "bucket_display_name = ?", new String[] { name }, ImageColumns.DATE_ADDED); if (cursor == null || !cursor.moveToNext()) return new ArrayList<PhotoModel>(); List<PhotoModel> photos = new ArrayList<PhotoModel>(); cursor.moveToLast(); do { if (cursor.getLong(cursor.getColumnIndex(ImageColumns.SIZE)) > 1024 * 10) { PhotoModel photoModel = new PhotoModel(); photoModel.setOriginalPath(cursor.getString(cursor.getColumnIndex(ImageColumns.DATA))); photos.add(photoModel); } } while (cursor.moveToPrevious()); return photos; }
/** * 获取图片的存储路径; * * @param context * @param uri * @return */ public static String getRealFilePath(Context context, Uri uri) { if (null == uri) return null; String scheme = uri.getScheme(); String data = null; if (scheme == null) data = uri.getPath(); else if (ContentResolver.SCHEME_FILE.equals(scheme)) { data = uri.getPath(); } else if (ContentResolver.SCHEME_CONTENT.equals(scheme)) { Cursor cursor = context.getContentResolver().query(uri, new String[] { ImageColumns.DATA }, null, null, null); if (null != cursor) { if (cursor.moveToFirst()) { int index = cursor.getColumnIndex(ImageColumns.DATA); if (index > -1) { data = cursor.getString(index); } } cursor.close(); } } return data; }
@Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); mPictureView = (PictureView)view.findViewById(R.id.picture); mPictureView.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { return mGestureDetector.onTouchEvent(event); } }); mPictureView.setOnAsyncCompleted(this); mPictureView.setImageAsync(mValues.getAsString(ImageColumns.DATA)); }
@Override public void onActivityResult(int requestCode, int resultCode, Intent intent) { if(requestCode == REQUEST_CODE_PHOTO_PICKER && resultCode == Activity.RESULT_OK) { Uri selectedImage = Uri.parse(intent.getStringExtra("URI")); Cursor cursor = getActivity().getContentResolver().query(selectedImage, new String[] { ImageColumns.DATA, ImageColumns.DISPLAY_NAME, ImageColumns.MIME_TYPE }, null, null, null); if (cursor != null) { cursor.moveToFirst(); } String display_name = cursor.getString(cursor.getColumnIndex(ImageColumns.DISPLAY_NAME)); String mime_type = cursor.getString(cursor.getColumnIndex(ImageColumns.MIME_TYPE)); cursor.close(); selectedAttachment = HSAttachment.createAttachment(selectedImage.toString(), display_name, mime_type); resetAttachmentImage(); } }
public static void saveBitmapInMediaStore(Context context, Bitmap bitmap, String filePath, int orientation){ File file = new File(filePath); long date = System.currentTimeMillis(); ContentValues contentValues = new ContentValues(); String mimeType = MediaUtils.getMimeType(file); contentValues.put(MediaColumns.MIME_TYPE, mimeType); contentValues.put(MediaColumns.DATA, filePath); contentValues.put(MediaColumns.SIZE, file.length()); contentValues.put(MediaColumns.TITLE, file.getName()); contentValues.put(ImageColumns.ORIENTATION, orientation); contentValues.put(MediaColumns.DATE_ADDED, date); contentValues.put(ImageColumns.DATE_TAKEN, date); contentValues.put(MediaColumns.DATE_MODIFIED, date); ContentResolver contentResolver = context.getContentResolver(); contentResolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues); MediaStore.Images.Media.insertImage(contentResolver, bitmap, file.getName(), null); }
/** * Store a picture that has just been saved to disk in the MediaStore. * * @param imageFile * The File of the picture * @return The Uri provided by the MediaStore. */ public static Uri storePicture(final Context ctx, final File imageFile, String imageName) { final ContentResolver cr = ctx.getContentResolver(); imageName = imageName.substring(imageName.lastIndexOf('/') + 1); final ContentValues values = new ContentValues(7); values.put(MediaColumns.TITLE, imageName); values.put(MediaColumns.DISPLAY_NAME, imageName); values.put(ImageColumns.DESCRIPTION, ""); values.put(ImageColumns.DATE_TAKEN, System.currentTimeMillis()); values.put(MediaColumns.MIME_TYPE, "image/jpeg"); values.put(ImageColumns.ORIENTATION, 0); final File parentFile = imageFile.getParentFile(); final String path = parentFile.toString().toLowerCase(); final String name = parentFile.getName().toLowerCase(); values.put(Images.ImageColumns.BUCKET_ID, path.hashCode()); values.put(Images.ImageColumns.BUCKET_DISPLAY_NAME, name); values.put("_data", imageFile.toString()); final Uri uri = cr.insert(Images.Media.EXTERNAL_CONTENT_URI, values); return uri; }
private boolean getInformationFromMediaDatabase() { String[] fields = { Media.DATA, ImageColumns.ORIENTATION }; Cursor cursor = resolver.query(uri, fields, null, null, null); if (cursor == null) return false; cursor.moveToFirst(); path = cursor.getString(cursor.getColumnIndex(Media.DATA)); int orientation = cursor.getInt(cursor.getColumnIndex(ImageColumns.ORIENTATION)); this.orientation = new Matrix(); this.orientation.setRotate(orientation); cursor.close(); return true; }
@Override public Cursor queryRecentDocuments(String rootId, String[] projection) throws FileNotFoundException { final ContentResolver resolver = getContext().getContentResolver(); final MatrixCursor result = new MatrixCursor(resolveDocumentProjection(projection)); final long token = Binder.clearCallingIdentity(); Cursor cursor = null; try { if (TYPE_IMAGES_ROOT.equals(rootId)) { // include all unique buckets cursor = resolver.query(Images.Media.EXTERNAL_CONTENT_URI, ImageQuery.PROJECTION, null, null, ImageColumns.DATE_MODIFIED + " DESC"); copyNotificationUri(result, Images.Media.EXTERNAL_CONTENT_URI); while (cursor.moveToNext() && result.getCount() < 64) { includeImage(result, cursor); } } else if (TYPE_VIDEOS_ROOT.equals(rootId)) { // include all unique buckets cursor = resolver.query(Video.Media.EXTERNAL_CONTENT_URI, VideoQuery.PROJECTION, null, null, VideoColumns.DATE_MODIFIED + " DESC"); copyNotificationUri(result, Video.Media.EXTERNAL_CONTENT_URI); while (cursor.moveToNext() && result.getCount() < 64) { includeVideo(result, cursor); } } else { throw new UnsupportedOperationException("Unsupported root " + rootId); } } finally { IoUtils.closeQuietly(cursor); Binder.restoreCallingIdentity(token); } return result; }
protected long getImageForPathCleared(String path) throws FileNotFoundException { final ContentResolver resolver = getContext().getContentResolver(); Cursor cursor = null; try { cursor = resolver.query(Images.Media.EXTERNAL_CONTENT_URI, ImagesBucketThumbnailQuery.PROJECTION, ImageColumns.DATA + "= ? ", new String[] { path.replaceAll("'", "''") }, ImageColumns.DATE_MODIFIED + " DESC"); if (cursor.moveToFirst()) { return cursor.getLong(ImagesBucketThumbnailQuery._ID); } } finally { IoUtils.closeQuietly(cursor); } throw new FileNotFoundException("No image found for bucket"); }
protected long getImageForBucketCleared(long bucketId) throws FileNotFoundException { final ContentResolver resolver = getContext().getContentResolver(); Cursor cursor = null; try { cursor = resolver.query(Images.Media.EXTERNAL_CONTENT_URI, ImagesBucketThumbnailQuery.PROJECTION, ImageColumns.BUCKET_ID + "=" + bucketId, null, ImageColumns.DATE_MODIFIED + " DESC"); if (cursor.moveToFirst()) { return cursor.getLong(ImagesBucketThumbnailQuery._ID); } } finally { IoUtils.closeQuietly(cursor); } throw new FileNotFoundException("No video found for bucket"); }
public LocalAlbum(Path path, MediaDataContext application, int bucketId, boolean isImage, String name) { super(path, nextVersionNumber()); mApplication = application; mResolver = application.getContentResolver(); mBucketId = bucketId; mName = name; mIsImage = isImage; if (isImage) { mWhereClause = ImageColumns.BUCKET_ID + " = ?"; mOrderClause = ImageColumns.DATE_TAKEN + " DESC, " + ImageColumns._ID + " DESC"; mBaseUri = Images.Media.EXTERNAL_CONTENT_URI; mProjection = LocalImage.PROJECTION; mItemPath = LocalImage.ITEM_PATH; } else { mWhereClause = VideoColumns.BUCKET_ID + " = ?"; mOrderClause = VideoColumns.DATE_TAKEN + " DESC, " + VideoColumns._ID + " DESC"; mBaseUri = Video.Media.EXTERNAL_CONTENT_URI; mProjection = LocalVideo.PROJECTION; mItemPath = LocalVideo.ITEM_PATH; } mNotifier = new ChangeNotifier(this, mBaseUri, application); }
@Override protected Uri doInBackground(Void... v) { File file = new File(path); long dateModifiedSeconds = TimeUnit.MILLISECONDS.toSeconds(file.lastModified()); long fileLength = file.length(); ContentValues values = new ContentValues(); // values.put(ImageColumns.TITLE, title); // values.put(ImageColumns.DISPLAY_NAME, title + JPEG_POSTFIX); values.put(ImageColumns.DATE_TAKEN, date); values.put(ImageColumns.MIME_TYPE, "image/jpeg"); values.put(ImageColumns.DATE_MODIFIED, dateModifiedSeconds); // Clockwise rotation in degrees. 0, 90, 180, or 270. values.put(ImageColumns.ORIENTATION, orientation); values.put(ImageColumns.DATA, path); values.put(ImageColumns.SIZE, fileLength); values.put(MediaColumns.WIDTH, width); values.put(MediaColumns.HEIGHT, height); if (loc != null) { values.put(ImageColumns.LATITUDE, loc.getLatitude()); values.put(ImageColumns.LONGITUDE, loc.getLongitude()); } Uri uri = null; try { uri = resolver.insert(Images.Media.EXTERNAL_CONTENT_URI, values); } catch (Throwable th) { // This can happen when the external volume is already mounted, but // MediaScanner has not notify MediaProvider to add that volume. // The picture is still safe and MediaScanner will find it and // insert it into MediaProvider. The only problem is that the user // cannot click the thumbnail to review the picture. Log.e(TAG, "Failed to write MediaStore" + th); } return uri; }