以下是我的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应用程序开发的新手。
答案 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);