2016-11-23 2 views
0

Ich fürchte, ich habe ein grundlegendes Missverständnis, wie URI hier funktioniert. Ich versuche, diesen Alarmton in meiner Datei SharedPreferences zu speichern und dann auf die gleiche Weise wiederherzustellen.Load Ringtone in Mediaplayer von SharedPreferences

Ich glaube, das Problem ist, wie ich die Uri bin Parsen, ich bin nicht besonders bewusst, wie URI

abgerufen würde ich habe versucht, die folgenden in meinem sharedpreferences speichern.

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

und

data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI) 

Die Kette von jeder wieder richtig, aber ich bin mir nicht bewusst der eigentliche Schlüssel ich analysieren müssen, um den Alarmton abzurufen, die ich suche.

Erste Einstellungen wie folgt

/** 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); 
      } 
     } 

Antwort

0

Die Lösung fand ich verwendet Uri.toString() die Uri Einstellungen zu speichern. den Klingelton Laden Uri.parse(preferenceString)

onActivityResult mit zurück, speichern ich sofort die uri String in meine Vorlieben

/** 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; 
      } 
     } 
    } 

Laden Sie die URI auf Start hier

 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); 
      } 
     }