【问题标题】:When getting ringtone title for "Hangout Message", I get 11?获取“环聊消息”的铃声标题时,我得到 11?
【发布时间】:2014-07-17 03:33:59
【问题描述】:

我正在尝试获取用户刚刚选择的警报的名称。它几乎适用于我测试过的每个警报。到目前为止,只有一个例外:环聊消息。我用这个选择一个闹钟:

Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE, "Select ringtone for notifications:");
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT, false);
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT, true);
if (alarm.getSound() != null) {
    intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, alarm.getSound());
} else {
    Uri alert = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);
    intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, alert);
}
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE,RingtoneManager.TYPE_ALARM);
startActivityForResult(intent, alarm.getID());

还有我的onActivityResponse

protected void onActivityResult(int id, int resultCode, Intent data) {
    if (resultCode == RESULT_OK) {
        Uri ringtone = data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
        if (id != -1) {
            for (int i = 0; i < Alarms.size(); i++) {
                Alarm alarm = Alarms.get(i);
                if (alarm.getID() == id) {
                    alarm.setSound(ringtone);
                    alarm.UpdateView();
                    DB.SaveAlarm(alarm);
                    break;
                }
            }
        }
    }
}

我有一个非常简单的方法可以从 URI 中获取铃声名称:

Ringtone tone = RingtoneManager.getRingtone(this.Con, this.Sound);
AlarmSound.setText(tone.getTitle(this.Con).toUpperCase());

this.Con 是一个上下文,通常是一个Activity,可能是一个ServiceAlarm 类是我自己的类。 this.Sound 是铃声的 URI。对于不是环聊​​消息的所有其他警报,这很有效,并为我提供了正确的铃声名称。对于环聊消息,我收到 11 并且没有错误。 URI 是content://media/external/audio/media/11,所以我知道它从哪里得到11,但我想把它翻译成它的正确名称。我不想为它硬编码一个特殊情况。

如何从这个 URI 获取环聊消息?

我确实想指出,在我设置现有 URI 的代码中,如果环聊消息是现有声音,它将像任何其他铃声一样正确地预先选择它。铃声选择器会正确显示其名称,并且应用程序会在时间到时正确播放声音。

编辑:我找到了股票 Android DeskClock 应用程序的标题名称here (line 1356)

private String getRingToneTitle(Uri uri) {
    // Try the cache first
    String title = mRingtoneTitleCache.getString(uri.toString());
    if (title == null) {
        // This is slow because a media player is created during Ringtone object creation.
        Ringtone ringTone = RingtoneManager.getRingtone(mContext, uri);
        title = ringTone.getTitle(mContext);
        if (title != null) {
            mRingtoneTitleCache.putString(uri.toString(), title);
        }
    }
    return title;
}

除了缓存,它和我没有什么不同。这让我相信,也许我正在其他地方制造问题,但我不知道还有什么可能会影响这一点。生根或 Xposed 框架会产生这种特定的副作用吗?

【问题讨论】:

    标签: android


    【解决方案1】:

    如果我真的读过日志,我早就知道了。

    因为它是另一个应用程序提供的铃声,我需要一个新的权限来获取有关它的信息。我需要READ_EXTERNAL_STORAGE,添加后效果很好。

    【讨论】:

      猜你喜欢
      • 2011-05-28
      • 1970-01-01
      • 2015-05-13
      • 2015-07-10
      • 2016-05-10
      • 1970-01-01
      • 2016-05-22
      • 2019-04-09
      • 1970-01-01
      相关资源
      最近更新 更多