【详细】安卓studio2.3开发音乐播放器

功能实现:播放/暂停/进度显示、拖动/已加入歌曲列表显示/扫描手机存储MP3文件

主要代码部分:Mainactivity+DBHelper

代码使用注意事项:

1.路径要换成自己的手机路径,我这里用的自己手机路径是/storage/emulated/0/DCIM/Camera/Hey Girl.mp3

2.我是在真机环境下运行的,虚拟机会因为没有对上路径点击播放奔溃

3.真机环境下由于安卓的版本问题要手动在设置里面允许存储权限,不然会导致崩溃

这个路径用于一进去列表没有歌曲情况下,点击播放可以播放这一首歌曲,你也可以把这个注释掉,就不需要考虑路径运行了。(这个一开始我是用于调试的后面就没去改了)

运行效果:

 

 Mainactivity

import android.app.AlertDialog;
import android.app.Dialog;
import android.app.ListActivity;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnCancelListener;
import android.database.Cursor;
import android.database.sqlite.SQLiteCursor;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.PowerManager;
import android.text.SpannableStringBuilder;
import android.text.Spanned;
import android.text.style.RelativeSizeSpan;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;
import android.widget.Toast;

import java.io.File;
import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.Vector;
public class MainActivity extends ListActivity {
    private static final String LOG_TAG = "MainActivity";
    String db_name = "audios_db110";
    private Context context;
    MediaPlayer mp;
    DBHelper helper;
    SeekBar progress;
    TextView status;
    private List<FileInfo> mFileList;
    private ProgressDialog mProgressDialogForScanSDCard;
    Handler mhandler = new Handler();
    private SDCardScanThread mSDCardScanThread;
    private Thread mUpdateProgressThread = new UpdateProgressThread();

    private class DialogDisplayer implements Runnable {
        private final int mResId;

        public DialogDisplayer(int resId) {
            mResId = resId;
        }

        @Override
        public void run() {
            showDialog(mResId);
        }
    }

    private class CancelListener //取消监听
            implements DialogInterface.OnClickListener, DialogInterface.OnCancelListener {
        public void onClick(DialogInterface dialog, int which) {
            //finish();
        }

        public void onCancel(DialogInterface dialog) {
            //finish();
        }
    }

    private CancelListener mCancelListener = new CancelListener();

    private class FileSelectedListener implements
            DialogInterface.OnClickListener, DialogInterface.OnMultiChoiceClickListener {
        public FileSelectedListener() {
        }

        public void onClick(DialogInterface dialog, int which) {
            if (which == DialogInterface.BUTTON_POSITIVE) {
                Toast.makeText(context, "无任何操作!", Toast.LENGTH_SHORT).show();
            } else if (which == DialogInterface.BUTTON_NEGATIVE) {
                Toast.makeText(context, "你已取消", Toast.LENGTH_SHORT).show();
            } else {
                if (!helper.isContainsURI(mFileList.get(which).getCanonicalpath())) {
                    //Toast.makeText(context,mFileList.get(which).getCanonicalpath(), Toast.LENGTH_SHORT).show();
                    helper.insert(mFileList.get(which).getNameWithoutsuffix(),mFileList.get(which).getCanonicalpath());
                    status.setText("成功添加文件:" + mFileList.get(which).getNameWithoutsuffix());
                    refresh();
                } else {
                    status.setText("该文件已存在于列表中");
                }
            }
        }

        @Override
        public void onClick(DialogInterface dialog, int which, boolean isChecked) {
            onClick(dialog, which);
        }
    }
    private Dialog getFileSelectDialog() {
        int size = mFileList.size();
        FileSelectedListener listener = new FileSelectedListener();
        AlertDialog.Builder builder =
                new AlertDialog.Builder(this)
                        .setTitle(R.string.select_file_title)
                        .setPositiveButton(android.R.string.ok, listener)
                        .setOnCancelListener(mCancelListener)
                        .setNegativeButton(android.R.string.cancel, mCancelListener);
        CharSequence[] items = new CharSequence[size];
        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        for (int i = 0; i < size; i++) {
            FileInfo audioFile = mFileList.get(i);

            SpannableStringBuilder stringBuilder = new SpannableStringBuilder();
            stringBuilder.append(audioFile.getName());
            stringBuilder.append('\n');
            int indexToBeSpanned = stringBuilder.length();
            stringBuilder.append(
                    "(" + dateFormat.format(new Date(audioFile.getLastModified())) + ")");
            stringBuilder.setSpan(
                    new RelativeSizeSpan(0.7f), indexToBeSpanned, stringBuilder.length(),
                    Spanned.SPAN_EXCLUSIVE_
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值