Commit ca69e2d5 authored by wanglei's avatar wanglei

....MediaContentObserver uri方式删除文件

parent dfd8363d
...@@ -5,7 +5,6 @@ import android.content.Context ...@@ -5,7 +5,6 @@ import android.content.Context
import android.database.ContentObserver import android.database.ContentObserver
import android.database.Cursor import android.database.Cursor
import android.net.Uri import android.net.Uri
import android.os.Handler
import android.provider.MediaStore import android.provider.MediaStore
import com.base.filerecoveryrecyclebin.activity.recyclebin.RecycleBinFileEx.getRecycleBinDir import com.base.filerecoveryrecyclebin.activity.recyclebin.RecycleBinFileEx.getRecycleBinDir
import com.base.filerecoveryrecyclebin.bean.RecycleBinBean import com.base.filerecoveryrecyclebin.bean.RecycleBinBean
...@@ -35,7 +34,7 @@ class MediaContentObserver(val context: Context) : ContentObserver(null) { ...@@ -35,7 +34,7 @@ class MediaContentObserver(val context: Context) : ContentObserver(null) {
@SuppressLint("Range") @SuppressLint("Range")
private fun queryNewMediaFiles(uri: Uri) { private fun queryNewMediaFiles(uri: Uri) = Thread {
// 查询新添加的媒体文件 // 查询新添加的媒体文件
val projection = arrayOf( val projection = arrayOf(
MediaStore.MediaColumns.DISPLAY_NAME, MediaStore.MediaColumns.DISPLAY_NAME,
...@@ -46,23 +45,33 @@ class MediaContentObserver(val context: Context) : ContentObserver(null) { ...@@ -46,23 +45,33 @@ class MediaContentObserver(val context: Context) : ContentObserver(null) {
val cursor: Cursor? = context.contentResolver.query(uri, projection, null, null, null) val cursor: Cursor? = context.contentResolver.query(uri, projection, null, null, null)
if (cursor != null) { if (cursor != null) {
LogEx.logDebug(TAG, "cursor=$cursor")
try { try {
if (cursor.count > 0) {
while (cursor.moveToNext()) { while (cursor.moveToNext()) {
val name = cursor.getString(cursor.getColumnIndex(MediaStore.MediaColumns.DISPLAY_NAME)) val name = cursor.getString(cursor.getColumnIndex(MediaStore.MediaColumns.DISPLAY_NAME))
val path = cursor.getString(cursor.getColumnIndex(MediaStore.MediaColumns.DATA)) val path = cursor.getString(cursor.getColumnIndex(MediaStore.MediaColumns.DATA))
val mimeType = cursor.getString(cursor.getColumnIndex(MediaStore.MediaColumns.MIME_TYPE)) val mimeType = cursor.getString(cursor.getColumnIndex(MediaStore.MediaColumns.MIME_TYPE))
val size = cursor.getString(cursor.getColumnIndex(MediaStore.MediaColumns.SIZE)) val size = cursor.getString(cursor.getColumnIndex(MediaStore.MediaColumns.SIZE))
LogEx.logDebug(TAG, "path=$path")
// 处理新文件路径 // 处理新文件路径
backupRecycleBinFile(name, path, mimeType) backupRecycleBinFile(name, path, mimeType)
} }
} catch (e: Exception) { } else {
LogEx.logDebug(TAG, "count=0 deleted file uri")
}
} catch (e: Exception) {
e.printStackTrace()
LogEx.logDebug(TAG, "Exception=$e")
} finally { } finally {
cursor.close() cursor.close()
} }
} else {
LogEx.logDebug(TAG, "cursor=$cursor")
} }
} }.start()
private fun backupRecycleBinFile(name: String, path: String, mimeType: String) { private fun backupRecycleBinFile(name: String, path: String, mimeType: String) {
val src = File(path) val src = File(path)
...@@ -79,7 +88,7 @@ class MediaContentObserver(val context: Context) : ContentObserver(null) { ...@@ -79,7 +88,7 @@ class MediaContentObserver(val context: Context) : ContentObserver(null) {
if (src.length() > 0L) { if (src.length() > 0L) {
val recycleBinFile = File(getRecycleBinDir(), ".$name") val recycleBinFile = File(getRecycleBinDir(), ".$name")
src.copyTo(recycleBinFile, true) src.copyTo(recycleBinFile, true)
val binBean = RecycleBinBean(src.path, 0, src.length(), mimeType) val binBean = RecycleBinBean(src.path, deleteTime = 0, size = src.length(), mimeType = mimeType)
val binFile = File(recycleBinDir, ".$name.bin") val binFile = File(recycleBinDir, ".$name.bin")
binFile.createNewFile() binFile.createNewFile()
binFile.writeText(Gson().toJson(binBean)) binFile.writeText(Gson().toJson(binBean))
......
package com.base.filerecoveryrecyclebin.activity.recyclebin package com.base.filerecoveryrecyclebin.activity.recyclebin
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.os.Build
import android.os.FileObserver import android.os.FileObserver
import android.os.Handler
import androidx.annotation.RequiresApi
import com.base.filerecoveryrecyclebin.activity.recyclebin.RecycleBinFileEx.findRecycleBinFile import com.base.filerecoveryrecyclebin.activity.recyclebin.RecycleBinFileEx.findRecycleBinFile
import com.base.filerecoveryrecyclebin.activity.recyclebin.RecycleBinFileEx.findRecycleBinJsonFile import com.base.filerecoveryrecyclebin.activity.recyclebin.RecycleBinFileEx.findRecycleBinJsonFile
import com.base.filerecoveryrecyclebin.bean.RecycleBinBean import com.base.filerecoveryrecyclebin.bean.RecycleBinBean
...@@ -12,7 +9,7 @@ import com.base.filerecoveryrecyclebin.utils.LogEx ...@@ -12,7 +9,7 @@ import com.base.filerecoveryrecyclebin.utils.LogEx
import com.google.gson.Gson import com.google.gson.Gson
import java.io.File import java.io.File
@RequiresApi(Build.VERSION_CODES.Q) @SuppressLint("NewApi")
class MyFileObserver(files: List<File>) : FileObserver(files, ALL_EVENTS) { class MyFileObserver(files: List<File>) : FileObserver(files, ALL_EVENTS) {
private val TAG = "MyFileObserver" private val TAG = "MyFileObserver"
...@@ -56,7 +53,7 @@ class MyFileObserver(files: List<File>) : FileObserver(files, ALL_EVENTS) { ...@@ -56,7 +53,7 @@ class MyFileObserver(files: List<File>) : FileObserver(files, ALL_EVENTS) {
} }
private fun recordRecycleBinFile(namePath: String) { private fun recordRecycleBinFile(namePath: String) = Thread {
val recycleBinFile = findRecycleBinFile(namePath) val recycleBinFile = findRecycleBinFile(namePath)
...@@ -78,6 +75,6 @@ class MyFileObserver(files: List<File>) : FileObserver(files, ALL_EVENTS) { ...@@ -78,6 +75,6 @@ class MyFileObserver(files: List<File>) : FileObserver(files, ALL_EVENTS) {
} }
} }
} }.start()
} }
\ No newline at end of file
package com.base.filerecoveryrecyclebin.bean package com.base.filerecoveryrecyclebin.bean
import android.net.Uri
data class RecycleBinBean( data class RecycleBinBean(
val path: String = "", val path: String = "",
val uri: Uri = Uri.EMPTY,
var deleteTime: Long = 0, var deleteTime: Long = 0,
val size: Long = 0, val size: Long = 0,
val mimeType: String = "", val mimeType: String = "",
......
...@@ -12,7 +12,6 @@ import android.graphics.BitmapFactory ...@@ -12,7 +12,6 @@ import android.graphics.BitmapFactory
import android.graphics.drawable.Icon import android.graphics.drawable.Icon
import android.os.Build import android.os.Build
import android.os.Environment import android.os.Environment
import android.os.Handler
import android.os.IBinder import android.os.IBinder
import android.provider.MediaStore import android.provider.MediaStore
import android.widget.RemoteViews import android.widget.RemoteViews
......
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