如何在缓存中保存和共享位图?

时间:2019-04-07 17:30:18

标签: java android caching bitmap uri

我有一种方法可以与第三方社交媒体应用共享应用中的位图。我正在尝试将位图保存到缓存文件夹并从那里共享它。这是我的方法:

temp.insert_after("D", temp.find("C"))

该方法通过其参数从另一个方法获取位图。我想知道如何将public void shareMeme(Bitmap bitmap) { String path = Objects.requireNonNull(getContext()).getCacheDir().getAbsolutePath(); Uri uri = Uri.parse(path); Intent share = new Intent(Intent.ACTION_SEND); share.setType("image/*"); share.putExtra(Intent.EXTRA_STREAM, uri); share.putExtra(Intent.EXTRA_TEXT, "This is my Meme"); getContext().startActivity(Intent.createChooser(share, "Share Your Meme!")); Toast.makeText(getContext(), "The Cache drive is: " + path, Toast.LENGTH_LONG).show(); } 参数与上面的代码合并。

更新

AndroidManifest.xml:

shareMeme(Bitmap bitmap)

新的<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="com.example.omar.memegenerator"> ... <application ... <provider android:name="android.support.v4.content.FileProvider" android:authorities="com.example.omar.memegenerator.fileprovider" android:grantUriPermissions="true" android:exported="false"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/filepaths" /> </provider> ... </application> </manifest> 方法:

shareMeme(Bitmap bitmap)

堆栈跟踪:

    public void shareMeme(Bitmap bitmap) {
    String path = Objects.requireNonNull(getContext()).getCacheDir().getAbsolutePath();
    File file = new File(path + "/Memes/" + timeStamp + counter + ".jpg");
    Uri uri = FileProvider.getUriForFile(getContext(), "com.example.omar.memegenerator.fileprovider", file);
    try {
        OutputStream stream = new FileOutputStream(file);
        bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);
        stream.flush();
        stream.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

    Intent share = new Intent(Intent.ACTION_SEND);
    share.setType("image/*");
    share.putExtra(Intent.EXTRA_STREAM, uri);
    share.putExtra(Intent.EXTRA_TEXT, "This is my Meme");
    share.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
    getContext().startActivity(Intent.createChooser(share, "Share Your Meme!"));

    Toast.makeText(getContext(), "The Cache drive is: " + path, Toast.LENGTH_LONG).show();
}

1 个答案:

答案 0 :(得分:1)

步骤1:在compress()上使用Bitmap将其保存到getCacheDir()中的文件中

步骤2:将FileProvider添加到您的项目中,该项目配置为提供getCacheDir()中的文件

第3步:使用FileProvider.getUriForFile()(而不是您现有的代码)来获取Uri放入EXTRA_STREAM

第4步:在致电Intent.FLAG_GRANT_READ_URI_PERMISSION之前将Intent添加到startActivity()中,以便收件人有权访问您的内容