protected long getVideoForBucketCleared(long bucketId) throws FileNotFoundException { final ContentResolver resolver = getContext().getContentResolver(); Cursor cursor = null; try { cursor = resolver.query(Video.Media.EXTERNAL_CONTENT_URI, VideosBucketThumbnailQuery.PROJECTION, VideoColumns.BUCKET_ID + "=" + bucketId, null, VideoColumns.DATE_MODIFIED + " DESC"); if (cursor.moveToFirst()) { return cursor.getLong(VideosBucketThumbnailQuery._ID); } } finally { IoUtils.closeQuietly(cursor); } throw new FileNotFoundException("No video found for bucket"); }
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); }
@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 getVideoForPathCleared(String path)throws FileNotFoundException { final ContentResolver resolver = getContext().getContentResolver(); Cursor cursor = null; try { cursor = resolver.query(Video.Media.EXTERNAL_CONTENT_URI, VideosBucketThumbnailQuery.PROJECTION, VideoColumns.DATA + "=? ", new String[] { path.replaceAll("'", "''") }, VideoColumns.DATE_MODIFIED + " DESC"); if (cursor.moveToFirst()) { return cursor.getLong(VideosBucketThumbnailQuery._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); }
public static Uri intTodbv(Context context, String type, String title, int orientation, String path, Long length) { // Insert into MediaStore. ContentValues values = new ContentValues(9); values.put(VideoColumns.TITLE, title); values.put(VideoColumns.DISPLAY_NAME, title + ".mp4"); values.put(VideoColumns.DATE_TAKEN, new Date().toLocaleString()); values.put(VideoColumns.MIME_TYPE, type); // values.put(VideoColumns., orientation); values.put(VideoColumns.DATA, path); values.put(VideoColumns.SIZE, length); // values.put(ImageColumns.WIDTH, width); // values.put(ImageColumns.HEIGHT, height); // if (location != null) { // values.put(ImageColumns.LATITUDE, location.getLatitude()); // values.put(ImageColumns.LONGITUDE, location.getLongitude()); // } Uri uri = null; int stromode = StoredData.getInt(StoredData.M_STORAGEMODE, 0); // if (stromode == 0) { // uri = context.getContentResolver().insert( // Video.Media.INTERNAL_CONTENT_URI, values); // } else { uri = context.getContentResolver().insert( Video.Media.EXTERNAL_CONTENT_URI, values); // } context.sendBroadcast(new Intent("android.hardware.action.NEW_VIDEO", uri)); if (uri == null) { return null; } return uri; }
@Override protected void onActivityResult(Context context, int requestCode, int resultCode, Intent data) { if (resultCode != Activity.RESULT_OK) { return; } Cursor cursor = mExecutor.getContext().getContentResolver().query(data.getData(), null, null, null, null); if (cursor == null || !cursor.moveToNext()) { return; } String path = cursor.getString(cursor.getColumnIndex(VideoColumns.DATA)); MakeVideoListener listener = getListener(MakeVideoListener.class); if (listener != null) { listener.onComplete(Uri.fromFile(new File(path))); } }
/** * True if the media exists, false otherwise * @param context * @param id * @param isImage false == video * @return */ public static boolean mediaExists(Context context, int id, boolean isImage) { ContentResolver cr = context.getContentResolver(); 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 false; if(!new File(cursor.getString(0)).exists()) return false; } finally { cursor.close(); } return true; }
private static File getSaveDirectory(ContentResolver contentResolver, Uri uri) { final File[] dir = new File[1]; querySource(contentResolver, uri, new String[] { VideoColumns.DATA }, new ContentResolverQueryCallback() { @Override public void onCursorResult(Cursor cursor) { dir[0] = new File(cursor.getString(0)).getParentFile(); } }); return dir[0]; }
public LocalAlbum(Path path, WoTuApp application, long bucketId, boolean isImage, String name) { super(path, nextVersionNumber()); mApplication = application; mResolver = application.getContentResolver(); mBucketId = bucketId; mName = getLocalizedName(application.getResources(), bucketId, 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 DataNotifier(this, mBaseUri, application); }
private Media getLatestMedia(boolean video) { Media media = null; Uri baseUri = video ? Video.Media.EXTERNAL_CONTENT_URI : MediaStore.Images.Media.EXTERNAL_CONTENT_URI; Uri query = baseUri.buildUpon().appendQueryParameter("limit", "1") .build(); String[] projection = video ? new String[] { VideoColumns._ID, VideoColumns.DATE_TAKEN } : new String[] { ImageColumns._ID, ImageColumns.DATE_TAKEN, ImageColumns.ORIENTATION }; String selection = video ? "" : ImageColumns.MIME_TYPE + "='image/jpeg'"; String order = video ? VideoColumns.DATE_TAKEN + " DESC," + VideoColumns._ID + " DESC" : ImageColumns.DATE_TAKEN + " DESC," + ImageColumns._ID + " DESC"; Cursor cursor = null; try { cursor = getContentResolver().query(query, projection, selection, null, order); if (cursor != null && cursor.moveToFirst()) { long id = cursor.getLong(0); long date = cursor.getLong(1); int orientation = video ? 0 : cursor.getInt(2); Uri uri = ContentUris.withAppendedId(baseUri, id); if (MyDebug.LOG) Log.d(TAG, "found most recent uri for " + (video ? "video" : "images") + ": " + uri); media = new Media(id, video, uri, date, orientation); } } finally { if (cursor != null) { cursor.close(); } } return media; }
/** * 获取单个文件的视频信息 * @param videoPath * @return 视频信息 */ public VideoInfo getVideoInfoDeprecated(String videoPath) { Log.w(TAG, "[getVideoInfo]传入路径: "+videoPath); VideoInfo info = null; final int sdkVersion = Integer.parseInt(Build.VERSION.SDK); if (sdkVersion < 10){ String where = MediaColumns.DATA + "=?"; String[] selectionArgs = new String[] { videoPath }; try { if(context != null){ Cursor cursor = context.getContentResolver().query( MediaStore.Video.Media.EXTERNAL_CONTENT_URI, null, where, selectionArgs, null); if (cursor != null) { cursor.moveToFirst(); String title = cursor .getString(cursor .getColumnIndexOrThrow(MediaColumns.TITLE)); String album = cursor .getString(cursor .getColumnIndexOrThrow(VideoColumns.ALBUM)); String artist = cursor .getString(cursor .getColumnIndexOrThrow(VideoColumns.ARTIST)); String displayName = cursor .getString(cursor .getColumnIndexOrThrow(MediaColumns.DISPLAY_NAME)); String mimeType = cursor .getString(cursor .getColumnIndexOrThrow(MediaColumns.MIME_TYPE)); String path = cursor .getString(cursor .getColumnIndexOrThrow(MediaColumns.DATA)); long duration = cursor .getInt(cursor .getColumnIndexOrThrow(VideoColumns.DURATION)); long size = cursor .getLong(cursor .getColumnIndexOrThrow(MediaColumns.SIZE)); } } } catch (Exception e) { // TODO: handle exception } } return info; }
/** * Insert the content (saved file) with proper video properties. */ public static Uri insertContent(SaveVideoFileInfo mDstFileInfo, ContentResolver contentResolver, Uri uri ) { long nowInMs = System.currentTimeMillis(); long nowInSec = nowInMs / 1000; final ContentValues values = new ContentValues(13); values.put(Video.Media.TITLE, mDstFileInfo.mFileName); values.put(Video.Media.DISPLAY_NAME, mDstFileInfo.mFile.getName()); values.put(Video.Media.MIME_TYPE, "video/mp4"); values.put(Video.Media.DATE_TAKEN, nowInMs); values.put(Video.Media.DATE_MODIFIED, nowInSec); values.put(Video.Media.DATE_ADDED, nowInSec); values.put(Video.Media.DATA, mDstFileInfo.mFile.getAbsolutePath()); values.put(Video.Media.SIZE, mDstFileInfo.mFile.length()); int durationMs = retriveVideoDurationMs(mDstFileInfo.mFile.getPath()); values.put(Video.Media.DURATION, durationMs); // Copy the data taken and location info from src. String[] projection = new String[] { VideoColumns.DATE_TAKEN, VideoColumns.LATITUDE, VideoColumns.LONGITUDE, VideoColumns.RESOLUTION, }; // Copy some info from the source file. querySource(contentResolver, uri, projection, new ContentResolverQueryCallback() { @Override public void onCursorResult(Cursor cursor) { long timeTaken = cursor.getLong(0); if (timeTaken > 0) { values.put(Video.Media.DATE_TAKEN, timeTaken); } 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(Video.Media.LATITUDE, latitude); values.put(Video.Media.LONGITUDE, longitude); } values.put(Video.Media.RESOLUTION, cursor.getString(3)); } }); return contentResolver.insert(Video.Media.EXTERNAL_CONTENT_URI, values); }