Commit f3c7066a authored by wanglei's avatar wanglei

...

parent 60562622
......@@ -10,6 +10,9 @@
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
......
......@@ -8,4 +8,17 @@ object ConstObject {
const val DUCKDUCKGO = "DuckDuckGo"
const val YANDEX = "Yandex"
const val BAIDU = "Baidu"
const val MIME_TYPE_IMAGE = "image/*"
const val MIME_TYPE_VIDEO = "video/*"
const val MIME_TYPE_AUDIO = "audio/*"
const val MIME_TYPE_PDF = "application/pdf"
const val MIME_TYPE_DOC = "application/msword"
const val MIME_TYPE_DOCX = "application/vnd.openxmlformats-officedocument.wordprocessingml.document"
const val MIME_TYPE_XLS = "application/vnd.ms-excel"
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/*"
}
\ No newline at end of file
......@@ -5,5 +5,5 @@ import android.net.Uri
data class MediaBean(
val path: String = "",
val uri: Uri = Uri.EMPTY,
val size: Long = 0
val mimeType: String = ""
)
......@@ -7,8 +7,14 @@ import android.os.Environment
import android.os.StatFs
import android.os.storage.StorageManager
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.lifecycleScope
import com.base.browserwhite.databinding.FragmentFileBinding
import com.base.browserwhite.ui.activity.MainActivity
import com.base.browserwhite.utils.KotlinExt.toFormatSize
import com.base.browserwhite.utils.MediaStoreUtils.getRecentMedia
import com.base.browserwhite.utils.PermissionHelp.checkStorePermission
import com.base.browserwhite.utils.PermissionHelp.requestStorePermission
import kotlinx.coroutines.launch
import java.io.File
......@@ -22,6 +28,20 @@ class FileFragment : BaseFragment<FragmentFileBinding>() {
showStorage()
}
override fun setListener() {
super.setListener()
if (!requireContext().checkStorePermission()) {
val launcher = (requireActivity() as MainActivity).launcher
requireContext().requestStorePermission(launcher) {
if (it) {
initData()
}
}
}
}
@SuppressLint("SetTextI18n")
private fun showStorage() {
......@@ -49,4 +69,17 @@ class FileFragment : BaseFragment<FragmentFileBinding>() {
}
}
override fun onResume() {
super.onResume()
if (requireContext().checkStorePermission()) {
initData()
}
}
private fun initData() = lifecycleScope.launch {
val mediaList = requireContext().getRecentMedia()
}
}
\ No newline at end of file
package com.base.browserwhite.ui.fragment
import android.content.Intent
import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.ItemTouchHelper
import androidx.recyclerview.widget.LinearLayoutManager
......@@ -20,6 +21,10 @@ import com.base.browserwhite.ui.activity.webstore.WevStoreActivity
import com.base.browserwhite.ui.adapter.WebsiteAdapter
import com.base.browserwhite.ui.views.DialogViews.showSearchEngineDialog
import com.base.browserwhite.ui.views.itemtouch.MyItemTouchHelperCallBack
import com.base.browserwhite.utils.MediaStoreUtils
import com.base.browserwhite.utils.MediaStoreUtils.getRecentMedia
import com.base.browserwhite.utils.PermissionHelp.checkStorePermission
import kotlinx.coroutines.launch
class HomeFragment : BaseFragment<FragmentHomeBinding>() {
......@@ -105,4 +110,5 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>() {
}
}
}
\ No newline at end of file
package com.base.browserwhite.utils
import android.annotation.SuppressLint
import android.content.Context
import android.database.Cursor
import android.provider.MediaStore
import com.base.browserwhite.bean.MediaBean
object MediaStoreUtils {
private val TAG = "MediaStoreUtils"
fun Context.getRecentMedia(): ArrayList<MediaBean> {
val list = arrayListOf<MediaBean>()
val projection = arrayOf(
// MediaStore.Files.FileColumns._ID,
MediaStore.Files.FileColumns.DATA,
// MediaStore.Files.FileColumns.TITLE,
MediaStore.Files.FileColumns.MIME_TYPE,
// MediaStore.Files.FileColumns.SIZE,
// MediaStore.Files.FileColumns.DATE_MODIFIED
)
// 构建查询条件,这里以查询图片和视频为例
val selection = (
"${MediaStore.Files.FileColumns.MIME_TYPE} = ?" +
" or ${MediaStore.Files.FileColumns.MIME_TYPE} = ?"
)
//构建查询条件参数
val selectionArgs = arrayOf(
"image/*",
"video/*",
)
var cursor: Cursor? = null
try {
// 进行查询,并设置排序方式,按照文件添加时间降序排序
cursor = this.contentResolver.query(
MediaStore.Files.getContentUri("external"),
projection,
selection,
selectionArgs,
MediaStore.Files.FileColumns.DATE_ADDED + " DESC"
)
if (cursor != null) {
while (cursor.moveToNext()) {
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 size = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Files.FileColumns.SIZE))
// val dateModified = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Files.FileColumns.DATE_MODIFIED))
LogEx.logDebug(TAG, "path=$path mimeType=$mimeType")
list.add(
MediaBean(path = path, mimeType = mimeType)
)
}
}
}
} catch (e: Exception) {
} finally {
cursor?.close()
}
return list
}
}
\ No newline at end of file
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