首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >关键的android.intent.extra.STREAM期望Parcelable,但是值是java.io.File。返回默认值<null>。

关键的android.intent.extra.STREAM期望Parcelable,但是值是java.io.File。返回默认值<null>。
EN

Stack Overflow用户
提问于 2017-12-25 18:57:16
回答 1查看 3.5K关注 0票数 2

我试图通过以下操作共享缓存文件夹中的.mp3文件:

代码语言:javascript
运行
复制
InputStream inputStream = getContentResolver().openInputStream(UriUtils.getResourceUri(audioToShare.getAudioPath(),this));
                File fileToShare = FileUtils.writeStreamToFile(this,audioToShare.getLabel(),inputStream);
                Intent intent = new Intent(Intent.ACTION_SEND).setType("audio/mpeg");
                intent.putExtra(Intent.EXTRA_STREAM,Uri.fromFile(fileToShare));
                startActivity(Intent.createChooser(intent, "Share to"));

但是当我选择一个联系人时,比方说在whatsapp上,应用程序就会发出低沉的警告。

代码语言:javascript
运行
复制
W/Bundle: Key android.intent.extra.STREAM expected Parcelable but value was a java.io.File.  The default value <null> was returned.
12-25 16:10:32.802 17021-17021/com.example.soundboard W/Bundle: Attempt to cast generated internal exception:
                                                                       java.lang.ClassCastException: java.io.File cannot be cast to android.os.Parcelable
                                                                           at android.os.Bundle.getParcelable(Bundle.java:894)
                                                                           at android.content.Intent.getParcelableExtra(Intent.java:7075)
                                                                           at android.content.Intent.migrateExtraStreamToClipData(Intent.java:9887)
                                                                           at android.content.Intent.migrateExtraStreamToClipData(Intent.java:9867)
                                                                           at android.app.Instrumentation.execStartActivity(Instrumentation.java:1608)
                                                                           at android.app.Activity.startActivityForResult(Activity.java:4472)
                                                                           at android.support.v4.app.BaseFragmentActivityApi16.startActivityForResult(BaseFragmentActivityApi16.java:54)
                                                                           at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:67)
                                                                           at android.app.Activity.startActivityForResult(Activity.java:4430)
                                                                           at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:720)
                                                                           at android.app.Activity.startActivity(Activity.java:4791)
                                                                           at android.app.Activity.startActivity(Activity.java:4759)
                                                                           at com.quartzodev.cirosoundboard.sound.SoundActivity.onActionItemClicked(SoundActivity.java:170)

方法writeStreamToFile,以便您可以看到我是如何创建缓存文件的。

代码语言:javascript
运行
复制
public static File writeStreamToFile(Context context, String fileName, InputStream input){

        try {
            File file = new File(context.getFilesDir(), fileName);
            OutputStream output = new FileOutputStream(file);
            try {
                byte[] buffer = new byte[4 * 1024]; // or other buffer size
                int read;

                while ((read = input.read(buffer)) != -1) {
                    output.write(buffer, 0, read);
                }

                output.flush();

                return file;
            } finally {
                output.close();

            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                input.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

我做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-26 17:36:38

原来我没有权限共享getFilesDir()中文件夹中的文件

刚转到getExternalCacheDir(),现在我可以通过Whatsapp和Gmail分享

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47971255

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档