11package pizzk.media.picker.utils
22
33import android.Manifest
4+ import android.annotation.SuppressLint
45import android.app.Activity
56import android.content.ContentResolver
67import android.content.ContentValues
@@ -98,7 +99,7 @@ object PickUtils {
9899 * 启动相册
99100 */
100101 fun launchAlbum (activity : AppCompatActivity ) {
101- val access: Boolean = checkPermission(activity, externalPermission, PickUtils . REQUEST_CODE_ALBUM )
102+ val access: Boolean = checkPermission(activity, externalPermission, REQUEST_CODE_ALBUM )
102103 if (! access) return
103104 val picker: PickControl = PickControl .obtain(false )
104105 val uris: List <Uri > = picker.selects().mapNotNull(PickUtils ::path2Uri)
@@ -113,7 +114,7 @@ object PickUtils {
113114 */
114115 fun launchCamera (activity : AppCompatActivity ): Uri ? {
115116 // 权限确认
116- val access: Boolean = PickUtils . checkPermission(activity, cameraPermission, PickUtils . REQUEST_CODE_CAMERA )
117+ val access: Boolean = checkPermission(activity, cameraPermission, REQUEST_CODE_CAMERA )
117118 if (! access) return null
118119 // 创建文件
119120 val optionalFile: File ? = FileUtils .createPhoto(activity.application, MimeType .JPEG .extensions[0 ])
@@ -129,7 +130,7 @@ object PickUtils {
129130 intent.addFlags(Intent .FLAG_GRANT_READ_URI_PERMISSION )
130131 val uri: Uri = FileProvider .getUriForFile(activity, PickControl .authority(), file)
131132 intent.putExtra(MediaStore .EXTRA_OUTPUT , uri)
132- activity.startActivityForResult(intent, PickUtils . REQUEST_CODE_CAMERA )
133+ activity.startActivityForResult(intent, REQUEST_CODE_CAMERA )
133134 PickControl .obtain(false ).cameraFile(file)
134135 return uri
135136 }
@@ -164,7 +165,7 @@ object PickUtils {
164165 }
165166 val srcUri: Uri = uri ? : return null
166167 // 检查裁切图像存储权限
167- val access: Boolean = checkPermission(activity, externalPermission, PickUtils . REQUEST_CODE_CROP )
168+ val access: Boolean = checkPermission(activity, externalPermission, REQUEST_CODE_CROP )
168169 if (! access) return null
169170 // 创建文件
170171 val optionalFile: File ? = FileUtils .createPhoto(activity.application, params.getFormatExt(), " crop" )
@@ -200,7 +201,7 @@ object PickUtils {
200201 val packageName: String = info.activityInfo.packageName
201202 activity.grantUriPermission(packageName, destUri, grantFlag)
202203 }
203- activity.startActivityForResult(intent, PickUtils . REQUEST_CODE_CROP )
204+ activity.startActivityForResult(intent, REQUEST_CODE_CROP )
204205 PickControl .obtain(false ).cropFile(file)
205206 return destUri
206207 }
@@ -219,8 +220,10 @@ object PickUtils {
219220 MediaStore .Images .Media .BUCKET_DISPLAY_NAME
220221 )
221222 val sortOrder = " ${MediaStore .Images .Media .DATE_TAKEN } DESC"
222- val cursor: Cursor = resolver.query(uri, projection, null , null , sortOrder)
223+ var cursor: Cursor ? = null
223224 try {
225+ cursor = resolver.query(uri, projection, null , null , sortOrder)
226+ cursor ? : return emptyList()
224227 val items: MutableList <AlbumItem > = ArrayList (cursor.count)
225228 for (i: Int in 0 until cursor.count) {
226229 if (! cursor.moveToPosition(i)) break
@@ -240,9 +243,7 @@ object PickUtils {
240243 } catch (e: Exception ) {
241244 e.printStackTrace()
242245 } finally {
243- if (! cursor.isClosed) {
244- cursor.close()
245- }
246+ cursor?.close()
246247 }
247248 return sections
248249 }
@@ -255,7 +256,8 @@ object PickUtils {
255256 val mime: String = getImageMime(context, file.absolutePath)
256257 values.put(MediaStore .Images .Media .DATA , file.absolutePath)
257258 values.put(MediaStore .Images .Media .MIME_TYPE , mime)
258- val uri: Uri = context.contentResolver.insert(MediaStore .Images .Media .EXTERNAL_CONTENT_URI , values)
259+ val uri: Uri ? = context.contentResolver.insert(MediaStore .Images .Media .EXTERNAL_CONTENT_URI , values)
260+ uri ? : return fileUri
259261 context.sendBroadcast(Intent (Intent .ACTION_MEDIA_SCANNER_SCAN_FILE , fileUri))
260262 uri
261263 } catch (e: Exception ) {
@@ -301,6 +303,7 @@ object PickUtils {
301303 }
302304 }
303305
306+ @SuppressLint(" Recycle" )
304307 fun filePath (context : Context ? , path : String ): String {
305308 context ? : return " "
306309 val prefix: Array <String > = arrayOf(" content://" , " file://" )
@@ -316,7 +319,7 @@ object PickUtils {
316319 val uri: Uri = Uri .parse(path)
317320 val projection: Array <String > = arrayOf(MediaStore .MediaColumns .DATA )
318321 val resolver: ContentResolver = context.applicationContext.contentResolver
319- cursor = resolver.query(uri, projection, null , null , null )
322+ cursor = resolver.query(uri, projection, null , null , null ) ? : return " "
320323 if (cursor.moveToFirst()) cursor.getString(0 ) else " "
321324 } catch (e: Exception ) {
322325 e.printStackTrace()
0 commit comments