java - 如何在音频播放器主活动代码中添加共享首选项
问题描述
我正在开发一个 android 音乐播放器,但不知道如何在我的代码中使用 sharedpreferences。
我想将最后一首歌保存在音乐播放器上,以便下次打开应用程序时,它会显示播放器上的最后一个音频。但是现在它丢失了播放器的前一首歌曲。这是我的项目的代码。URI 代码在这里给出。
private void initPlayer(final int position) {
if (mMediaPlayer != null && mMediaPlayer.isPlaying()) {
mMediaPlayer.reset();
}
String sname = mySongs.get(position).getName().replace(".mp3", "").replace(".m4a", "").replace(".wav", "").replace(".m4b", "");
songTitle.setText(sname);
Uri songResourceUri = Uri.parse(mySongs.get(position).toString());
mMediaPlayer = MediaPlayer.create(getApplicationContext(), songResourceUri); // create and load mediaplayer with song resources
mMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
String totalTime = createTimeLabel(mMediaPlayer.getDuration());
totTime.setText(totalTime);
mSeekBar.setMax(mMediaPlayer.getDuration());
mMediaPlayer.start();
playIcon.setBackgroundResource(R.drawable.stop);
}
});
mMediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
int curSongPoition = position;
// code to repeat songs until the
if (curSongPoition < mySongs.size() - 1) {
curSongPoition++;
initPlayer(curSongPoition);
} else {
curSongPoition = 0;
initPlayer(curSongPoition);
}
}
});
解决方案
使用下面的类来存储共享首选项
public class SharedPreferencesUtils {
private static final String TAG = SharedPreferencesUtils.class.getSimpleName();
/* store lastplayed song*/
public static void setPreviousSongInSharedPrefs(Context context, String songName) {
try {
SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(context);
SharedPreferences.Editor sharedPrefsEditor = sharedPrefs.edit();
sharedPrefsEditor.putString("PREVIOUS_SONG" , songName);
sharedPrefsEditor.apply();
} catch (Exception e) {
e.printStackTrace();
}
}
/* get store previous song*/
public static String getPreviousSongFromSharedPrefs(Context context) {
String previousSong = "";
try {
SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(context);
previousSong = sharedPrefs.getString("PREVIOUS_SONG" , "default value");
return previousSong;
} catch (Exception e) {
e.printStackTrace();
}
return previousSong;
}
}
调用相应的方法使用下面的代码:
存储歌曲名称:SharedPreferencesUtils.setPreviousSongInSharedPrefs(getContext(), songName);
获取以前的歌曲名称:String songname = SharedPreferencesUtils.getPreviousSongFromSharedPrefs(getContext());
推荐阅读
- javascript - 如何从 html 脚本标签访问 index.js res 属性
- ios - iOS 增强现实 3D 边界框精确尺寸
- cors - Swagger OpenApi 3.0 不允许 PUT 请求仅 POST 和 GET 工作
- docker - Nginx- 502 错误网关
- reactjs - 带有 Netlify CMSField“缩略图”的 Gatsby 图像不能有选择,因为类型“字符串”没有子字段
- javascript - 如何将 url 参数转换为对象数组的对象?
- composer-php - 用户/项目而不是组的 Gitlab Composer 包注册表
- python - Python xlwt - 你能保护工作簿格式吗?
- css - 如何从 VH calc 中获得高度的百分比?
- python - 从 scikit 图像导入 Cascade