0

从本质上讲,标题说明了一切。我希望能够在 phonestatelistener 类中检索当前正在播放的铃声。一种解决方案可能是简单地从 RingtoneManager 检索 DEFAULT URI,但如果播放自定义联系人铃声怎么办?

到目前为止我尝试过的强制性代码片段。他们都没有返回铃声。IsPlaying 总是错误的。

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

或者,我尝试过:

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

我的Phonestatelistener如下:

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

1 回答 1

1

ContactsContract.ContactOptionsColumns中有一个属性:public static final String CUSTOM_RINGTONE具有与联系人关联的自定义铃声的 URI。如果为 null 或缺失,则使用默认铃声。因此,当您获取号码时,在您的手机状态监听器中获取联系人对象并检查其CUSTOM_RINGTONE属性。如果它为空,则从RingtoneManager其他地方获取默认铃声,您可以获得联系人的自定义铃声。

于 2013-02-19T12:38:56.723 回答