【问题标题】:Pick a file from an SD card using Intent使用 Intent 从 SD 卡中选择文件
【发布时间】:2014-04-02 09:25:53
【问题描述】:

Android 是否可以使用 Intent 从 SD 卡中浏览和选择任何文件?

类似:

String uri = (Environment.getExternalStorageDirectory()).getAbsolutePath();
Intent i = new Intent(Intent.ACTION_PICK, Uri.parse(uri));

我正在尝试使用蓝牙将文件发送到其他设备。如果我在我的代码中给出文件名的完整路径,我可以发送。我希望我的用户选择应该发送的文件。

【问题讨论】:

    标签: android android-intent bluetooth android-bluetooth android-implicit-intent


    【解决方案1】:

    您可以使用以下代码:

    Intent mediaIntent = new Intent(Intent.ACTION_GET_CONTENT);
    mediaIntent.setType("video/*"); // Set MIME type as per requirement
    startActivityForResult(mediaIntent,REQUESTCODE_PICK_VIDEO);
    

    然后就可以在onActivityResult中获取路径了:

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        // TODO Auto-generated method stub
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == REQUESTCODE_PICK_VIDEO
                && resultCode == Activity.RESULT_OK) {
            Uri videoUri = data.getData();
            Log.d("", "Video URI= " + videoUri);
        }
    }
    

    【讨论】:

    • 如果我设置了mediaIntent.setType("video/*"),它就是打开galary来浏览图片和视频。我想做一个常见的搜索,我应该选择任何文件。它可以是音乐文件,apk 文件,可以是任何东西。有可能吗?
    • 然后使用 setType("/")
    • 但它说 android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.GET_CONTENT typ=/ }
    • 使用setType("*/*"); 以便能够选择任何文件类型
    【解决方案2】:

    一般浏览使用这个(例如音乐文件):

    Intent intent = new Intent();
    intent.setType("*/*");
    if (Build.VERSION.SDK_INT < 19) {
        intent.setAction(Intent.ACTION_GET_CONTENT);
        intent = Intent.createChooser(intent, "Select file");
    } else {
        intent.setAction(Intent.ACTION_OPEN_DOCUMENT);
        intent.addCategory(Intent.CATEGORY_OPENABLE);
        String[] mimetypes = { "audio/*", "video/*" };
        intent.putExtra(Intent.EXTRA_MIME_TYPES, mimetypes);
    }
    startActivityForResult(intent, Constants.REQUEST_BROWSE);
    

    并在此处接收浏览的数据:

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == Constants.REQUEST_BROWSE
                && resultCode == Activity.RESULT_OK && data != null) {
            Uri uri = data.getData();
            if (uri != null) {
                // TODO: handle your case
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-18
      • 1970-01-01
      • 2012-03-08
      • 1970-01-01
      • 2013-06-02
      相关资源
      最近更新 更多