CWACStream¨Provider:共享后文件错误-太大且不可用

时间:2019-01-17 17:44:49

标签: android commonsware-cwac

我正在通过CWAC-Provider共享mp3文件到另一个应用程序 https://github.com/commonsguy/cwac-provider 该文件正在longClick上共享。长按后,我从数组和调用方法获取文件路径以创建共享意图。在此Intent中,我调用getUri函数来查找我的文件。一切正常,应用程序显示框选择目标应用程序。但是,当我选择Gmail时出现错误:文件最大大小为20MB,Discord仅显示消息,不显示文件,而Telegram不支持附件。我不知道问题出在哪里。这个提供者不是我的茶,而是我的红色文档。

函数getUri

      private Uri getURI(){
    return(PROVIDER
            .buildUpon()
            .appendPath(StreamProvider.getUriPrefix(AUTHORITY))
            .appendEncodedPath(ASSET_PATHS)
            .build());
}

此函数返回:

    content://cz.revelio.tomiookamura/ea12dd4a-c098-4ce5-b191- 
   abab9d00b52f/assets/nase_hnuti_spd.mp3

我所有的mp3都存储在素材资源文件夹中。

provider_paths.xml

    <?xml version="1.0" encoding="utf-8"?>
    <paths xmlns:android="http://schemas.android.com/apk/res/android">
    <asset name="asset" path=""/>
    </paths>

设置onLongClick()

     button.setOnLongClickListener(new View.OnLongClickListener() {
                    @Override
                    public boolean onLongClick(View v) {
                        Bundle params = new Bundle();
                        params.putInt("ButtonId", v.getId());
                        String btnName = "share_"+soubor;
                        mFirebaseAnalytics.logEvent(btnName, params);
                        ASSET_PATHS =  "assets/"+soubor+".mp3";
                        Log.e("ERROR","Path:"+getURI());


                        return false;
                    }
                });

onShareFile功能

    private void onShareFile() {


   Intent shareIntent = new Intent();
   shareIntent.setAction(Intent.ACTION_SEND);
   shareIntent.putExtra(Intent.EXTRA_TEXT, "Poslechni si hlášku Tomia Okamury z aplikace Hlášky Tomia Okamury!");
   shareIntent.putExtra(Intent.EXTRA_STREAM, getURI());
   shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
   shareIntent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION );
   shareIntent.setType("audio/*");
   startActivity(Intent.createChooser(shareIntent, "Sdílet hlášku"));
  }

清单中的提供者

    <provider
        android:name="com.commonsware.cwac.provider.StreamProvider"
        android:authorities="cz.revelio.tomiookamura"
        android:exported="false"
        android:grantUriPermissions="true">
        <meta-data
            android:name="com.commonsware.cwac.provider.STREAM_PROVIDER_PATHS"
            android:resource="@xml/provider_paths"/>
    </provider>

定义类变量

private static final String AUTHORITY = "cz.revelio.tomiookamura";
private static final Uri PROVIDER = Uri.parse("content://"+AUTHORITY);
private static String ASSET_PATHS;

1 个答案:

答案 0 :(得分:0)

ASSET_PATHS =  "assets/"+soubor+".mp3";

在这里,您拥有assets/的路径。

<asset name="asset" path=""/>

在这里,您将name作为asset

这些不匹配,需要匹配。

除此之外,您应该考虑自己编写一个仪器化测试,尝试从您自己的提供程序中读取此内容,并确保获得逐字节匹配。