Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.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 在棉花糖中使用AudioTrack播放音频流_Android_Android 6.0 Marshmallow_Android 5.1.1 Lollipop - Fatal编程技术网

Android 在棉花糖中使用AudioTrack播放音频流

Android 在棉花糖中使用AudioTrack播放音频流,android,android-6.0-marshmallow,android-5.1.1-lollipop,Android,Android 6.0 Marshmallow,Android 5.1.1 Lollipop,当我尝试在android棒棒糖版本中执行这部分代码时。一切都好。但在棉花糖中,这个版本不起作用: public static void play() { InputStream generetedStream = ...; int minBufferSize = AudioTrack.getMinBufferSize(16000, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT);

当我尝试在android棒棒糖版本中执行这部分代码时。一切都好。但在棉花糖中,这个版本不起作用:

public static void play() {

    InputStream generetedStream =  ...;

    int minBufferSize = AudioTrack.getMinBufferSize(16000, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT);
    AudioTrack trackw = new AudioTrack(AudioManager.STREAM_MUSIC, 16000, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT, minBufferSize, AudioTrack.MODE_STREAM);


    int bufferSize = 1024;
    byte[] lin = new byte[bufferSize];
    trackw.play();

    int i = 0;
    if (generetedStream != null) {
        while (generetedStream != null && (i = generetedStream.read(lin, 0, bufferSize)) > -1) {
            trackw.write(lin, 0, lin.length);
        }
    }

}
添加的权限:



棉花糖版本中有任何更改的音频曲目吗?

尝试为版本
6.0
设置运行时权限

if(Build.VERSION.SDK_INT>=23){
    int permissionCheck = ContextCompat.checkSelfPermission(MainActivity.this,
            Manifest.permission.READ_PHONE_STATE);
    if (permissionCheck != PackageManager.PERMISSION_GRANTED) {
        ActivityCompat.requestPermissions(MainActivity.this,
                new String[]{Manifest.permission.READ_PHONE_STATE},
                MY_PERMISSIONS_REQUEST_READ_PHONE_STATE);
    } else {
        // your code
    }
}else{
    // your code
}

@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
    switch (requestCode) {
        case MY_PERMISSIONS_REQUEST_READ_PHONE_STATE: {
            if (grantResults.length > 0
                    && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                // permission granted -code

            } else {

                // permission not granted - code
            }
        }
    }
}

您可以根据需要添加其他权限…

您是否忘了在运行时请求存储/etc权限?您正在从存储/互联网/资源/生成?播放android版本5,一切正常。但在第6版中,有一个突破性的声音,我明白了。我没问过
InputStream generatedstream
来自资源、internet或存储,还是您自己生成的?generatedstream是我自己生成的。我已经检查过没有问题了,Android 6+上对Android清单的写入权限不够。在使用它之前,您应该在运行时请求它们。阅读在您的情况下,首先应该解决的问题不是如何写入运行时权限。问题是为什么AudioTrack不能和棉花糖一起使用。但同样的代码也适用于棒棒糖。
if(Build.VERSION.SDK_INT>=23){
    int permissionCheck = ContextCompat.checkSelfPermission(MainActivity.this,
            Manifest.permission.READ_PHONE_STATE);
    if (permissionCheck != PackageManager.PERMISSION_GRANTED) {
        ActivityCompat.requestPermissions(MainActivity.this,
                new String[]{Manifest.permission.READ_PHONE_STATE},
                MY_PERMISSIONS_REQUEST_READ_PHONE_STATE);
    } else {
        // your code
    }
}else{
    // your code
}

@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
    switch (requestCode) {
        case MY_PERMISSIONS_REQUEST_READ_PHONE_STATE: {
            if (grantResults.length > 0
                    && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                // permission granted -code

            } else {

                // permission not granted - code
            }
        }
    }
}