0

기본적으로 제목에 모두 나와 있습니다. phonestatelistener 클래스에서 현재 재생중인 벨소리를 검색 할 수 있기를 원합니다. 한 가지 해결책은 단순히 RingtoneManager에서 DEFAULT URI를 검색하는 것일 수 있지만 사용자 지정 연락처 벨소리가 재생되는 경우에는 어떻게해야합니까?PhoneStateListener에서 재생중인 벨소리의 이름을 가져옵니다.

내가 지금까지 시도한 것에 대한 필수적인 코드 스 니펫. 그들 중 누구도 벨소리를 반환하지 않습니다. IsPlaying은 항상 false입니다.

public static String getPlayingRingtone() { 
    RingtoneManager m = new RingtoneManager(mCtx); 
    Cursor rings = m.getCursor(); 
    for(int i = 0; i < rings.getCount(); i++) { 
     Ringtone tone = m.getRingtone(i); 
     if (tone.isPlaying()) 
     Log.d("Playcallringtone", "**Is playing**" + tone.getTitle(mCtx)); 
    } 
    return null; 
} 

또한, 나는 시도했다 : public static final String CUSTOM_RINGTONE과 관련된 사용자 정의 벨소리에 대한 URI를 가지고 :

private class MyPhoneStateListener extends PhoneStateListener { 
    public void onCallStateChanged(int state,String number){ 
     switch(state){ 
     case TelephonyManager.CALL_STATE_IDLE: 
          // Do stuff for IDLE 
      break; 
     case TelephonyManager.CALL_STATE_OFFHOOK: 
          // Do stuff of OFFHOOK 
      break; 
     case TelephonyManager.CALL_STATE_RINGING: 
      getPlayingRingtone(); 
          // Do stuff for RINGING 
      break; 
     } 
    } 
} 

답변

1

ContactsContract.ContactOptionsColumns 재산이있다 :

Log.d("Playcallringtone", RingtoneManager.getRingtone(mCtx, 
      RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE)).getTitle(mCtx) + " is playing"); 

내 Phonestatelistener은 다음과 같습니다 연락. null이거나 누락 된 경우 기본 벨소리가 사용됩니다. 따라서 전화 상태 청취자가 전화 번호를 가져올 때 연락처 객체를 가져 와서 CUSTOM_RINGTONE 속성을 확인하십시오. 그 다음 null이 있다면 RingtoneManager에서 기본 벨소리를 가져옵니다. 그렇지 않으면 연락처에 대해 사용자 정의 된 벨소리를 얻을 수 있습니다.