Недопустимый символ в пути с индексом 43: / storage / emulated / 0 / WhatsApp / Media / WhatsApp Video / VID-20200122-WA0002.mp4 - PullRequest
0 голосов
/ 24 января 2020

Здесь я пытаюсь прикрепить файлы в моем приложении с устройства android. Я могу прикрепить локальные файлы, такие как файлы моей камеры и файлы моей внешней карты. но не удается вложить файлы из файлов папки Whatapp и загрузить файлы папок.

if(item?.itemId == com.cipherloc.securemailapp.R.id.compose_attachment_button){
   setupPermissions()
} 
private fun setupPermissions() {
        val permission = ContextCompat.checkSelfPermission(this,
            Manifest.permission.WRITE_EXTERNAL_STORAGE)

        val permission1 = ContextCompat.checkSelfPermission(this,
            Manifest.permission.READ_EXTERNAL_STORAGE)

        if (permission != PackageManager.PERMISSION_GRANTED || permission1 != PackageManager.PERMISSION_GRANTED ) {
            makeRequest()
            Log.i("", "Permission to record denied")
        }
        else{
            filePicker()
        }
    }

My Filepicker Method:

    fun filePicker(){

           var mimetypes  = arrayOf(
            "application/*",
            "audio/*",
            "font/*",
            "image/*",
            "message/*",
            "model/*",
            "multipart/*",
            "text/*",
            "video/*"
            )
            var chooseFile = Intent(Intent.ACTION_GET_CONTENT)
            chooseFile.addCategory(Intent.CATEGORY_OPENABLE);
            chooseFile.putExtra("android.content.extra.SHOW_ADVANCED", true);
            chooseFile.putExtra(Intent.EXTRA_LOCAL_ONLY, true);
            chooseFile.type = "*/*"
            chooseFile.putExtra(Intent.EXTRA_MIME_TYPES, mimetypes);
            chooseFile = Intent.createChooser(chooseFile, "Choose a file")
            startActivityForResult(chooseFile, 0)
        }
    override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<String>,
                                                grantResults: IntArray) {
            val permission = ContextCompat.checkSelfPermission(this,
                Manifest.permission.WRITE_EXTERNAL_STORAGE)

            val permission1 = ContextCompat.checkSelfPermission(this,
                Manifest.permission.READ_EXTERNAL_STORAGE)

            if (permission != PackageManager.PERMISSION_GRANTED || permission1 != PackageManager.PERMISSION_GRANTED ) {
                Log.i("", "Permission to record denied")
            }
            else{
                filePicker()
            }
        }
MakeRequest Method:        
            private fun makeRequest() {
                ActivityCompat.requestPermissions(this,
                    arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE),
                    RECORD_REQUEST_CODE)
            }


While Attaching the files from WhatsApp folder files and download folder file am getting error in the below code only.

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {    
        if(data != null) {    
            val uri: Uri? = data!!.data
            val src: String? = uri!!.getPath()  
            val sourceVal = File(src)
            fileUri = Uri.fromFile(sourceVal)
            val juri: java.net.URI =
                java.net.URI(RealPathUtil.getRealPath(this, uri))    
            source = File(juri.getPath());
            filesArr.add(source!!)    
            attachmentRecycler?.adapter = attachmentAdapter    
            attachmentAdapter!!.notifyDataSetChanged()
            System.out.println("dyhtgfgdas " + source + " " + source!!.length())
        }    
    }

Ниже приведен код моей ошибки при попытке прикрепить файлы:

E / AndroidRuntime : FATAL EXCEPTION: main Процесс: com.cipherlo c .securemailapp, PID: 11885 java .lang.RuntimeException: сбой при доставке результата ResultInfo {who = null, запрос = 0, результат = -1, data = Intent {dat = content: // media / external / video / media / 211985 flg = 0x1}} для действия {com.cipherlo c .securemailapp / com.cipherlo c .securemailapp.ComposeMailFragment}: java. net .URISyntaxException: недопустимый символ в пути в индексе 43: / storage / emulated / 0 / WhatsApp / Media / WhatsApp Video / VID-20200122-WA0002.mp4 в android .app.ActivityThread.deliverResults (ActivityThread. java: 4741 ) в android .app.ActivityThread.handleSendResult (ActivityThread. java: 4783) в android .app.servertransaction.ActivityResultItem.execute (ActivityResultItem. java: 49) в android .app.servertransaction. TransactionExecutor.executeCallback s (TransactionExecutor. java: 113) в android .app.servertransaction.TransactionExecutor.execute (TransactionExecutor. java: 71) в android .app.ActivityThread $ H.handleMessage (ActivityThread. java: 2044) при android .os.Handler.dispatchMessage (Обработчик. java: 106) при android .os.Looper.l oop (Looper. java: 226) при android .app. ActivityThread.main (ActivityThread. java: 7212) в java .lang.reflect.Method.invoke (собственный метод) в com. android .internal.os.RuntimeInit $ MethodAndArgsCaller.run (RuntimeInit. java) : 576) at com. android .internal.os.ZygoteInit.main (ZygoteInit. java: 956) Причина: java. net .URISyntaxException: недопустимый символ в пути в индексе 43: / storage / эмулируется / 0 / WhatsApp / Media / WhatsApp Video / VID-20200122-WA0002.mp4 в java. net .URI $ Parser.fail (URI. java: 2892) в java. net. URI $ Parser.checkChars (URI. java: 3065) в java. net .URI $ Parser.parseHierarchical (URI. java: 3149) в java. net .URI $ Parser. анализ (URI. java: 3107) в java. net .URI. (URI. java: 583) в com.cipherlo * 1 057 * .securemailapp.ComposeMailFragment.onActivityResult (ComposeMailFragment.kt: 1002) в android .app.Activity.dispatchActivityResult (Activity. java: 7743) в android .app.ActivityThread.deliverResults (ActivityThread. java : 4734) в android .app.ActivityThread.handleSendResult (ActivityThread. java: 4783) в android .app.servertransaction.ActivityResultItem.execute (ActivityResultItem. java: 49) в android .app. servertransaction.TransactionExecutor.executeCallbacks (TransactionExecutor. java: 113) в android .app.servertransaction.TransactionExecutor.execute (TransactionExecutor. java: 71) в android .app.ActivityThread $ H.handleMessage (ActivityThread. java: 2044) в android .os.Handler.dispatchMessage (Обработчик. java: 106) в android .os.Looper.l oop (Looper. java: 226) в android .app.ActivityThread.main (ActivityThread. java: 7212) в java .lang.reflect.Method.invoke (собственный метод) в com. android .internal.os.RuntimeInit $ MethodAndArgsCaller.run (RuntimeInit . java: 576) по тел. android .internal.os.ZygoteInit.main (Z ygoteInit. java: 956) I / Process: отправка сигнала. PID: 11885 SIG: 9 Процесс 11885. завершен.

1 Ответ

1 голос
/ 24 января 2020

Ваш URL (/storage/emulated/0/WhatsApp/Media/WhatsApp Video/VID-20200122-WA0002.mp4) не закодирован и не проходит проверку при попытке создать java. net .URI.

Не совсем очевидно, чего пытается достичь ваш код , но если вам просто нужно создать действительный java. net .URI - сначала пропустите его через URLEncoder.encode ():

java.net.URI(URLEncoder.encode("Your-URI-String", "utf-8"))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...