【问题标题】:Sound picker through startActivityForResult from internal storage通过 startActivityForResult 从内部存储中选择声音
【发布时间】:2020-05-10 16:48:22
【问题描述】:

我发现了类似的问题 herehere。出于某种原因,我发现的所有选项都只适用于 EXTERNAL_CONTENT_URI

我根据它的方法使用,如果我使用EXTERNAL_CONTENT_URI,它对我有用。但是如果我需要从INTERNAL_CONTENT_URI 获取声音,我无法在startActivityForResult 打开的相关应用程序中做出选择。该应用程序像只读一样工作。

有没有办法从INTERNAL_CONTENT_URI 中做出选择? 可能,我需要一些权限?

我的代码适用于 Xamarin:

        const int REQ_PICK_AUDIO = 1;          
        Intent audio_picker_intent = new Intent(
            Intent.ActionPick, 
            Android.Provider.MediaStore.Audio.Media.InternalContentUri); // with ExternalContentUri it works
        XxmsApp.Droid.MainActivity.Instance.StartActivityForResult(audio_picker_intent, REQ_PICK_AUDIO);

【问题讨论】:

  • @LeoZhu-MSFT,是的。你是对的,它有效。谢谢!但我发现它对用户不友好,因为这种行为对于某些用户来说并不明显

标签: java android xamarin xamarin.android


【解决方案1】:

您可以通过INTERNAL_CONTENT_URI获取内部存储中声音的内容uri。

上面的代码应该可以正常工作。您可以在OnActivityResult 方法中获取声音 uri。

在你的MainActivity 重写方法:

protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
    {
        base.OnActivityResult(requestCode, resultCode, data);
        if (requestCode == 1)
        {
            var path = data.Data;  // you could get the sound uri.(e.g: content://media/external/audio/media/113)
        }
    }

PS

我在Android 10.0模拟器上测试,当Intent.ActionPick打开列表时,我选择声音时似乎不起作用,但是当我点击OK时,它实际上返回了声音的Uri .

如下:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-10
    • 2017-02-21
    相关资源
    最近更新 更多