2016-03-31 7 views
1

Ich habe eine Tuner-App und mit Audio-Record-Objekt für das Hören von Mikrofon. Ich möchte verstehen, dass es gut funktioniert für die meisten Geräte und Android-Versionen (sogar Android 6), aber ich habe Fehlerbericht von Kunden auf Samsung S7-Handys. Ich habe ähnliche Beiträge hier angeschaut, um diesen Fehler zu vermeiden, und es hat mir sehr geholfen. Aber jetzt kann ich nicht verstehen, warum nur S7-Telefone diesen Fehler gibt, während es auf anderen Android 6 Geräten funktioniert.startRecording() rief eine nicht initialisierte AudioRecord auf Samsung S7 Telefone

P.S. Ich habe kein S7 Telefon, also könnte ich keine Chance haben, etwas zu versuchen. Ich frage mich nur, ob jemand ähnliche Probleme hat und was das Problem mit S7-Telefonen sein könnte. Irgendwelche Ideen?

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 

     initAudioRecord(44100, 2048); 
     ..... 

    } 

    public void initAudioRecord(int sampleRateInHz, int bufferSizeInBytes) { 

      AudioRecord audioRecord = AudioRecordInstance(sampleRateInHz, bufferSizeInBytes); 


      if (audioRecord.getState() != AudioRecord.STATE_UNINITIALIZED) { 
       if (audioRecord.getRecordingState() != AudioRecord.RECORDSTATE_STOPPED) { 
        audioRecord.stop(); 
       } 
       audioRecord.release(); 
       audioRecord = AudioRecordInstance(sampleRateInHz, bufferSizeInBytes); 

      } 

      audioRecord.startRecording();  

    } 

    public AudioRecord AudioRecordInstance(int sampleRateInHz, int bufferSizeInBytes){ 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){ 
      return new AudioRecord.Builder() 
        .setAudioSource(MediaRecorder.AudioSource.MIC) 
        .setAudioFormat(new AudioFormat.Builder() 
          .setEncoding(AudioFormat.ENCODING_PCM_16BIT) 
          .setSampleRate(sampleRateInHz) 
          .setChannelMask(AudioFormat.CHANNEL_IN_MONO) 
          .build()) 
        .setBufferSizeInBytes(2*bufferSizeInBytes) 
        .build(); 
     }else{ 
      return new AudioRecord(
        MediaRecorder.AudioSource.MIC, 
        sampleRateInHz, 
        AudioFormat.CHANNEL_IN_MONO, 
        AudioFormat.ENCODING_PCM_16BIT, 
        bufferSizeInBytes * 2); 
     } 
    } 
} 

LogCat:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.tuner/com.tuner.TunerActivity}: java.lang.IllegalStateException: startRecording() called on an uninitialized AudioRecord. 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3253) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3349) 
    at android.app.ActivityThread.access$1100(ActivityThread.java:221) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1794) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:158) 
    at android.app.ActivityThread.main(ActivityThread.java:7224) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 
+0

Bitte relevanten Code eingeben. Es ist nicht möglich, Ihre Frage so zu beantworten. –

+0

hey ich habe den Code hinzugefügt. – uguboz

+0

Bitte veröffentlichen Sie auch die Logcat-Ausgabe. –

Antwort

0

Schließlich bemerkte ich, dass es nicht nur auf S7 Telefone abstürzt, sondern auch einige andere Android 6.0-Geräte. Und ich erkannte meinen dummen Fehler, dass ich vergessen habe, mit dem neuen Laufzeit-Erlaubnis-Design umzugehen, das mit dem Marshmallow kommt. Was mich verwirrt, dass es an einigen anderen Android 6.0 Geräten arbeitet. Ich nehme an, dass dies die Berechtigungen sind, die bereits von den Geräteeinstellungen für meine App gewährt wurden.

Also habe ich Laufzeitberechtigungen in meiner App für Marshmallow implementiert und jetzt funktioniert es.

+0

Mit welchen Berechtigungen haben Sie das bemerkt? Wir haben auch das gleiche Problem! – Jeremy

+0

RECORD_AUDIO in meinem Fall, aber das Problem war, keine Laufzeitberechtigung für Android 6.0 + Geräte zu implementieren – uguboz

Verwandte Themen