Android实现音乐播放 Music 详解
来源:互联网 发布:ubuntu chmod 777 编辑:程序博客网 时间:2024/06/05 07:59
简介:
andoird实现读取手机的歌曲播放,详解读。。。。。。。记得在android6.0以上要打开存储权限问题。。。6了
一,读取手机应用music
从数据库中查询所有音乐数据
读取的数据,通过 ContentResolver获取歌曲。
Cursor cursor = contentResolver.query(contentUri, projection, where, null, sortOrder);那么,query() 里面的的参数是什么呢???接下来,我们往下面看
query()这个方法的源码
public final @Nullable Cursor query(@RequiresPermission.Read @NonNull Uri uri, @Nullable String[] projection, @Nullable String selection, @Nullable String[] selectionArgs, @Nullable String sortOrder) { return query(uri, projection, selection, selectionArgs, sortOrder, null); }
第一个 读取外部内存储的内容。
/** * The content:// style URI for the "primary" external storage * volume. */ public static final Uri EXTERNAL_CONTENT_URI = getContentUri("external");通过 Media.EXTERNL_CONTENT_URL 得到。
第二个,返回列表,要查询的表内容。我们就根据自己想要的内容定义,如:
/** * 查询返回内容 */ private String[] projection = { Media._ID, Media.DISPLAY_NAME, Media.DATA, Media.ALBUM, Media.ARTIST, Media.DURATION, Media.SIZE };
第三个呢,就是一些规则了,我也不明白是什么鬼。有大神知道的,可以指点指点
"mime_type in ('audio/mpeg','audio/x-ms-wma') and bucket_display_name <> 'audio' and is_music > 0"
第四个,筛选条件,如,我们查什么到什么之间,然后定义一下,但是在这里我们不需要,所以直接传 null
第五个,类型,为文本类型。
/** * Path to the file on disk. * <p> * Note that apps may not have filesystem permissions to directly access * this path. Instead of trying to open this path directly, apps should * use {@link ContentResolver#openFileDescriptor(Uri, String)} to gain * access. * <p> * Type: TEXT */ public static final String DATA = "_data";到这里我们就讲解完 query() 的参数了。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
二,实例化
通过1的阅读,我们拿到手机内存的歌曲,那么接下来,我们写一个activity来调用。。。
绑定音频播放的实体类, MediaPlayer
直接贴上代码,文章后面有github链接,可以下载
private RecyclerView rc_list; private MyReclerViewAdapter myReclerViewAdapter; private TextView start_tv, stop_tv; private MediaPlayer mePlayer; private final int REQUEST_CODE = 1000; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); rc_list = (RecyclerView) findViewById(R.id.rc_list); LinearLayoutManager layoutManager = new LinearLayoutManager(this); rc_list.setLayoutManager(layoutManager); MusicLoader.instance(getContentResolver()); myReclerViewAdapter = new MyReclerViewAdapter(this, MusicLoader.musicList, this); rc_list.setAdapter(myReclerViewAdapter); //初始化mediaplayer对象,这里播放的是raw文件中的mp3资源 mePlayer = MediaPlayer.create(MainActivity.this, Uri.parse(MusicLoader.musicList.get(0).getUrl())); }然后 通过 mePlayer调用start()方法播放,,,pause()方法暂停播放。
/** * Starts or resumes playback. If playback had previously been paused, * playback will continue from where it was paused. If playback had * been stopped, or never started before, playback will start at the * beginning. * * @throws IllegalStateException if it is called in an invalid state */ public void start() throws IllegalStateException { baseStart(); stayAwake(true); _start(); }
/** * Pauses playback. Call start() to resume. * * @throws IllegalStateException if the internal player engine has not been * initialized. */ public void pause() throws IllegalStateException { stayAwake(false); _pause(); }
================================================================================================================================
三,贴上效果图
是不是很简单呀,对了,接下继续。。。
四,结束。
我们想了解决更多音频播放问题,我们自己得去google学习学习。看看源码提供向外的方法。。。大神指教,小神有礼了。。。
android 音频播放源码 : github.com源码
阅读全文
1 0
- Android实现音乐播放 Music 详解
- android源码解析------Music 音乐播放器
- 播放音乐:pygame.mixer.music
- Android 实现音乐播放
- android music暂停或停止其他音乐播放器的播放
- Android实现音乐后台播放
- Android MediaPlayer实现音乐播放
- Android之实现音乐播放
- android实现音乐播放器
- 源码 Music音乐播放器代码结构
- Android中music播放器源码要点详解【安卓music源码进化一】
- Android中music播放器源码要点详解【安卓music源码进化一】
- Android音乐播放器---实现Notification控制音乐播放
- Android音乐播放器---实现Notification控制音乐播放
- Android音乐播放器---实现Notification控制音乐播放
- Android音乐播放器---实现Notification控制音乐播放
- Android实战 - 音心播放器 (Music Service 实现)
- QMediaplayer详解以及简易音乐播放实现
- Android 数据传递出现的android.os.TransactionTooLargeException问题
- 数据中心管理员监控一切和创造性资源
- 在html中,一些零散的关于标签的知识
- Maven + Spring MVC 导入 jtsl 的方法
- Android 字符串中包含动态获取的数据
- Android实现音乐播放 Music 详解
- keepalived + nginx 配置
- Java module
- 关于java.lang.Exception: 密钥库文件不存在: debug.keystore问题的解决方案
- 实验二之单链表
- logback的使用和logback.xml详解
- scanf()接受到不满足条件时分成多种情况的处理
- Oracle for update/for update of/update的用法和区别
- maven创建项目常见问题