{"id":1255,"date":"2016-02-18T16:46:07","date_gmt":"2016-02-18T08:46:07","guid":{"rendered":"https:\/\/ai.zhousir.top\/?p=1255"},"modified":"2016-02-18T16:57:23","modified_gmt":"2016-02-18T08:57:23","slug":"%e8%8e%b7%e5%8f%96%e9%9f%b3%e4%b9%90%e6%92%ad%e6%94%be%e5%99%a8%e6%95%b0%e6%8d%ae%e6%96%b9%e5%bc%8f","status":"publish","type":"post","link":"https:\/\/ai.zhousir.top\/?p=1255","title":{"rendered":"\u83b7\u53d6MP3\u97f3\u4e50\u6570\u636e\u4e24\u79cd\u65b9\u5f0f"},"content":{"rendered":"<p>\u5927\u591a\u6570\u5e74\u8f7b\u4eba\u90fd\u559c\u6b22\u7528\u624b\u673a\u542c\u97f3\u4e50\uff0cAPP\u5e94\u7528\u5e02\u573a\u63d0\u4f9b\u4e86\u5404\u79cd\u5404\u6837\u7684\u97f3\u4e50\u64ad\u653e\u5668\uff0c\u8fd9\u91cc\u6211\u4eec\u6765\u5b9e\u73b0\u4e00\u6b3e\u81ea\u5df1\u7684\u97f3\u4e50\u64ad\u653e\u5668\uff0c\u9996\u5148\u83b7\u53d6\u672c\u5730\u97f3\u4e50\u6570\u636e.<!--more--><\/p>\n<p>\u672c\u5730\u97f3\u4e50\u6570\u636e\u4fdd\u5b58\u5728\u624b\u673a\u5b58\u50a8\u4e2d\uff0c\u6211\u4eec\u53ef\u4ee5\u91c7\u7528\u904d\u5386\u624b\u673a\u6587\u4ef6\u7684\u65b9\u5f0f\u8fc7\u8651\u83b7\u53d6\u97f3\u4e50\u8d44\u6e90\u3002<\/p>\n<p>\u4ee3\u7801\u5982\u4e0b:<\/p>\n<p>[java]<br \/>\n        \/**<br \/>\n\t * \u626b\u63cfSdcard\uff08\u5916\u90e8\u5b58\u50a8\uff09\u4e0b\u6240\u6709\u6587\u4ef6<br \/>\n\t *\/<br \/>\n\tpublic void scanFileList(File parentFile) {<br \/>\n\t\tFile[] listFile = parentFile.listFiles();<\/p>\n<p>\t\tif (listFile != null) {<br \/>\n\t\t\tfor (int i = 0; i &lt; listFile.length; i++) {<br \/>\n\t\t\t\tFile file = listFile[i];<br \/>\n\t\t\t\tif (file.isDirectory()) {<br \/>\n\t\t\t\t\tscanFileList(file);<br \/>\n\t\t\t\t} else {<br \/>\n\t\t\t\t\tif (file.getName().endsWith(&quot;mp3&quot;)) {<br \/>\n\t\t\t\t\t\tMusicBean music = new MusicBean();<br \/>\n\t\t\t\t\t\tString fileName = file.getName();<br \/>\n\t\t\t\t\t\tmusic.setMusicName(fileName.substring(0, fileName.length()-&quot;.mp3&quot;.length()));<br \/>\n\t\t\t\t\t\tmusic.setMusicPath(file.getAbsolutePath());<br \/>\n\t\t\t\t\t\tmMusicList.add(music);<br \/>\n\t\t\t\t\t}<br \/>\n\t\t\t\t}<br \/>\n\t\t\t}<br \/>\n\t\t}<br \/>\n\t}<br \/>\n[\/java]<\/p>\n<p>\u7a0b\u5e8f\u4e2d\u8c03\u7528\u6b64\u65b9\u6cd5\u5f97\u5230Mp3\u97f3\u4e50\u6dfb\u52a0\u5230ArrayList\u96c6\u5408mMusicList\u4e2d\uff0c\u6587\u4ef6\u7b49\u8017\u65f6\u64cd\u4f5c\u5e94\u653e\u5230\u7ebf\u7a0b\u4e2d\u8fdb\u884c.<\/p>\n<p>[java]<br \/>\n                new Thread(new Runnable() {<br \/>\n\t\t\t@Override<br \/>\n\t\t\tpublic void run() {<br \/>\n\t\t\t\tscanFileList(Environment.getExternalStorageDirectory());<br \/>\n\t\t\t\t\/** ListView\u5237\u65b0\u5fc5\u987b\u5728UI\u7ebf\u7a0b\u4e2d \u901a\u8fc7Handler\u6d88\u606f\u673a\u5236\u53d1\u9001\u5237\u65b0\u4ee3\u7801\u5230UI\u4e3b\u7ebf\u7a0b\u6267\u884c *\/<br \/>\n\t\t\t\tmHandler.post(new Runnable() {<br \/>\n\t\t\t\t\t@Override<br \/>\n\t\t\t\t\tpublic void run() {<br \/>\n\t\t\t\t\t\tmAdapter.setListData(mMusicList);<br \/>\n\t\t\t\t\t}<br \/>\n\t\t\t\t});<br \/>\n\t\t\t}<br \/>\n\t\t}).start();<br \/>\n[\/java]<\/p>\n<p>MP3\u97f3\u4e50\u6587\u4ef6\u4e2d\u4e0d\u4ec5\u5305\u542b\u6709\u6b4c\u66f2\u6570\u636e\uff0c\u8fd8\u6709\u5176\u5b83\u4fe1\u606f\u5982\uff1a\u6b4c\u66f2\u7684\u540d\u5b57\uff0c\u6b4c\u66f2\u7684\u4e13\u8f91\u540d\uff0c\u6b4c\u624b\u540d\uff0c\u6b4c\u66f2\u6587\u4ef6\u7684\u8def\u5f84\uff0c\u6b4c\u66f2\u7684\u603b\u64ad\u653e\u65f6\u957f\u7b49\u4fe1\u606f.\u8981\u5f97\u5230\u8fd9\u4e9b\u4fe1\u606f\u91c7\u7528\u4e0a\u8ff0\u9012\u5f52\u65b9\u5f0f\u9700\u8981\u6309\u7167\u4e00\u5b9a\u683c\u5f0f\u624d\u80fd\u8bfb\u53d6\u3002<br \/>\n\u7136\u800cAndroid\u624b\u673a\u7cfb\u7edf\u5df2\u7ecf\u4e3a\u6211\u4eec\u8bfb\u53d6\u4e86\u8fd9\u4e9b\u4fe1\u606f\u4fdd\u5b58\u5728\u7cfb\u7edf\u5a92\u4f53\u5e93\u8868\u91cc\uff0c\u5f53\u542f\u52a8\u624b\u673a\uff0c\u62d4\u63d2SDcard\u65f6\u7cfb\u7edf\u4f1a\u53d1\u9001\u626b\u63cf\u5e7f\u64ad\uff0c\u626b\u63cf\u670d\u52a1\u63a5\u6536\u5e7f\u64ad\u5bf9\u6307\u5b9a\u6587\u4ef6\u8fdb\u884c\u626b\u63cf\uff0c\u6dfb\u52a0\u6570\u636e\u5230\u5a92\u4f53\u5e93\u8868\u3002\u5a92\u4f53\u5e93URI\u5730\u5740\u4e3a\uff1aMediaStore.Audio.Media.EXTERNAL_CONTENT_URI\uff0c\u8fd9\u6837\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u67e5\u8be2\u5a92\u4f53\u5e93\u83b7\u53d6\u97f3\u4e50\u6570\u636e\u3002<br \/>\n\u67e5\u8be2\u6307\u5b9adirName\u8def\u5f84\u5a92\u4f53\u6570\u636e\uff1a<\/p>\n<p>[java]<br \/>\n Cursor cursor = getContentResolver().query(<br \/>\n                MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null,<br \/>\n                MediaStore.Audio.Media.DATA + &quot; like ?&quot;,<br \/>\n                new String[]{dirName + &quot;%&quot;},<br \/>\n                MediaStore.Audio.Media.DEFAULT_SORT_ORDER);<br \/>\n[\/java]<\/p>\n<p>\u67e5\u8be2\u6240\u6709\u5a92\u4f53\u6570\u636e:<\/p>\n<p>[java]<br \/>\nCursor cursor = getContentResolver().query(<br \/>\n\t\t\t\tMediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null,<br \/>\n\t\t\t\tMediaStore.Audio.Media.DEFAULT_SORT_ORDER);<br \/>\n[\/java]<\/p>\n<p>\u67e5\u51fa\u7684\u5a92\u4f53\u6570\u636e\u4e0d\u4ec5\u662f\u97f3\u4e50mp3\u8fd8\u6709\u5176\u5b83\uff0c\u9700\u8981\u8fc7\u8651\u4e0b:<\/p>\n<p>[java]<br \/>\n\/**<br \/>\n* MediaStore.Audio.Media.EXTERNAL_CONTENT_URI \u5bf9\u5e94\u5b57\u6bb5<br \/>\n* \u6b4c\u66f2ID\uff1aMediaStore.Audio.Media._ID<br \/>\n* \u6b4c\u66f2\u7684\u540d\u79f0\uff1aMediaStore.Audio.Media.TITLE<br \/>\n* \u6b4c\u66f2\u7684\u4e13\u8f91\u540d\uff1aMediaStore.Audio.Media.ALBUM<br \/>\n* \u6b4c\u66f2\u7684\u6b4c\u624b\u540d\uff1aMediaStore.Audio.Media.ARTIST<br \/>\n* \u6b4c\u66f2\u6587\u4ef6\u7684\u8def\u5f84\uff1aMediaStore.Audio.Media.DATA<br \/>\n* \u6b4c\u66f2\u7684\u603b\u64ad\u653e\u65f6\u957f\uff1aMediaStore.Audio.Media.DURATION<br \/>\n* \u6b4c\u66f2\u6587\u4ef6\u7684\u5927\u5c0f\uff1aMediaStore.Audio.Media.SIZE<br \/>\n*<br \/>\n*\/<\/p>\n<p>       for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) {<br \/>\n            \/\/ \u5982\u679c\u4e0d\u662f\u97f3\u4e50<br \/>\n            String isMusic = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.IS_MUSIC));<br \/>\n            if (isMusic != null &amp;&amp; isMusic.equals(&quot;&quot;)) continue;<\/p>\n<p>            String title = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.TITLE));<br \/>\n            String artist = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ARTIST));<\/p>\n<p>            if (isRepeat(title, artist)) continue;<\/p>\n<p>            music = new Music();<br \/>\n            music.setId(cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media._ID)));<br \/>\n            music.setTitle(title);<br \/>\n            music.setArtist(artist);<br \/>\n            music.setUri(cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA)));<br \/>\n            music.setLength(cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DURATION)));<br \/>\n            music.setImage(getAlbumImage(cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ALBUM_ID))));<\/p>\n<p>            Constances.mMediaLists.add(music);<br \/>\n        }<br \/>\n[\/java]<\/p>\n<p>isRepeat()\u65b9\u6cd5\u662f\u53bb\u6389\u91cd\u590d\u8d44\u6e90\uff0cgetAlbumImage()\u53ef\u6839\u636ealbum_id\u8bfb\u53d6\u97f3\u4e50\u56fe\u7247\u5730\u5740<\/p>\n<p>[java]<br \/>\n\/**<br \/>\n     * \u6839\u636e\u97f3\u4e50\u540d\u79f0\u548c\u827a\u672f\u5bb6\u6765\u5224\u65ad\u662f\u5426\u91cd\u590d\u5305\u542b\u4e86<br \/>\n     *<br \/>\n     * @param title<br \/>\n     * @param artist<br \/>\n     * @return<br \/>\n     *\/<br \/>\n    private boolean isRepeat(String title, String artist) {<br \/>\n        for (Music music : Constances.mMediaLists) {<br \/>\n            if (title.equals(music.getTitle()) &amp;&amp; artist.equals(music.getArtist())) {<br \/>\n                return true;<br \/>\n            }<br \/>\n        }<br \/>\n        return false;<br \/>\n    }<\/p>\n<p>    \/**<br \/>\n     * \u6839\u636e\u6b4c\u66f2id\u83b7\u53d6\u56fe\u7247<br \/>\n     *<br \/>\n     * @param albumId<br \/>\n     * @return<br \/>\n     *\/<br \/>\n    private String getAlbumImage(int albumId) {<br \/>\n        String result = &quot;&quot;;<br \/>\n        Cursor cursor = null;<br \/>\n        try {<br \/>\n            cursor = getContentResolver().query(<br \/>\n                    Uri.parse(&quot;content:\/\/media\/external\/audio\/albums\/&quot;<br \/>\n                            + albumId), new String[]{&quot;album_art&quot;}, null,<br \/>\n                    null, null);<br \/>\n            for (cursor.moveToFirst(); !cursor.isAfterLast(); ) {<br \/>\n                result = cursor.getString(0);<br \/>\n                break;<br \/>\n            }<br \/>\n        } catch (Exception e) {<br \/>\n        } finally {<br \/>\n            if (null != cursor) {<br \/>\n                cursor.close();<br \/>\n            }<br \/>\n        }<\/p>\n<p>        return null == result ? null : result;<br \/>\n    }<br \/>\n[\/java]<\/p>\n<p>\u8bfb\u53d6\u97f3\u4e50\u6570\u636e\u663e\u793a\u6548\u679c<\/p>\n<p>[java]<br \/>\n            Music music = (Music) getItem(position);<br \/>\n            Bitmap icon = BitmapFactory.decodeFile(music.getImage());<br \/>\n            holder.icon.setImageBitmap(icon == null ? BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher) : icon);<br \/>\n            holder.title.setText(music.getTitle());<br \/>\n            holder.artist.setText(music.getArtist());<br \/>\n[\/java]<\/p>\n<p><a href=\"https:\/\/ai.zhousir.top\/wp-content\/uploads\/2016\/02\/mediastore1.png\" rel=\"fancybox\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-1256\" src=\"https:\/\/ai.zhousir.top\/wp-content\/uploads\/2016\/02\/mediastore1.png\" alt=\"mediastore1\" width=\"400\" height=\"454\" \/><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u5927\u591a\u6570\u5e74\u8f7b\u4eba\u90fd\u559c\u6b22\u7528\u624b\u673a\u542c\u97f3\u4e50\uff0cAPP\u5e94\u7528\u5e02\u573a\u63d0\u4f9b\u4e86\u5404\u79cd\u5404\u6837\u7684\u97f3\u4e50\u64ad\u653e\u5668\uff0c\u8fd9\u91cc\u6211\u4eec\u6765\u5b9e\u73b0\u4e00\u6b3e\u81ea\u5df1\u7684\u97f3\u4e50\u64ad\u653e\u5668\uff0c [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[3],"tags":[76],"_links":{"self":[{"href":"https:\/\/ai.zhousir.top\/index.php?rest_route=\/wp\/v2\/posts\/1255"}],"collection":[{"href":"https:\/\/ai.zhousir.top\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ai.zhousir.top\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ai.zhousir.top\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ai.zhousir.top\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1255"}],"version-history":[{"count":5,"href":"https:\/\/ai.zhousir.top\/index.php?rest_route=\/wp\/v2\/posts\/1255\/revisions"}],"predecessor-version":[{"id":1261,"href":"https:\/\/ai.zhousir.top\/index.php?rest_route=\/wp\/v2\/posts\/1255\/revisions\/1261"}],"wp:attachment":[{"href":"https:\/\/ai.zhousir.top\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1255"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ai.zhousir.top\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1255"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ai.zhousir.top\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1255"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}