1

AndroidのLollipopバージョンでこの部分のコードを実行しようとすると、全て大丈夫。しかし、マシュマロのバージョンで動作していない:Audio再生Audio Stream with Marshmallow

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); 
     } 
    } 

} 

を追加しまし権限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.RECORD_AUDIO" /> 
<uses-permission android:name="android.permission.CAMERA" /> 
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/> 
<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> 

は、マシュマロのバージョンのいずれかの変更AudioTrackがあります?

+0

は、実行時にストレージの/ etc権限を要求することを忘れないでください?あなたはstorage/internet/resources/generateから遊んでいますか? –

+0

アンドロイド版5の場合はすべて問題ありません。バージョン6では音声が途切れる。 –

+0

私はそれを得た。それについては尋ねなかった。 'InputStream generetedStream'をリソースやインターネットやストレージから取り出したり、あなた自身で生成していますか? –

答えて

3

バージョン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 
      } 
     } 
    } 
} 

...

+0

問題はどうやって実行時の許可を書くことができないのですか?問題は、AudioTrackがマシュマロで働いていない理由です。しかし、同じコードはLollipopにとっては大丈夫です。 –