Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/195.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 从uri播放音频_Android_Audio_Uri_Media - Fatal编程技术网

Android 从uri播放音频

Android 从uri播放音频,android,audio,uri,media,Android,Audio,Uri,Media,当我尝试播放音频文件时,我得到了java.lang.SecurityException。 我试着制作一个简单的应用程序,从手机存储器中选择音频,然后使用sqlite保存,并列出之前选择的音频 在应用程序中,首次播放音频文件时不会出现任何错误。但在我重新启动应用程序后,它不会播放,而是返回SecurityException. 我使用下面的代码来选择音频文件 Intent intent = new Intent(); intent.setType("au

当我尝试播放音频文件时,我得到了
java.lang.SecurityException
。 我试着制作一个简单的应用程序,从手机存储器中选择音频,然后使用
sqlit
e保存,并列出之前选择的音频

在应用程序中,首次播放音频文件时不会出现任何错误。但在我重新启动应用程序后,它不会播放,而是返回
SecurityException.
我使用下面的代码来选择音频文件

       Intent intent = new Intent();
                intent.setType("audio/*");
                intent.setAction(Intent.ACTION_GET_CONTENT);
                startActivityForResult(Intent.createChooser(intent,"Select Audio "), REQUEST_CODE);

  @Override
    protected void onActivityResult(int requestCode, int resultCode, final Intent data) {
        if(requestCode == REQUEST_CODE && data != null){
            Toast.makeText(MainActivity.this, "DATA " + data.getData(), Toast.LENGTH_SHORT).show();
            //Prompting alertdialog for name of the audio file           
           AlertDialog.Builder builder = new AlertDialog.Builder(this);
            builder.setTitle("Enter name for audio");
            final EditText input = new EditText(this);
            input.setInputType(InputType.TYPE_CLASS_TEXT);
            builder.setView(input);
            builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                   sql.addToHistory(new soundDB.Effects(null,data.getData().toString(),input.getText().toString()));
               new loadEffects().execute();
                }
            });
            builder.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    dialog.cancel();
                }
            });

            builder.show();
        }
        super.onActivityResult(requestCode, resultCode, data);
    }
我正在清单文件中使用这些权限

 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MANAGE_DOCUMENTS" />
<uses-permission android:name="android.permission.ACCESS_DOWNLOAD_MANAGER" />
<uses-permission android:name="android.permission.ACCESS_ALL_DOWNLOADS" />
<uses-permission android:name="android.permission.ACCESS_DOWNLOAD_MANAGER_ADVANCED" />
但在我重新启动应用程序后,它不会播放,而是返回SecurityException

默认情况下,在进程的生命周期内,您仅对由
Uri
标识的内容拥有权限。将其视为与Web应用程序中的用户会话绑定的URL;一旦会话超时,URL将不再可用


在API级别19+上,您可以尝试更持久地访问内容。然而,这对于
ACTION\u OPEN\u DOCUMENT
来说比
ACTION\u GET\u CONTENT
更重要,因此它可能不起作用。

我也遇到了这个问题,因为我试图播放带有uri的音频文件。我就是这样解决的。在获取音频文件uri时,我使用ACTION_OPEN_DOCUMENT而不是ACTION_GET_内容,并将此行添加到onActivityResult


this.getContentResolver().takePersistableUriPermission(currentUri,Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION)你的android操作系统版本是6.0?还是API 23?我在5.1.1 emulator和安卓N beta设备上试用过。您已经获得安卓6.0的运行时权限。我从设置>应用程序手动授予了该权限。请尝试此操作
06-25 11:45:21.902 17298-17372/? I/DefaultRequestDirector: I/O exception (javax.net.ssl.SSLException) caught when processing request: Write error: ssl=0x8d334c00: I/O error during system call, Broken pipe
06-25 11:46:03.204 7086-7086/? I/dex2oat: dex2oat took 893.003ms (threads: 4) arena alloc=3KB (3288B) java alloc=2MB (2752008B) native alloc=3MB (3826768B) free=2MB (2464688B)
06-25 11:46:12.890 7234-7234/? W/MediaPlayer: Couldn't open content://com.android.providers.downloads.documents/document/545: java.lang.SecurityException: Permission Denial: opening provider com.android.providers.downloads.DownloadStorageProvider from ProcessRecord{d912193 7234:[package name]/u0a116} (pid=7234, uid=10116) requires android.permission.MANAGE_DOCUMENTS or android.permission.MANAGE_DOCUMENTS
06-25 11:46:12.938 7234-7234/? D/MediaPlayer: create failed: