有些小的技巧总是需要花时间去寻找,为了帮助大家节省寻找的时间,也帮自己做一个记忆,总结如下:
在软件的设置界面总是免不了要设置一些接受信息的铃声,这个时候就用到了RingtonePreference ,首先在onCreate()里面,输入如下代码:
mAccountRingtone.setSummary(getRingtonName(mAccount.getRingtone()));
mAccountRingtone.setOnPreferenceChangeListener(new Reference.OnPreferenceChangeListener()
{
public boolean onPreferenceChange(Preference preference,Object newValue)
{
mAccountRingtone.setSummary(getRingtonName(newValue.toString()));
SharedPreferences sp=mAccountRingtone.getPreferenceManager().getSharedPreferences();
sp.edit().putString(PREFERENCE_RINGTONE, newValue.toString()).commit();
return false;
}
});
上面这段代码是说在监听到改变的时候,先把newValue显示到RingtonePreference 上面,然后保存到SharedPreferences里面,可能在有些地方还需要存到数据库里面,那大家就要问了,getRingtonName()这个方法是做什么的呢?其实newValue是一个Uri并不是铃声的名字,那么我们就需要通过这个Uri去查找数据库,来得到铃声的名字,下面是这个方法的实现:
public static final String DEFAULT="default";
public String getRingtonName(String uri)
{
if(uri.equals(""));
{
return "";
}
else
{
try
{
Uri mUri = Uri.parse(uri);
Cursor c = getContentResolver().query(mUri, new String[]{MediaStore.Audio.Media.TITLE}, null, null, null);
try
{
if(c.moveToFirst())
{
return c.getString(0);
}
else
{
return DEFAULT;
}
}
finally
{
c.close();
}
}
catch(Exception e)
{
return DEFAULT;
}
}
}
ok!