允许用户从Android应用程序中选择系统警报音

时间:2014-05-26 11:08:48

标签: android alarm audio

以下是我的onClick()方法

public void onClick(View v){
    switch(v.getId()){
        case R.id.btnAlarm:
            intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
            intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_ALARM);
            intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE, "Select Tone");
            intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, (Uri) null);
            this.startActivityForResult(intent, 5);
            break;
    }
}

这是我的onActivityResult()方法 -

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode == -1 && requestCode == 5) {
        Uri uri = intent.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
        if(uri!=null){
            RingtoneManager.setActualDefaultRingtoneUri(EmergencyContactsActivity.this, RingtoneManager.TYPE_ALARM, uri);
        }
    }
}

我面临的问题是uri变量总是为null因此控件不会进入if语句。 我搜索过,并在每个地方找到相同的方法。请帮助我,因为我是Android应用程序开发的新手。

1 个答案:

答案 0 :(得分:4)

使用从Activity.onActivityResult传入的内容,而不是使用用于启动铃声选择器的Intent来检索输出Uri。换句话说,将intent更改为data

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode == -1 && requestCode == 5) {
        final Uri uri = data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
        if (uri != null) {
            RingtoneManager.setActualDefaultRingtoneUri(this, RingtoneManager.TYPE_ALARM, uri);
        }
    }
}

此外,您不需要传递(Uri) null,这实际上并没有做任何事情。额外RingtoneManager.EXTRA_RINGTONE_EXISTING_URI用于在铃声选择器打开时选择特定铃声。如果您想查看默认闹钟声音,请传入:

intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, System.DEFAULT_ALARM_ALERT_URI);

或者,如果您想检查要传入的默认警报声的实际名称:

intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI,
        RingtoneManager.getActualDefaultRingtoneUri(this, RingtoneManager.TYPE_ALARM));

当您选择默认闹钟声音时,确保播放默认闹钟声音,您应该添加额外的RingtoneManager.EXTRA_RINGTONE_DEFAULT_URI

intent.putExtra(RingtoneManager.EXTRA_RINGTONE_DEFAULT_URI, System.DEFAULT_ALARM_ALERT_URI);