音乐播放器的乱码问题!!

这是我的代码。
ContentResolver cr = c.getContentResolver();
Cursor cursor = cr.query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
null, null, null, MediaStore.Audio.Media.DEFAULT_SORT_ORDER);
if (cursor != null && cursor.getCount() > 0) {
for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor
.moveToNext()) {
long id = cursor.getLong(cursor
.getColumnIndex(MediaStore.Audio.Media._ID));
// 歌曲名
String title = cursor.getString(cursor
.getColumnIndexOrThrow(MediaStore.Audio.Media.TITLE));
// 歌手名
String singer = cursor.getString(cursor
.getColumnIndexOrThrow(MediaStore.Audio.Media.ARTIST));
// 歌曲长度
int time = cursor
.getInt(cursor
.getColumnIndexOrThrow(MediaStore.Audio.Media.DURATION));
// 歌曲文件名字
String name = cursor
.getString(cursor
.getColumnIndexOrThrow(MediaStore.Audio.Media.DISPLAY_NAME));
String suffix = name
.substring(name.length() - 4, name.length());
// 歌曲文件的全路径
String url = cursor.getString(cursor
.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA));
File file = new File(url);
BufferedReader reader;
FileInputStream fis;
try {
fis = new FileInputStream(file);
BufferedInputStream in = new BufferedInputStream(fis);
in.mark(4);
byte[] first3bytes = new byte[3];
in.read(first3bytes);
in.reset();
if (first3bytes[0] == (byte) 0xEF
&& first3bytes[1] == (byte) 0xBB
&& first3bytes[2] == (byte) 0xBF) {
charset = "utf-8";
} else if (first3bytes[0] == (byte) 0xFF
&& first3bytes[1] == (byte) 0xFE) {
charset = "unicode";
Toast.makeText(c, charset, 1).show();
} else if (first3bytes[0] == (byte) 0xFE
&& first3bytes[1] == (byte) 0xFF) {
charset = "utf-16be";
} else if (first3bytes[0] == (byte) 0xFF
&& first3bytes[1] == (byte) 0xFF) {
charset = "utf-16le";
} else {
charset = "GBK";
}
} catch (FileNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 专辑名
String album = cursor.getString(cursor
.getColumnIndexOrThrow(MediaStore.Audio.Media.ALBUM));
try {
singer = new String(singer.getBytes(), charset);
title = new String(title.getBytes(), charset);
album = new String(album.getBytes(), charset);
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
long albumid = cursor.getLong(cursor
.getColumnIndex(MediaStore.Audio.Media.ALBUM_ID));
if (url.endsWith(".mp3") || url.endsWith(".MP3")) {
Map<String, Object> map = new HashMap<String, Object>();
map.put("ID", id);
map.put("TITLE", title);
map.put("SINGER", singer);
map.put("TIME", time);
map.put("NAME", name);
map.put("SUFFIX", suffix);
map.put("URL", url);
map.put("ALBUM", album);
map.put("ALBUMID", albumid);
musicdata.add(map);
}
}
在网上找的几种方式都试过。有作用,但感觉都不彻底。还有的就是用播放器转什么的。那个太麻烦。有没有简单有效的方法。
相关推荐
Ubuntu音乐播放器Rhythmbox中文乱码解决及OSDLyrics安装方法
Ubuntu音乐播放器Rhythmbox中文乱码的解决方法,OSDLyrics安装与使用
解决ubuntu下中文乱码问题终版.pdf
解决ubuntu下中文乱码问题终版.pdf
ubuntu(vim,gedit等)乱码问题的解决
解决ubuntu下使用windows资源中文乱码的问题
音乐乱码去除器
面就小米手机MIUI歌曲乱码这个问题先分析下原因: ID3标签信息还分ID3v1和ID3v2,小米手机MIUI自带的音乐播放器能良好支持ID3v2标签,但对ID3v1的识别却不到位,经常出现无法识别的问题,并且对简体中文采用的文本编码方式GB2312(ANSI)支持不佳,因为西文字符默认编码方式一般是UTF-8。 找到了小米手机MIUI歌曲乱码原因下,咱们就要对症下药,ID3V1标签信息和简体中文采用的文本编码支持不好咱就给它转换呗。把每首歌曲的的标签保持为ID3V2不就好了?改ID3标签信息的软件很多,小米手机MIUI音乐播放器本身就有修改ID3信息的功能,当然如果乱码的歌曲比较多的话就不适用了。 这时我们就来解决小米手机歌曲乱码的这个问题,需要在电脑上使用软件来修改了。可以修改ID3的播放器很多,比如:千千静听,Winamp等等。下面我给大家介绍用“千千静听”来修改: 小米手机解决歌曲乱码问题第一步,需要修改ID3信息的歌曲导入到千千静听里面,然
晴天音乐播放器
晴天音乐播放器源码服务端很简单,相信给个截图大家就明白了。请自己去搭吧,tomcat很简单的。搭好后修改源码里Constant里的IP就OK了。所有与编码有关的地方都请设置为utf-8,避免乱码,例如eclipse工作空间。



