Android实现选择本地音乐

Android实现选择本地音乐

    • 一、目标
    • 二、实现代码
    • 三、遇到的问题
    • 四、过程回顾
    • 五、优化方案
    • 六、接下来
    • 七、Finally

一、目标

神马笔记实现在笔记中添加音乐。
Android实现选择本地音乐_第1张图片

二、实现代码

final String type = "audio/*";
final String[] mimeTypes = null;

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

return result;
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

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

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

你可能感兴趣的:(神马笔记)