You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从RingtonePicker对话框选铃声并显示到TextView,及设置默认复选框

这两个都是Android开发里常见的铃声选择器需求,我给你一步步拆解解决:

问题1:点击OK按钮时,从RingtonePicker对话框选择铃声并显示在TextView中

要实现这个功能,分两步走:启动铃声选择器,然后处理返回的选择结果:

  • 步骤1:启动RingtonePicker对话框
    先创建一个Intent指定铃声选择器的动作,配置好显示参数后,启动带返回结果的Activity(AndroidX推荐用registerForActivityResult,旧版本用startActivityForResult):

    示例代码(AndroidX写法):

    // 先定义ActivityResultLauncher
    ActivityResultLauncher<Intent> ringtonePickerLauncher = registerForActivityResult(
        new ActivityResultContracts.StartActivityForResult(),
        result -> {
            // 这里处理返回结果,后面会讲
        }
    );
    
    // 启动铃声选择器的方法
    private void openRingtonePicker() {
        Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
        // 指定选择来电铃声类型
        intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_RINGTONE);
        // 隐藏静音选项
        intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT, false);
        // 显示默认铃声选项
        intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT, true);
        // 启动选择器
        ringtonePickerLauncher.launch(intent);
    }
    
  • 步骤2:处理选择结果并显示到TextView
    在上面的ActivityResultLauncher回调里,获取选中的铃声URI,解析出铃声名称后设置到TextView:

    ActivityResultLauncher<Intent> ringtonePickerLauncher = registerForActivityResult(
        new ActivityResultContracts.StartActivityForResult(),
        result -> {
            if (result.getResultCode() == RESULT_OK && result.getData() != null) {
                // 获取选中的铃声URI
                Uri ringtoneUri = result.getData().getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
                if (ringtoneUri != null) {
                    // 解析铃声名称
                    Ringtone ringtone = RingtoneManager.getRingtone(this, ringtoneUri);
                    String ringtoneName = ringtone.getTitle(this);
                    // 显示到目标TextView
                    yourTargetTextView.setText(ringtoneName);
                }
            }
        }
    );
    

    如果你用的是旧版onActivityResult,可以这样写:

    private static final int RINGTONE_REQUEST_CODE = 1001;
    
    private void openRingtonePicker() {
        Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
        intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_RINGTONE);
        intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT, false);
        intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT, true);
        startActivityForResult(intent, RINGTONE_REQUEST_CODE);
    }
    
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == RINGTONE_REQUEST_CODE && resultCode == RESULT_OK) {
            Uri ringtoneUri = data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
            if (ringtoneUri != null) {
                Ringtone ringtone = RingtoneManager.getRingtone(this, ringtoneUri);
                yourTargetTextView.setText(ringtone.getTitle(this));
            }
        }
    }
    
问题2:将RingtonePicker默认选中项从“Andromeda”改为“Default ringtone”

核心是给启动选择器的Intent设置初始选中的URI为系统默认铃声,具体操作如下:

在创建铃声选择器Intent的时候,添加两个关键参数:

private void openRingtonePickerWithDefaultSelected() {
    Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
    intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_RINGTONE);
    intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT, false);
    intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT, true);

    // 获取系统默认铃声的URI
    Uri defaultRingtoneUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE);
    // 设置默认铃声的URI(确保"Default ringtone"选项存在)
    intent.putExtra(RingtoneManager.EXTRA_RINGTONE_DEFAULT_URI, defaultRingtoneUri);
    // 设置对话框打开时默认选中系统铃声
    intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, defaultRingtoneUri);

    // 启动选择器(用你之前的launcher或者startActivityForResult)
    ringtonePickerLauncher.launch(intent);
}

这样打开RingtonePicker对话框时,“Default ringtone”就会被默认选中,而不是原来的“Andromeda”了。


内容的提问来源于stack exchange,提问作者Md Faysal Ahmed Akash

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:19:56