Android實作選擇本地音樂
-
- 一、目标
- 二、實作代碼
- 三、遇到的問題
- 四、過程回顧
- 五、優化方案
- 六、接下來
- 七、Finally
一、目标
神馬筆記實作在筆記中添加音樂。
二、實作代碼
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不支援 ,隻能以 方式調用第三方應用。 紅米6Pro則同時支援 和 。 |
ACTION_OPEN_DOCUMENT體驗效果差 | 使用國内主流的音樂APP下載下傳音樂,ACTION_OPEN_DOCUMENT并不能及時發現新下載下傳的音樂,或者說音樂APP并沒有通知系統重新整理。 這樣一來,使用者必須導航到APP的音樂檔案夾進行選擇。 對于普通使用者來講,這将是一件極其困難的事情。 |
四、過程回顧
實作簡單,體驗欠佳,未來優化。
五、優化方案
在手機上下載下傳音樂,或者通過音樂APP,或者浏覽器、或者上傳到音樂檔案夾。
終歸是幾個有限的檔案夾,将來考慮直接顯示這些檔案夾的内容以供使用者選擇。
并且保留
ACTION_OPEN_DOCUMENT
提供給手機發燒友使用。
六、接下來
實作第三方播放音樂。
七、Finally
須菩提。于意雲何。
可以身相見如來不。
不也。世尊。
不可以身相得見如來。
何以故。
如來所說身相。即非身相。