android 在共享首选项中保存铃声并重新获取

android save Ringtone in Sharedpreferences and get it again

我得到了当前的铃声。现在我只想将它保存在 sharedpreference .

我怎样才能做到这一点?

这是我试过的代码:

Uri currentRintoneUri = 
          RingtoneManager.getActualDefaultRingtoneUri(context.getApplicationContext(), 
                                                      RingtoneManager.TYPE_RINGTONE);
Ringtone currentRingtone = RingtoneManager.getRingtone(context, currentRintoneUri);

它不适用于铃声,但它适用于编辑文本:

sharedpreferences = getSharedPreferences(MyPRE, Context.MODE_PRIVATE);
String current = sharedpreferences.getString(CUR, "");
SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putString(CUR, String.valueOf((currentRingtone)));
editor.commit();

当你想要获取铃声时,同样的过程,

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());

String ringtone = preferences.getString("CUR", "DEFAULT_SOUND");

Uri uri = Uri.parse(ringtone);

现在可以使用uri获取铃声了

伙计,你的代码是正确的。我刚刚写了一个Demo测试你的代码。

调用此代码段时,您可能需要 权限 android.permission.READ_EXTERNAL_STORAGE Ringtone currentRingtone = RingtoneManager.getRingtone(context, currentRintoneUri);

当我调用代码段时,我在 logcat 中收到此警告:W/MediaPlayer: Couldn't open file on client side; trying server side: java.lang.SecurityException: Permission Denial: reading com.android.providers.media.MediaProvider uri content://media/external/audio/media/79645 from pid=8293, uid=11729 requires android.permission.READ_EXTERNAL_STORAGE, or grantUriPermission()

所以,正确的方法是在 SharedPreferences 中保存 String.valueOf(Uri) 而不是 保存 String.valueOf(Ringtone object).