2016-11-23 6 views
0

Боюсь, у меня есть какое-то фундаментальное непонимание того, как работает URI здесь. Я пытаюсь сохранить этот сигнал тревоги в моем файле SharedPreferences, а затем восстановить его таким же образом.Загрузить рингтон в медиаплеер из общих префиксов

Я считаю, что проблема заключается в том, как я разбор Uri, я не особо осведомлен о том, как URI будет извлекаться

Я пытался хранить следующее в мои sharedpreferences.

//the displayed name of the ringtone 
RingtoneManager.getRingtone(this, uri).getTitle(this) 

и

data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI) 

Строка каждого восстанавливает правильно, но я не знаю фактического ключа мне нужно разобрать, чтобы получить сигнал тревоги, что я ищу.

Попадая предпочтения следующим образом

/** Restore alarm tone and update UI */ 
     if (mSettings.contains(ALARM_TONE)){ 
      alarmTone = mSettings.getString(ALARM_TONE, null); 
      if (alarmTone != null) { 

       uri = Uri.parse(alarmTone); 
       TextView t = (TextView) findViewById(R.id.alarmTone); 
       t.setText(RingtoneManager.getRingtone(this, uri).getTitle(this)); 

       mp = MediaPlayer.create(getApplicationContext(), uri); 
      } 
     } 

ответ

0

Решение, которое я нашел использует Uri.toString() сохранить Uri предпочтениям. Загрузка мелодии назад с помощью Uri.parse(preferenceString)

onActivityresult, я сразу же сохранить Uri строку в моих предпочтениях

/** For selecting an alarmtone */ 
    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (resultCode == RESULT_OK) { 
      switch (requestCode) { 
       case ALARM_URI: 
        uri = data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI); 
        TextView mTextView = (TextView) findViewById(R.id.alarmTone); 
        mTextView.setText(RingtoneManager.getRingtone(this, uri).getTitle(this)); 

        mp = new MediaPlayer(); 
        mp = MediaPlayer.create(getApplicationContext(), uri); 

        mp.setLooping(true); 

        SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); 
        SharedPreferences.Editor editor = settings.edit(); 
        editor.putString(ALARM_TONE, uri.toString()); 
        editor.commit(); 

        break; 

       default: 
        break; 
      } 
     } 
    } 

Загрузите URI при запуске здесь

 if (mSettings.contains(ALARM_TONE)){ 
      alarmTone = mSettings.getString(ALARM_TONE, null); 
      if (alarmTone != null) { 
       uri = Uri.parse(alarmTone); 
       //update textview to loaded alarm tone 
       TextView t = (TextView) findViewById(R.id.alarmTone); 
       t.setText(RingtoneManager.getRingtone(this, uri).getTitle(this)); 

       mp = MediaPlayer.create(getApplicationContext(), uri); 
      } 
     }