file.exists () возвращает false, не может воспроизвести мой аудиофайл - PullRequest
0 голосов
/ 27 ноября 2018

Я пытаюсь воспроизвести аудио из хранилища, когда я нажимаю на элемент, по какой-то причине файл возвращает false для существует (), у меня есть разрешение на чтение и запись на внешнее хранилище, и файл находится там и, кажется, не поврежден, мойфайл в формате .mp4, который я буду воспроизводить как тип аудио.

это мои разрешения:

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

поставщик:

<provider
        android:authorities="com.aliaskarurakov.android.mycallrecorderdemo"
        android:name="android.support.v4.content.FileProvider"
        android:exported="false"
        android:grantUriPermissions="true">
        <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/provider_paths"/>
</provider>

xml:

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <external-path name="external_files" path="."/>
</paths>

это мой метод:

    public void playAudio(){
        String path = Environment.getExternalStorageDirectory() + "/tempAudioFile/temp.mp4";
        Log.d("path", "onClick: path = "+path);
        Intent intent = new Intent(Intent.ACTION_VIEW);
        File file = new File(path);
        Log.i("", "onResponse: name "+file.getName());
        if (file.exists()){
            Log.i("", "onResponse: I EXIST");
        } else {
            Log.i("", "onResponse: dont exist?");
        }
        intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
        intent.setDataAndType(getUriForFile(context,"com.aliaskarurakov.android.mycallrecorderdemo",file), "audio/*");
        context.startActivity(intent);
    }

1 Ответ

0 голосов
/ 15 декабря 2018

Вам все еще нужно запросить разрешение во время выполнения.Вызовите эту функцию, где это необходимо.

private void checkReadStoragePermission(){
    if (ContextCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.READ_EXTERNAL_STORAGE)
            != PackageManager.PERMISSION_GRANTED){
        ActivityCompat.requestPermissions(this,
                new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
                PERMISSION_REQUEST_READ_EXTENAL_STORAGE);
    }else{
        // Do your stuff here if permission is already granted by user
    }
}

А затем обработайте, если пользователь предоставит ее или нет.

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    switch (requestCode){
        // Here is the permission that you want
        case PERMISSION_REQUEST_READ_EXTENAL_STORAGE:
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED)
                // Do your stuff here if permission is granted by user

    }
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
...