我想浏览所有音频文件,但我收到的错误就像没有应用程序可以执行此操作..这是我的浏览活动代码......
- > private static final int SELECT_MUSIC = 1;
String selectedImagePath;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
((Button) findViewById(R.id.browse)).setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
// in onCreate or any event where your want the user to
// select a file
Intent intent = new Intent();
intent.setType("music/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent,"Select File"), SELECT_MUSIC);
}
});
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_OK) {
if (requestCode == SELECT_MUSIC) {
Uri selectedImageUri = data.getData();
selectedImagePath = getPath(selectedImageUri);
}
}
}
public String getPath(Uri uri) {
String[] projection = {MediaStore.Images.Media.DATA};
Cursor cursor = managedQuery(uri, projection, null, null, null);
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
}
我还添加了menifest file :: READ_PHONE_STATE的权限 什么问题?任何想法?
谢谢..
答案 0 :(得分:0)
这意味着 No Application执行该操作。为什么?因为没有已安装的应用程序执行该操作。它与权限无关。
您可能正在模拟器上运行它,该模拟器不包含任何目录浏览器应用程序。
答案 1 :(得分:0)
您可以使用:
intent.setType("audio/*");
代替intent.setType("music/*");
然后您可以选择曲目,而不是播放列表。
你能找到一种选择播放列表的方法吗? 我有同样的问题,寻找打开和选择播放列表的方法。
答案 2 :(得分:0)
setType
方法仅适用于MIME类型值。
如果你真的只需要处理音乐文件“audio /”应该没问题(如前所述)。为了更灵活,您应该尝试检测文件的MIME代码。
这是一个代码snippit,它的外观如下:
FileNameMap fileNameMap = URLConnection.getFileNameMap();
type = fileNameMap.getContentTypeFor("file://" + file.getPath());
或(姜饼之前)
if (!file.getName().contains("."))
return null;
String ext = (String) file.getName().subSequence(
file.getName().lastIndexOf(".") + 1,
file.getName().length());
MimeTypeMap mimeMap = MimeTypeMap.getSingleton();
type = mimeMap.getMimeTypeFromExtension(ext);
我通常使用两种方法的组合(如果第一种方法失败,请使用预姜饼版本。)