Commit 7cbdf3da authored by wanglei's avatar wanglei

...

parent d5231a14
......@@ -20,5 +20,6 @@ object ConstObject {
const val MIME_TYPE_XLSX = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
const val MIME_TYPE_PPT = "application/vnd.ms-powerpoint"
const val MIME_TYPE_PPTX = "application/vnd.openxmlformats-officedocument.presentationml.presentation"
const val MIME_TYPE_APK = "application/vnd.android.package-archive/*"
const val MIME_TYPE_APK = "application/vnd.android.package-archive"
const val MIME_TYPE_ZIP = "application/zip"
}
\ No newline at end of file
......@@ -14,6 +14,12 @@ import com.base.browserwhite.ui.activity.MainActivity
import com.base.browserwhite.ui.adapter.MediaAdapter
import com.base.browserwhite.utils.KotlinExt.toFormatSize
import com.base.browserwhite.utils.LogEx
import com.base.browserwhite.utils.MediaStoreUtils.getMediaApkSize
import com.base.browserwhite.utils.MediaStoreUtils.getMediaAudioSize
import com.base.browserwhite.utils.MediaStoreUtils.getMediaDocumentSize
import com.base.browserwhite.utils.MediaStoreUtils.getMediaPhotoSize
import com.base.browserwhite.utils.MediaStoreUtils.getMediaVideoSize
import com.base.browserwhite.utils.MediaStoreUtils.getMediaZipSize
import com.base.browserwhite.utils.MediaStoreUtils.getRecentMedia
import com.base.browserwhite.utils.PermissionHelp.checkStorePermission
import com.base.browserwhite.utils.PermissionHelp.requestStorePermission
......@@ -95,6 +101,24 @@ class FileFragment : BaseFragment<FragmentFileBinding>() {
}
private fun initData() = lifecycleScope.launch(Dispatchers.IO) {
val pictureSize = requireContext().getMediaPhotoSize()
val videoSize = requireContext().getMediaVideoSize()
val documentSize = requireContext().getMediaDocumentSize()
val apkSize = requireContext().getMediaApkSize()
val audioSize = requireContext().getMediaAudioSize()
val zipSize = requireContext().getMediaZipSize()
launch(Dispatchers.Main) {
binding.tvPhotoSize.text = pictureSize.toString()
binding.tvVideoSize.text = videoSize.toString()
binding.tvDocument.text = documentSize.toString()
binding.tvApkSize.text = apkSize.toString()
binding.tvAudioSize.text = audioSize.toString()
binding.tvZipSize.text = zipSize.toString()
}
val mediaList = requireContext().getRecentMedia().filter {
val file = File(it.path)
System.currentTimeMillis() - file.lastModified() <= 15L * 24 * 60 * 60 * 1000
......
......@@ -13,6 +13,7 @@ import com.base.browserwhite.bean.ConstObject.MIME_TYPE_PPTX
import com.base.browserwhite.bean.ConstObject.MIME_TYPE_VIDEO
import com.base.browserwhite.bean.ConstObject.MIME_TYPE_XLS
import com.base.browserwhite.bean.ConstObject.MIME_TYPE_XLSX
import com.base.browserwhite.bean.ConstObject.MIME_TYPE_ZIP
import com.base.browserwhite.bean.MediaBean
......@@ -67,16 +68,18 @@ object MediaStoreUtils {
)
if (cursor != null) {
while (cursor.moveToNext()) {
// val id = cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Files.FileColumns._ID))
val path = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Files.FileColumns.DATA))
runCatching {
// val id = cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Files.FileColumns._ID))
val path = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Files.FileColumns.DATA))
// val title = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Files.FileColumns.TITLE))
val mimeType = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Files.FileColumns.MIME_TYPE))
val mimeType = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Files.FileColumns.MIME_TYPE))
// val size = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Files.FileColumns.SIZE))
LogEx.logDebug(TAG, "path=$path mimeType=$mimeType")
list.add(
MediaBean(path = path, mimeType = mimeType)
)
LogEx.logDebug(TAG, "path=$path mimeType=$mimeType")
list.add(
MediaBean(path = path, mimeType = mimeType)
)
}
}
}
......@@ -89,4 +92,156 @@ object MediaStoreUtils {
return list
}
fun Context.getMediaPhotoSize(): Int {
var count = 0
runCatching {
val contentResolver = this.contentResolver
// 定义查询的Uri和列
val uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI
val projection = arrayOf(MediaStore.Images.Media._ID)
// 执行查询
val cursor = contentResolver.query(uri, projection, null, null, null)
// 检查cursor是否包含数据
count = cursor?.count ?: 0
// 关闭cursor
cursor?.close()
}
return count
}
fun Context.getMediaVideoSize(): Int {
var count = 0
runCatching {
val contentResolver = this.contentResolver
// 定义查询的Uri和列
val uri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI
val projection = arrayOf(MediaStore.Video.Media._ID)
// 执行查询
val cursor = contentResolver.query(uri, projection, null, null, null)
// 检查cursor是否包含数据
count = cursor?.count ?: 0
// 关闭cursor
cursor?.close()
}
return count
}
fun Context.getMediaAudioSize(): Int {
var count = 0
runCatching {
val contentResolver = this.contentResolver
// 定义查询的Uri和列
val uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI
val projection = arrayOf(MediaStore.Audio.Media._ID)
// 执行查询
val cursor = contentResolver.query(uri, projection, null, null, null)
// 检查cursor是否包含数据
count = cursor?.count ?: 0
// 关闭cursor
cursor?.close()
}
return count
}
fun Context.getMediaDocumentSize(): Int {
var count = 0
runCatching {
val contentResolver = this.contentResolver
val mimeTypeSelectionArgs = arrayOf(
MIME_TYPE_PDF,
MIME_TYPE_DOC,
MIME_TYPE_DOCX,
MIME_TYPE_XLS,
MIME_TYPE_XLSX,
MIME_TYPE_PPT,
MIME_TYPE_PPTX,
)
val mimeTypeSelection =
"${MediaStore.Files.FileColumns.MIME_TYPE} IN (" + mimeTypeSelectionArgs.joinToString(",") { "?" } + ")"
// 定义查询的Uri和列
val uri = MediaStore.Files.getContentUri("external")
val projection = arrayOf(MediaStore.Files.FileColumns._ID)
// 执行查询
val cursor = contentResolver.query(uri, projection, mimeTypeSelection, mimeTypeSelectionArgs, null)
// 检查cursor是否包含数据
count = cursor?.count ?: 0
// 关闭cursor
cursor?.close()
}
return count
}
fun Context.getMediaApkSize(): Int {
var count = 0
runCatching {
val contentResolver = this.contentResolver
val mimeTypeSelectionArgs = arrayOf(
MIME_TYPE_APK
)
val mimeTypeSelection = "${MediaStore.Files.FileColumns.MIME_TYPE} = ?"
// 定义查询的Uri和列
val uri = MediaStore.Files.getContentUri("external")
val projection = arrayOf(MediaStore.Files.FileColumns._ID)
// 执行查询
val cursor = contentResolver.query(uri, projection, mimeTypeSelection, mimeTypeSelectionArgs, null)
// 检查cursor是否包含数据
count = cursor?.count ?: 0
// 关闭cursor
cursor?.close()
}
return count
}
fun Context.getMediaZipSize(): Int {
var count = 0
runCatching {
val contentResolver = this.contentResolver
val mimeTypeSelectionArgs = arrayOf(
MIME_TYPE_ZIP
)
val mimeTypeSelection = "${MediaStore.Files.FileColumns.MIME_TYPE} = ?"
// 定义查询的Uri和列
val uri = MediaStore.Files.getContentUri("external")
val projection = arrayOf(MediaStore.Files.FileColumns._ID)
// 执行查询
val cursor = contentResolver.query(uri, projection, mimeTypeSelection, mimeTypeSelectionArgs, null)
// 检查cursor是否包含数据
count = cursor?.count ?: 0
// 关闭cursor
cursor?.close()
}
return count
}
}
\ No newline at end of file
......@@ -264,7 +264,6 @@
android:layout_marginHorizontal="16dp"
android:layout_marginBottom="8dp"
android:background="@drawable/bg_storke_dee9f4"
android:elevation="2dp"
android:orientation="vertical">
<LinearLayout
......@@ -301,6 +300,7 @@
tools:ignore="HardcodedText" />
<TextView
android:id="@+id/tv_photo_size"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
......@@ -336,6 +336,7 @@
tools:ignore="HardcodedText" />
<TextView
android:id="@+id/tv_video_size"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
......@@ -365,12 +366,13 @@
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="2dp"
android:text="Picture"
android:text="Document"
android:textColor="#010101"
android:textSize="14sp"
tools:ignore="HardcodedText" />
<TextView
android:id="@+id/tv_document"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
......@@ -420,6 +422,7 @@
tools:ignore="HardcodedText" />
<TextView
android:id="@+id/tv_apk_size"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
......@@ -449,12 +452,13 @@
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="2dp"
android:text="Picture"
android:text="Music"
android:textColor="#010101"
android:textSize="14sp"
tools:ignore="HardcodedText" />
<TextView
android:id="@+id/tv_audio_size"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
......@@ -484,12 +488,13 @@
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="2dp"
android:text="Picture"
android:text="Zip File"
android:textColor="#010101"
android:textSize="14sp"
tools:ignore="HardcodedText" />
<TextView
android:id="@+id/tv_zip_size"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
......@@ -515,12 +520,12 @@
tools:ignore="HardcodedText" />
<LinearLayout
android:background="@drawable/bg_storke_dee9f4"
android:id="@+id/ll_permission"
android:layout_width="match_parent"
android:layout_height="75dp"
android:layout_marginHorizontal="15dp"
android:layout_marginTop="18dp"
android:background="@drawable/bg_storke_dee9f4"
android:orientation="horizontal">
<ImageView
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment