Android实现选择本地音乐

Android实现选择本地音乐

一、目标

神马笔记实现在笔记中添加音乐。

二、实现代码

1
2
3
4
5
6
7
8
final String type = "audio/*";
final String[] mimeTypes = null;

boolean result = PackageUtils.pick(this.getActivity(), this,
type, mimeTypes,
documentOnly, c);

return result;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
public static final boolean pick(Activity context, Fragment fragment,
String type, String[] mimeTypes,
boolean documentOnly, int requestCode) {

boolean result = false;

if (context == null && fragment == null) {
return false;
}

ArrayList<String> list = new ArrayList<>();
list.add(Intent.ACTION_OPEN_DOCUMENT);
list.add(Intent.ACTION_GET_CONTENT);

if (!documentOnly) {
list.add(0, Intent.ACTION_PICK);
}

for (String action : list) {
if (action.equalsIgnoreCase(Intent.ACTION_PICK)) {
if (mimeTypes != null && mimeTypes.length > 1) {
continue;
}
}

Intent intent = new Intent();

intent.setAction(action);
intent.setType(type);

intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
intent.putExtra(Intent.EXTRA_LOCAL_ONLY, false);

if (mimeTypes != null && mimeTypes.length > 0) {
intent.putExtra(Intent.EXTRA_MIME_TYPES, mimeTypes);
}

if (action.equalsIgnoreCase(Intent.ACTION_OPEN_DOCUMENT)
|| action.equalsIgnoreCase(Intent.ACTION_GET_CONTENT)) {
intent.addCategory(Intent.CATEGORY_OPENABLE);
}

try {

if (fragment != null) {
fragment.startActivityForResult(intent, requestCode);
} else {
context.startActivityForResult(intent, requestCode);
}

result = true;

break;

} catch (Exception e) {
e.printStackTrace();
}
}

return result;
}

三、遇到的问题

调用第三方应用选择本地的音乐文件实现非常简单,但是也遇到不少问题。

问题 说明
体验不一致 依赖于手机的第三方应用,无法实现一致的用户体验
Action支持不一致 坚果手机2和荣耀畅玩7不支持ACTION_PICK,只能以ACTION_OPEN_DOCUMENT方式调用第三方应用。
红米6Pro则同时支持ACTION_PICKACTION_OPEN_DOCUMENT
ACTION_OPEN_DOCUMENT体验效果差 使用国内主流的音乐APP下载音乐,ACTION_OPEN_DOCUMENT并不能及时发现新下载的音乐,或者说音乐APP并没有通知系统刷新。
这样一来,用户必须导航到APP的音乐文件夹进行选择。
对于普通用户来讲,这将是一件极其困难的事情。

四、过程回顾

实现简单,体验欠佳,未来优化。

五、优化方案

在手机上下载音乐,或者通过音乐APP,或者浏览器、或者上传到音乐文件夹。

终归是几个有限的文件夹,将来考虑直接显示这些文件夹的内容以供用户选择。

并且保留ACTION_OPEN_DOCUMENT提供给手机发烧友使用。

六、接下来

实现第三方播放音乐。

七、Finally

须菩提。于意云何。 可以身相见如来不。 不也。世尊。 不可以身相得见如来。

何以故。 如来所说身相。即非身相。