android简单音乐播放器(二)

本文介绍了如何使用Android Activity播放音乐,并对比了使用Service播放音乐的优势与不足。通过代码实现,详细阐述了Activity与Service在播放音乐场景中的不同应用策略,旨在帮助开发者理解在不同场景下选择合适的播放方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

还是使用Activity方法播放音乐,因为我感觉还是没有弄懂service播放音乐,当然Activity播放,如果退出这个应用,音乐就不播放了…

上代码:
MainActivity.java

package com.example.dzplayer;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.content.ComponentName;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.database.Cursor;
import android.graphics.Color;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.IBinder;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;
import android.widget.Toast;
import android.os.Build;
import android.provider.MediaStore;

public class MainActivity extends Activity{
private ListView lv;
private LayoutInflater mInflater;
private List<Mp3Info> mp3list; 
public MediaPlayer mp = null;
private Intent serviceIntent = null;
private PlayMuSicService myService = null;
    @SuppressWarnings("deprecation")
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        lv = (ListView)findViewById(R.id.listview);
        ContentResolver musicResolver = this.getContentResolver();
        Cursor musicCursor = musicResolver.query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null,null, null,MediaStore.Audio.Media.DEFAULT_SORT_ORDER);
        try{
                mp3list= new ArrayList<Mp3Info>();  
                Cursor cursor = getContentResolver().query(
                    MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null,
                    MediaStore.Audio.Media.DEFAULT_SORT_ORDER);
                List<Mp3Info> mp3Infos = new ArrayList<Mp3Info>();
                for (int i = 0; i < cursor.getCount(); i++) {
                    Mp3Info mp3Info = new Mp3Info(null,null,null,null,null);
                    cursor.moveToNext();
                    long id = cursor.getLong(cursor
                        .getColumnIndex(MediaStore.Audio.Media._ID));   //音乐id
                    String title = cursor.getString((cursor 
                        .getColumnIndex(MediaStore.Audio.Media.TITLE)));//音乐标题
                    String artist = cursor.getString(cursor
                        .getColumnIndex(MediaStore.Audio.Media.ARTIST));//艺术家
                    long duration = cursor.getLong(cursor
                        .getColumnIndex(MediaStore.Audio.Media.DURATION));//时长
                    long size = cursor.getLong(cursor
                        .getColumnIndex(MediaStore.Audio.Media.SIZE));  //文件大小
                    String url = cursor.getString(cursor
                        .getColumnIndex(MediaStore.Audio.Media.DATA));              //文件路径
                int isMusic = cursor.getInt(cursor
                    .getColumnIndex(MediaStore.Audio.Media.IS_MUSIC));//是否为音乐
                //if (isMusic != 0) {       //只把音乐添加到集合当中
                    //mp3Info.setAlbum(album);
                    mp3Info.setPath(url);
                    mp3list.add(mp3Info);
                //  }
                }


        }
        catch(Exception e)
        {
            Toast.makeText(MainActivity.this, "获得方法不对", Toast.LENGTH_SHORT).show();
        }
        musicCursor.moveToFirst();
        @SuppressWarnings("deprecation")
        ListAdapter listAdapter = new SimpleCursorAdapter(this, R.layout.simple_music, 
                musicCursor,
                new String[]{MediaStore.Audio.Media.TITLE,MediaStore.Audio.Media.ALBUM,MediaStore.Audio.AudioColumns.DATA}, 
                new int[]{R.id.name,R.id.album,R.id.path});
        //将NAME列的数据一次映射到布局文件的id为text1的组件上。
        lv.setAdapter(listAdapter);
        lv.setOnItemClickListener(new OnItemClickListener(){
              @Override
              public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                      long arg3) {
                  if(mp3list !=null)
                  {
                      if( mp3list.get(arg2).getPath()!=null)
                      {
                          if(mp!=null)
                          {
                              mp.stop();
                              mp.release();
                              mp = null;
                          }
                            mp  = new MediaPlayer();
                            String filepath = mp3list.get(arg2).getPath();
                            Toast.makeText(getApplicationContext(), filepath, Toast.LENGTH_SHORT).show();
                            try {
                                mp.setDataSource(filepath);
                            } catch (IllegalArgumentException | SecurityException
                                    | IllegalStateException | IOException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            }
                            try {
                                mp.prepare();
                            } catch (IllegalStateException | IOException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            }
                            mp.start();
                      }

                      else
                          Toast.makeText(MainActivity.this, "path os ", Toast.LENGTH_SHORT).show();
                  }
            }
        });

    }

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

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

}

Mp3Info.java是这样的

package com.example.dzplayer;

public class Mp3Info {
    private String path;
    private String name;
    private String album;
    private String artist;
    private String image;

    public Mp3Info(String path, String name, String album, String artist,
            String image) {
        super();
        this.path = path;
        this.name = name;
        this.album = album;
        this.artist = artist;
        this.image = image;
    }

    public String getPath() {
        return path;
    }
    public void setPath(String path) {
        this.path = path;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getAlbum() {
        return album;
    }
    public void setAlbum(String album) {
        this.album = album;
    }
    public String getArtist() {
        return artist;
    }
    public void setArtist(String artist) {
        this.artist = artist;
    }
    public String getImage() {
        return image;
    }
    public void setImage(String image) {
        this.image = image;
    }

}

这个是simple_music.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"

    android:orientation="horizontal" >
"
    <ImageView 
    android:src="@drawable/ic_launcher"  
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/imageview"  
    />

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="right"
        android:orientation="vertical"
        android:showDividers="middle" >

"
    <TextView
    android:id="@+id/name"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"    
    android:text="我的第一手歌"
    android:textSize="20dp"
    >
    </TextView>
    <TextView
    android:id="@+id/album"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"    
    android:text="作者"
    android:textSize="10dp"
    >
        </TextView>
        <TextView
    android:id="@+id/path"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"    
    android:text="路径"
    android:textSize="10dp"
    >
        </TextView>
        </LinearLayout>
</LinearLayout>

(三)将反思用service…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值