android 打開文件管理到指定目錄,華為VCE-L22 Android 9 ,API 28


今天試着調用系統的文件管理,結果蛋碎一地

要打開的文件地址為 

/storage/emulated/0/Android/data/net.topstarts/files/Download

首先使用

val intent = Intent(Intent.ACTION_VIEW)

var uri: Uri? = null
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
                uri = FileProvider.getUriForFile(
                    this, RetrofitClient.getPackageName(this) + ".topstart.provider", File(root)
                )
            } else {
                uri = Uri.fromFile(File(root))
            }
          intent.addCategory(Intent.CATEGORY_OPENABLE)
            intent.setDataAndType(uri, "file/*")
            intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
            intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION)
            startActivity(Intent.createChooser(intent, "選擇文件"))

結果:::

   系統提示  沒有應用可執行此操作

再切換成

val intent = Intent(Intent.ACTION_GET_CONTENT)
// 或者      val intent = Intent(Intent.ACTION_OPEN_DOCUMENT)
            var uri: Uri? = null
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
                uri = FileProvider.getUriForFile(
                    this, RetrofitClient.getPackageName(this) + ".topstart.provider", File(root)
                )
            } else {
                uri = Uri.fromFile(File(root))
            }

           //intent.setDataAndType(uri, "*/*")
            intent.addCategory(Intent.CATEGORY_OPENABLE)
            intent.setDataAndType(uri, "file/*")
            //            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
            //            intent.addCategory(Intent.CATEGORY_DEFAULT)
            intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
            intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION)

            startActivity(Intent.createChooser(intent, "選擇文件"))
  

 結果:::

  intent.setDataAndType(uri, "file/*") 效果              intent.setDataAndType(uri, "*/*") 效果

  

                 

 

並且,使用 

val intent = Intent(Intent.ACTION_GET_CONTENT)

// 或者      val intent = Intent(Intent.ACTION_OPEN_DOCUMENT) 都只是選擇或者查看,
其他操作都需要自己使用startActivityForResult(intent,reqestCode)來取得路徑,實現相應操作,不是像調用地圖一樣直接使用
--------------------------------------------------我是分隔線------------------------------------------------

查詢谷歌的文檔
https://developer.android.google.cn/training/data-storage/app-specific
也未找到分享自己APP 外存地址的方法
查詢 stackoverflow android call file manage 也未找到相應的答案

https://stackoverflow.com/questions/5298302/air-open-files-on-android-openwithdefaultapplication-alternative?r=SearchResults

總結:::
官方對每個APP文件的權限,在自己APP里可以隨意調用,但對外授權則非常麻煩
授權系統目錄里的自己APP目錄則只能查看

未嘗試 ContentProvidor 按理這種方式可以共享自己APP的私有目錄數據
未嘗試 內存卡除APP私有目錄,系統目錄外  是否可以正常授權第三方




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM