Android:没有应用程序执行此操作,为什么?

时间:2011-02-15 05:23:28

标签: android permissions

我想浏览所有音频文件,但我收到的错误就像没有应用程序可以执行此操作..这是我的浏览活动代码......

- > 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的权限 什么问题?任何想法?

谢谢..

3 个答案:

答案 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);

我通常使用两种方法的组合(如果第一种方法失败,请使用预姜饼版本。)