Android 在棉花糖中使用AudioTrack播放音频流
当我尝试在android棒棒糖版本中执行这部分代码时。一切都好。但在棉花糖中,这个版本不起作用: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);
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
}
}
}
}