1

Wenn ich versuche, diesen Teil des Codes in Android Lollipop-Version auszuführen. Alles ist ok. Aber in Eibisch Version funktioniert nicht:Play Audio Stream mit AudioTrack in 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); 
     } 
    } 

} 

hinzugefügt Berechtigungen:

<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" /> 

Gibt es eine Veränderung in Audiotrack Eibisch Version ???

+0

Sie nicht vergessen, Storage/etc Berechtigungen zur Laufzeit anfordern? Sie spielen aus Speicher/Internet/Ressourcen/generieren? –

+0

Für Android-Version 5 ist alles in Ordnung. aber in der Version 6 gibt es Einbruch der Stimme –

+0

Ich habe es. Darauf nicht angesprochen. 'InputStream generatedStream' aus Ressource oder Internet oder Speicher oder generieren Sie es selbst? –

Antwort

3

Versuchen Sie, die Laufzeitberechtigung für die Version 6.0 festzulegen.

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

Sie können andere Erlaubnis hinzufügen je nachdem, was erforderlich ...

+0

Problem ist nicht, wie kann ich Laufzeitberechtigung schreiben. Problem ist, warum AudioTrack nicht mit Marshmallow arbeitet. Aber der gleiche Code ist in Ordnung für Lollipop. –