2014-06-20 71 views
0

我正在嘗試構建在通話期間播放歌曲的應用程序。打電話給某人時工作正常。但在繼續撥打電話時無法播放歌曲。 我已將mp3文件放入資產文件夾中。這裏是我的代碼:在通話期間播放Android歌曲

if (TelephonyManager.CALL_STATE_OFFHOOK == state) { 
    // active 
    //Log.i(LOG_TAG, "OFFHOOK"); 
    try { 
     AssetFileDescriptor descriptor = getAssets().openFd("la.mp3"); 
     mp.setDataSource(descriptor.getFileDescriptor(), descriptor.getStartOffset(), descriptor.getLength()); 
     descriptor.close(); 

     mp.prepare(); 
     mp.setVolume(1f, 1f); 
     mp.setLooping(true); 
     mp.start(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 
+0

你所說的「這是工作的罰款叫」意思是之前? –

回答

0

我能夠做到這一點作爲調用playAudio()調用callIntent-

public void playAudio() { 
    try { 
     if (m.isPlaying()) { 
      Log.d("Playing the audio", ""); 
      m.stop(); 
      m.release(); 
      m = new MediaPlayer(); 
     } 
     m.setAudioStreamType(AudioManager.STREAM_VOICE_CALL); 
     AssetFileDescriptor descriptor = getAssets().openFd("test.mp3"); 
     m.setDataSource(descriptor.getFileDescriptor(), descriptor.getStartOffset(), descriptor.getLength()); 
     descriptor.close(); 
     m.prepare(); 
     m.setVolume(1f, 1f); 
     m.setLooping(true); 
     m.start(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

public void stopAudio() { 
    if (m.isPlaying()) { 
     Log.d("stop the audio", ""); 
     m.stop(); 
     m.release(); 
     m = new MediaPlayer(); 
    } 

} 

public class MyPhoneStateListener extends PhoneStateListener { 

    @Override 
    public void onCallStateChanged(int state, String incomingNumber) { 
     switch (state) { 
      //Hangup 
      case TelephonyManager.CALL_STATE_IDLE: 
       stopAudio(); 
       audioManager.setSpeakerphoneOn(false); 
       break; 
      //Outgoing 
      case TelephonyManager.CALL_STATE_OFFHOOK: 
       break; 
      //Incoming 
      case TelephonyManager.CALL_STATE_RINGING: 

       break; 
     } 
    } 
}