0

我正在尝试将图像共享给其他应用程序。从文档中,我知道我必须创建一个ContentProvider以确保从应用程序外部访问我的资源。它适用于除 Facebook Messenger 和 Messages (com.android.mms) 之外的大多数应用程序。我有以下错误: FB Messenger:“抱歉,Messenger 无法处理文件” com.android.mms:“无法附加。不支持文件”

我在活动中调用的代码分享:

Uri path = Uri.parse("content://com.myauthority/test.png");
Intent shareIntent = new Intent(Intent.ACTION_SEND).putExtra(Intent.EXTRA_STREAM, path).setType("image/png");
startActivity(Intent.createChooser(shareIntent, getResources().getText(R.string.share)));

在我的内容提供者中,我只覆盖 openFile:

@Override
public ParcelFileDescriptor openFile(Uri uri, String mode) throws FileNotFoundException {
    String fileName = uri.getLastPathSegment();
    String resName = fileName.replaceAll(".png","");
    int resId = getContext().getResources().getIdentifier(resName,"drawable",getContext().getPackageName());
    File file = new File(getContext().getCacheDir(), fileName);
    Bitmap bitmap = BitmapFactory.decodeResource(getContext().getResources(), resId);
    FileOutputStream fileoutputstream = new FileOutputStream(file);
    boolean flag = bitmap.compress(Bitmap.CompressFormat.PNG, 100, fileoutputstream);
    try {
        ParcelFileDescriptor parcelfiledescriptor = ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_ONLY | ParcelFileDescriptor.MODE_WORLD_READABLE);
        return parcelfiledescriptor;
    } catch (IOException e) {
        e.printStackTrace();
        return null;
}

有没有人分享这个问题的想法或经验?

4

1 回答 1

2

这里包括我用来将数据从我的应用程序共享到 facebook 应用程序或 Messenger 应用程序的代码。

imageView.setDrawingCacheEnabled(true);
                Bitmap bitmap = imageView.getDrawingCache();
                File root = Environment.getExternalStorageDirectory();
                final File cachePath = new File(root.getAbsolutePath()
                        + "/DCIM/Camera/Avi.jpg");
                try {
                    cachePath.createNewFile();
                    FileOutputStream ostream = new FileOutputStream(
                            cachePath);
                    bitmap.compress(CompressFormat.JPEG, 100, ostream);
                    ostream.flush();
                    ostream.close();
                    new Handler().postDelayed(new Runnable() {
                        @Override
                        public void run() {
                            Intent intent = new Intent();
                            intent.setType("image/*");
                            intent.setAction(Intent.ACTION_SEND);
                            intent.putExtra(
                                    Intent.EXTRA_STREAM,
                                    Uri.fromFile(new File(cachePath
                                            .getAbsolutePath())));
                            Log.e("Path for sending ",
                                    ""+Uri.fromFile(new File(cachePath
                                            .getAbsolutePath())));
                            mContext.startActivity(intent);
                        }
                    }, 3000);

只需提供您的图像 uri 并使用此代码。

于 2015-04-21T20:34:17.443 回答