11package com .androidx ;
22
33import android .content .ContentValues ;
4+ import android .media .MediaMetadataRetriever ;
45import android .os .Build ;
56import android .provider .MediaStore ;
7+ import android .text .TextUtils ;
8+
9+ import com .androidx .media .MimeType ;
10+
11+ import java .io .File ;
612
713/**
814 * user author: didikee
@@ -21,6 +27,44 @@ public static ContentValues makeVideoValues(String folderPath, String filename,
2127 return makeMediaValues (folderPath , filename , "video/mp4" , 0 , 0 , fileLength );
2228 }
2329
30+ /**
31+ * 获取音频的参数
32+ * @return
33+ */
34+ public static ContentValues makeAudioValues (String folderPath , String filename , String mimeType , long duration , long fileLength ) {
35+ ContentValues values = makeBaseValues (folderPath , filename , mimeType , fileLength );
36+ values .put (MediaStore .MediaColumns .DURATION , duration );
37+ return values ;
38+ }
39+
40+
41+ /**
42+ * 获取图片的参数
43+ * @return
44+ */
45+ public static ContentValues makeImageValues (String folderPath , String filename , String mimeType , int width , int height , int rotate , long fileLength ) {
46+ ContentValues values = makeBaseValues (folderPath , filename , mimeType , fileLength );
47+ values .put (MediaStore .MediaColumns .WIDTH , width );
48+ values .put (MediaStore .MediaColumns .HEIGHT , height );
49+ values .put (MediaStore .MediaColumns .ORIENTATION , rotate );
50+ return values ;
51+ }
52+
53+ /**
54+ * 获取视频的信息
55+ * @return
56+ */
57+ public static ContentValues makeVideoValues (String folderPath , String filename , String mimeType , int width , int height , long duration , int rotate , long fileLength ) {
58+ if (TextUtils .isEmpty (mimeType )) {
59+ mimeType = "video/mp4" ;
60+ }
61+ ContentValues values = makeBaseValues (folderPath , filename , mimeType , fileLength );
62+ values .put (MediaStore .MediaColumns .WIDTH , width );
63+ values .put (MediaStore .MediaColumns .HEIGHT , height );
64+ values .put (MediaStore .MediaColumns .ORIENTATION , rotate );
65+ values .put (MediaStore .MediaColumns .DURATION , duration );
66+ return values ;
67+ }
2468
2569 /**
2670 * 支持图片和视频
@@ -34,6 +78,7 @@ public static ContentValues makeVideoValues(String folderPath, String filename,
3478 * @param mimeType
3579 * @param fileLength
3680 */
81+ @ Deprecated
3782 public static ContentValues makeMediaValues (String folderPath , String filename , String mimeType , int width , int height , long fileLength ) {
3883 ContentValues values = new ContentValues ();
3984 values .put (MediaStore .MediaColumns .TITLE , filename );
@@ -49,7 +94,6 @@ public static ContentValues makeMediaValues(String folderPath, String filename,
4994 values .put (MediaStore .MediaColumns .SIZE , fileLength );
5095 }
5196 if (Build .VERSION .SDK_INT >= Build .VERSION_CODES .Q ) {
52- // Set<String> externalVolumeNames = MediaStore.getExternalVolumeNames(context);
5397 values .put (MediaStore .Images .Media .RELATIVE_PATH , folderPath );
5498 values .put (MediaStore .MediaColumns .IS_PENDING , true );
5599 } else {
@@ -60,4 +104,88 @@ public static ContentValues makeMediaValues(String folderPath, String filename,
60104 }
61105
62106
107+ /**
108+ * 获取最基础的媒体信息
109+ * @param folderPath
110+ * @param filename
111+ * @param mimeType
112+ * @param fileLength
113+ * @return
114+ */
115+ public static ContentValues makeBaseValues (String folderPath , String filename , String mimeType , long fileLength ) {
116+ ContentValues values = new ContentValues ();
117+ values .put (MediaStore .MediaColumns .TITLE , filename );
118+ values .put (MediaStore .MediaColumns .DISPLAY_NAME , filename );
119+ values .put (MediaStore .MediaColumns .DATE_ADDED , System .currentTimeMillis () / 1000 );
120+ values .put (MediaStore .MediaColumns .DATE_TAKEN , System .currentTimeMillis ());
121+ values .put (MediaStore .MediaColumns .MIME_TYPE , mimeType );
122+ if (fileLength > 0 ) {
123+ values .put (MediaStore .MediaColumns .SIZE , fileLength );
124+ }
125+ if (Build .VERSION .SDK_INT >= Build .VERSION_CODES .Q ) {
126+ values .put (MediaStore .MediaColumns .RELATIVE_PATH , folderPath );
127+ values .put (MediaStore .MediaColumns .IS_PENDING , true );
128+ } else {
129+ String data = StorageSaveUtils .getDataPath (folderPath , filename );
130+ values .put (MediaStore .MediaColumns .DATA , data );
131+ }
132+ return values ;
133+ }
134+
135+ public static ContentValues getContentValues (File file , String folderPath , String filename , String mimeType ) {
136+ if (file == null || TextUtils .isEmpty (folderPath )) {
137+ return null ;
138+ }
139+ if (TextUtils .isEmpty (filename )) {
140+ filename = file .getName ();
141+ }
142+ if (TextUtils .isEmpty (mimeType )) {
143+ mimeType = MimeType .getMimeTypeFromFilename (filename );
144+ }
145+ if (MimeType .isVideo (mimeType )) {
146+ long duration = 0 ;
147+ int width = 0 ;
148+ int height = 0 ;
149+ int rotate = 0 ;
150+ try {
151+ MediaMetadataRetriever retriever = new MediaMetadataRetriever ();
152+ retriever .setDataSource (file .getAbsolutePath ());
153+ duration = Long .parseLong (retriever .extractMetadata (MediaMetadataRetriever .METADATA_KEY_DURATION ));
154+ width = Integer .parseInt (retriever .extractMetadata (MediaMetadataRetriever .METADATA_KEY_VIDEO_WIDTH ));
155+ height = Integer .parseInt (retriever .extractMetadata (MediaMetadataRetriever .METADATA_KEY_VIDEO_HEIGHT ));
156+ rotate = Integer .parseInt (retriever .extractMetadata (MediaMetadataRetriever .METADATA_KEY_VIDEO_ROTATION ));
157+ } catch (Exception e ) {
158+ e .printStackTrace ();
159+ }
160+ return makeVideoValues (folderPath , filename , mimeType , width , height , duration , rotate , file .length ());
161+ }
162+ if (MimeType .isAudio (mimeType )) {
163+ long duration = 0 ;
164+ try {
165+ MediaMetadataRetriever retriever = new MediaMetadataRetriever ();
166+ retriever .setDataSource (file .getAbsolutePath ());
167+ duration = Long .parseLong (retriever .extractMetadata (MediaMetadataRetriever .METADATA_KEY_DURATION ));
168+ } catch (Exception e ) {
169+ e .printStackTrace ();
170+ }
171+ return makeAudioValues (folderPath , filename , mimeType , duration , file .length ());
172+ }
173+ if (MimeType .isImage (mimeType )) {
174+ int width = 0 ;
175+ int height = 0 ;
176+ int rotate = 0 ;
177+ try {
178+ MediaMetadataRetriever retriever = new MediaMetadataRetriever ();
179+ retriever .setDataSource (file .getAbsolutePath ());
180+ width = Integer .parseInt (retriever .extractMetadata (MediaMetadataRetriever .METADATA_KEY_IMAGE_WIDTH ));
181+ height = Integer .parseInt (retriever .extractMetadata (MediaMetadataRetriever .METADATA_KEY_IMAGE_HEIGHT ));
182+ rotate = Integer .parseInt (retriever .extractMetadata (MediaMetadataRetriever .METADATA_KEY_IMAGE_ROTATION ));
183+ } catch (Exception e ) {
184+ e .printStackTrace ();
185+ }
186+ return makeImageValues (folderPath , filename , mimeType , width , height , rotate , file .length ());
187+ }
188+ return makeBaseValues (folderPath , filename , mimeType , file .length ());
189+ }
190+
63191}
0 commit comments