Whatsapp 分享 Android 11 Scoped Storage

问题描述

我使用此代码在 Android 10 之前没有问题。但现在在 Android 11 下它不再起作用。我认为 Whatsapp 无法读取从原始资源创建的 app 目录中的 mp3。

我的技能不是很好,我了解 SAF 或 MediaStore。我认为这就是问题所在,一般来说,WhatsApp 没有权限访问我的应用程序目录。所以我只是不想将它下载到下载/或类似的共享存储路径。但是如何?

目标 SDK 为 30

我的代码

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"
    tools:ignore="QueryAllPackagesPermission"/>

<queries>
    <package android:name="com.whatsapp"/>
    <package android:name="com.whatsapp.w4b"/>
</queries>
private void shareButton(int shareplayint) {
            try {
                String mediaPath = copyFiletoExternalStorage(shareplayint);
                Intent shareMedia = new Intent();
                shareMedia.setAction(Intent.ACTION_SEND);
                // Content of mediaPath = /storage/emulated/0/ANdroid/data/stutz.com.swissbuttons/files/swissbuttons.mp3
                Toast.makeText(getApplicationContext(),mediaPath,Toast.LENGTH_LONG).show();
                shareMedia.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
                shareMedia.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
                shareMedia.putExtra(Intent.EXTRA_STREAM,Uri.parse(mediaPath));
                shareMedia.setType("audio/*");
                startActivity(Intent.createChooser(shareMedia,"senden"));
            } catch (Exception e) {
                Toast.makeText(getApplicationContext(),"Whatsapp isch nit installiert!",Toast.LENGTH_LONG).show();
            }
        }


    private String copyFiletoExternalStorage(int resourceId) {

        String pathSDCard = getExternalFilesDir(null) + "/swissbuttons.mp3";

        try {
            InputStream in = getResources().openRawResource(resourceId);
            FileOutputStream out = null;
            out = new FileOutputStream(pathSDCard);
            byte[] buff = new byte[1024];
            int read = 0;
            try {
                while ((read = in.read(buff)) > 0) {
                    out.write(buff,read);
                }
            } finally {
                in.close();
                out.close();
            }
        } catch (FileNotFoundException e) {
            e.printstacktrace();
        } catch (IOException e) {
            e.printstacktrace();
        }
        return pathSDCard;
    }

感谢您的帮助!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)