zoukankan      html  css  js  c++  java
  • Android & 读取MP3文件的图片

    MainActivity.java
    package com.example.zachary01;
    
    import java.io.FileDescriptor;
    import java.io.FileNotFoundException;
    import java.util.ArrayList;
    
    import android.app.Activity;
    import android.content.ContentUris;
    import android.content.Context;
    import android.content.res.Resources;
    import android.database.Cursor;
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.net.Uri;
    import android.os.Bundle;
    import android.os.ParcelFileDescriptor;
    import android.provider.MediaStore;
    import android.view.Menu;
    import android.view.Window;
    import android.widget.Button;
    import android.widget.ListView;
    
    public class MainActivity extends Activity {
        ListView musiclv;
        public static final ArrayList<MusicInfo> musicList= new ArrayList<MusicInfo>();
        int musiclen = 0;
        public boolean isPlaying = false;
        private Button netButton = null;
        public static Resources resources;
        static int musicID = 1;
        private static final Uri sArtworkUri = Uri
                .parse("content://media/external/audio/media/" + musicID
                        + "/albumart");
        
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            requestWindowFeature(Window.FEATURE_NO_TITLE);
            setContentView(R.layout.activity_main);
            Init();
        }
    
        public void Init(){
            musiclv = (ListView)findViewById(R.id.musiclist);
            resources = this.getResources(); // 获取资源
            netButton = (Button)findViewById(R.id.net_button);
            getMusic();
            listViewInit();
        }
        
        private void getMusic(){
            musicList.clear();// 存入前先清空列表(处理返回桌面再进Acitvity 再次读取列表*2的问题)
            // 取得数据库对象
            // 查询所有音乐信息
            Cursor cursor = this.getContentResolver().query(
                    MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, new String[] {
                            // 歌曲名0
                            MediaStore.Audio.Media.TITLE,
                            // 歌手名1
                            MediaStore.Audio.Media.ARTIST,
                            // 专辑名2
                            MediaStore.Audio.Media.ALBUM,
                            // 歌曲路径3
                            MediaStore.Audio.Media.DATA,
                            // 歌曲时间4
                            MediaStore.Audio.Media.DURATION,
                            // 歌曲ID5
                            MediaStore.Audio.Media._ID,
                            // 歌曲大小6
                            MediaStore.Audio.Media.SIZE,
                            
                            // 显示全部名字 可以区分什么格式比如.mp3 .wma
                            MediaStore.Audio.Media.DISPLAY_NAME, },
                    // 将较小音频文件过滤掉
                    MediaStore.Audio.Media.SIZE + ">='" + 819200 + "'", null, null);
            
            if(cursor!=null && cursor.moveToFirst()){
                do{
                    MusicInfo mi = new MusicInfo(cursor.getString(0), 
                            cursor.getString(1),
                            cursor.getString(2),
                            cursor.getString(3),
                            cursor.getLong(4),
                            (int)cursor.getLong(5),
                            cursor.getString(6)
                            );
                    Bitmap bm = getMusicBitmap(this, mi.getId(), -1);
                    if(bm == null)
                        bm = BitmapFactory.decodeResource(resources, R.drawable.music);
                    mi.setBm(bm);
                    musicList.add(mi);
                }while(cursor.moveToNext());
            }
            musiclen = musicList.size();
        }
        
        /**
         * 将MP3里图片读取出来
         * 
         * @param context
         * @param songid
         * @param albumid
         * @return
         */
        private static Bitmap getMusicBitmap(Context context, long songid,
                long albumid) {
            Bitmap bm = BitmapFactory.decodeResource(resources, R.drawable.music);
            // 判断相关数据
            if (albumid < 0 && songid < 0) {
                throw new IllegalArgumentException(
                        "Must specify an album or a song id");
            }
            try {
                if (albumid < 0) {
                    Uri uri = Uri.parse("content://media/external/audio/media/"
                            + songid + "/albumart");
                    ParcelFileDescriptor pfd = context.getContentResolver()
                            .openFileDescriptor(uri, "r");
                    if (pfd != null) {
                        FileDescriptor fd = pfd.getFileDescriptor();
                        bm = BitmapFactory.decodeFileDescriptor(fd);
                    }
                    else{
                        bm = BitmapFactory.decodeResource(resources, R.drawable.music);
                    }
                } else {
                    Uri uri = ContentUris.withAppendedId(sArtworkUri, albumid);
                    ParcelFileDescriptor pfd = context.getContentResolver()
                            .openFileDescriptor(uri, "r");
                    if (pfd != null) {
                        FileDescriptor fd = pfd.getFileDescriptor();
                        bm = BitmapFactory.decodeFileDescriptor(fd);
                    }
                }
            } catch (FileNotFoundException ex) {
            }
            return bm;
        }
        public void listViewInit(){
            ListAdapter listAdapter = new ListAdapter(this, musicList);
            musiclv.setAdapter(listAdapter);
        }
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.main, menu);
            return true;
        }
    
    }
    ListAdapter.java
    package com.example.zachary01;
    
    import java.util.ArrayList;
    
    import android.content.Context;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.BaseAdapter;
    import android.widget.ImageView;
    import android.widget.TextView;
    
    public class ListAdapter extends BaseAdapter {
    
        Context con;
        ArrayList<MusicInfo> list;
    
        public ListAdapter(Context con, ArrayList<MusicInfo> list) {
            this.con = con;
            this.list = list;
        }
    
        public int getCount() {
    
            return this.list.size();
        }
    
        public Object getItem(int arg0) {
            return this.list.get(arg0);
        }
    
        public long getItemId(int arg0) {
    
            return arg0;
        }
    
        public View getView(int arg0, View arg1, ViewGroup arg2) {
            View view = arg1;
            if (view == null) {
                view = LayoutInflater.from(con).inflate(R.layout.list, null);
            }
            ImageView img = (ImageView)view.findViewById(R.id.img);
            TextView title = (TextView)view.findViewById(R.id.title);
            TextView artist = (TextView)view.findViewById(R.id.artist);
            
            // -------------------------------------
            img.setImageBitmap(this.list.get(arg0).getBm());
            title.setText(this.list.get(arg0).getTitle());
            artist.setText(this.list.get(arg0).getArtist());
            return view;
        }
    
    }
    MusicInfo.java
    package com.example.zachary01;
    
    import android.graphics.Bitmap;
    
    public class MusicInfo {
            private Bitmap bm;//专辑照片
            private String title;
            private String artist;
            private String album;
            private String url;
            private long time;
            private int id;
            private String size;
            public MusicInfo(String title,  String artist, String album, String url, long time, int id, String size){
                this.title = title;
                this.artist =artist;
                this.album = album;
                this.url = url;
                this.time = time;
                this.id = id;
                this.size = size;
            }
         
            public String getTitle() {
                return title;
            }
            public void setTitle(String title) {
                this.title = title;
            }
         
            public String getArtist() {
                return artist;
            }
            public void setArtist(String artist) {
                this.artist = artist;
            }
            public String getAlbum() {
                return album;
            }
            public void setAlbum(String album) {
                this.album = album;
            }
            public String getUrl() {
                return url;
            }
            public void setUrl(String url) {
                this.url = url;
            }
            public Bitmap getBm() {
                return bm;
            }
            public void setBm(Bitmap bm) {
                this.bm = bm;
            }
            public String getSize() {
                return size;
            }
            public void setSize(String size) {
                this.size = size;
            }
            public long getTime() {
                return time;
            }
            public void setTime(long time) {
                this.time = time;
            }
            public int getId() {
                return id;
            }
            public void setId(int id) {
                this.id = id;
            }
            @Override
            public String toString() {
                return "MusicInfo [title=" + title  + ", artist="
                     + artist + ", album=" + album +", url=" + url +", getClass()=" + getClass()
                     + "]";
            }
         
     }
    activity_main.xml
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="@color/background"
        android:orientation="vertical"
        tools:context=".MainActivity" >
    
        <LinearLayout    android:orientation="horizontal"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:background="@color/word"
            >
            <TextView    android:layout_width="180sp"
                android:layout_height="40sp"
                android:gravity="center_vertical"
                android:textSize="25sp"
                android:text="@string/app_name"
                android:textColor="@color/word"
                android:background="@color/grey"
                android:layout_marginTop="0dp"
                />
    
            <Button
                android:id="@+id/local_button"
                android:layout_width="70sp"
                android:layout_height="40dp"
                android:layout_marginBottom="0dp"
                android:layout_marginLeft="1dp"
                android:layout_marginRight="1dp"
                android:layout_marginTop="-4dp"
                android:background="@color/grey"
                android:gravity="center"
                android:text="@string/local"
                android:textColor="@color/word"
                android:textSize="18sp" />
    
            <Button
                android:id="@+id/net_button"
                android:layout_width="70sp"
                android:layout_height="40dp"
                android:layout_marginBottom="0dp"
                android:layout_marginLeft="0dp"
                android:layout_marginRight="8dp"
                android:layout_marginTop="-4dp"
                android:background="@color/grey"
                android:gravity="center"
                android:text="@string/net"
                android:textColor="@color/word"
                android:textSize="18sp" />
    
        </LinearLayout>
       <ListView    android:id="@+id/musiclist"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"/>
    </LinearLayout>
    list.xml
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:gravity="center_vertical"
        android:orientation="horizontal" >
        
        <ImageView
            android:id="@+id/img"
            android:layout_width="60sp"
            android:layout_height="60sp"
            />"
    
        <LinearLayout    
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical">
            
            <TextView    android:id="@+id/title"
                android:layout_width="wrap_content"
                android:layout_height="43sp"
                android:textSize="30sp"
                />
            
            <TextView    android:id="@+id/artist"
                android:layout_width="wrap_content"
                android:layout_height="17sp"
                android:textSize="13sp"
                />"
        </LinearLayout>
    
    </LinearLayout>
  • 相关阅读:
    套接口编程
    传输层
    1 简介
    共享池2
    jquery.dataTables列中内容居中问题?求解?
    bootstrap-multiselect.js多选下拉框初始化时默认选中初始值
    datatable 动态显示/隐藏列
    bootstrap table 主子表 局部数据刷新(刷新子表)
    bootstrap table 怎么实现前两列固定冻结?
    bootstrapTable表格表头换行
  • 原文地址:https://www.cnblogs.com/wizzhangquan/p/3064522.html
Copyright © 2011-2022 走看看