无法将图像发送到其他应用,尝试徒步,使用Messenger和Whatsapp

时间:2016-03-18 09:23:34

标签: java android android-intent sharing

我正在尝试将我的应用中的图像分享到其他应用(Hike,Facebook,Messenger等),但每次我都会遇到不同的错误。几乎所有问答都已消失,但问题尚未解决。

这是我的代码

                       filepath = Environment.getExternalStorageDirectory();
                       cacheDir = new File(filepath.getAbsolutePath()
                       + "/LikeIT/");
                       cacheDir.mkdirs();
                       Intent intent = new Intent();
                       intent.setType("image/jpeg");
                       intent.setAction(Intent.ACTION_SEND);

                       intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(new File(cacheDir
                                       .getAbsolutePath())));
                       intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);

                       activity.startActivity(intent);

我已多次更改以下内容,但未获得解决方案:

    intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(new File(cacheDir
                                       .getAbsolutePath())));       

我已将此更改为

  1.  intent.putExtra(android.content.Intent.EXTRA_STREAM, Uri.parse(str1));
  2.  intent.putExtra(android.content.Intent.EXTRA_STREAM, Uri.fromFile(file1);

但没有按要求获得。此外,当我向Whatsapp发送图像时,它没有显示图像,发送后显示图像。

enter image description here

2 个答案:

答案 0 :(得分:1)

尝试以下可在我的应用中正常使用的代码

public void onShareItem(View v) {
        // Get access to bitmap image from view

        // Get access to the URI for the bitmap
        Uri bmpUri = getLocalBitmapUri(descpic);
        if (bmpUri != null) {
            // Construct a ShareIntent with link to image
            Intent shareIntent = new Intent();
            shareIntent.setAction(Intent.ACTION_SEND);
            shareIntent.putExtra(Intent.EXTRA_STREAM, bmpUri);
            shareIntent.putExtra(Intent.EXTRA_TEXT, desc.getText().toString());
            shareIntent.setType("image/*");
            // Launch sharing dialog for image
            startActivity(Intent.createChooser(shareIntent, "Share Image"));
        } else {
            // ...sharing failed, handle error
            Log.e("check for intent", "Couldn't get anything");
        }
    }

    // Returns the URI path to the Bitmap displayed in specified ImageView
    public Uri getLocalBitmapUri(ImageView imageView) {
        imageView.buildDrawingCache();
        Bitmap bm = imageView.getDrawingCache();

        OutputStream fOut = null;
        Uri outputFileUri=null;
        try {
            File root = new File(Environment.getExternalStorageDirectory()
                    + File.separator + "folder_name" + File.separator);
            root.mkdirs();
            File imageFile = new File(root, "myPicName.jpg");
            outputFileUri = Uri.fromFile(imageFile);
            fOut = new FileOutputStream(imageFile);
        } catch (Exception e) {
            Toast.makeText(this, "Error occured. Please try again later.", Toast.LENGTH_SHORT).show();
            e.printStackTrace();
        }

        try {
            bm.compress(Bitmap.CompressFormat.PNG, 100, fOut);
            fOut.flush();
            fOut.close();
            return outputFileUri;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

答案 1 :(得分:-1)

TL; DR :::您需要为WhatsAPP(或任何其他APP)启用读/写权限才能使用这些图像。创建临时文件---或---让您的APP将文件保存到外部存储。

这正是我和我的应用程序发生的事情。花了我一整天的时间,我终于解决了。

无论如何,这行代码都不起作用(或与修改Uri对象有关的任何内容):intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);

FileOutputStream fos = context.openFileOutput("desiredFilename.png", Context.MODE_PRIVATE);以下内容 然后将Context.MODE_PRIVATE更改为Context.MODE_WORLD_READABLE ...在API-14之后弃用

这部分没有任何问题:

 filepath = Environment.getExternalStorageDirectory();
                       cacheDir = new File(filepath.getAbsolutePath()
                       + "/LikeIT/");
                       cacheDir.mkdirs();
                       Intent intent = new Intent();
                       intent.setType("image/jpeg");
                       intent.setAction(Intent.ACTION_SEND);

                       intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(new File(cacheDir
                                       .getAbsolutePath())));

这部分工作得很好,因为它启动了WhatsApp流程---并等待你添加一个标题。通过添加intent.putExtra(Intent.EXTRA_TEXT, text_string);,它将获取text_string中找到的任何字符串值,并将其添加为图片标题。不幸的是,WhatsAPP接收/理解intent.putExtra()只有一张带有一个标题的图片...我不知道如何制作多张带有多个字幕的图片......

另一个提示:如果错误输出显示为File(s) Directory doesn't exist,则可能是因为行mkdirs()无效。本教程使用两个选定的目录APP_PATH_SD_CARDAPP_THUMBNAIL_PATH_SD_CARD ---并要求mkdirs()同时创建它们......由于某种原因,mkdirs()会这样做不喜欢这样做。 所以我要求mkdirs()一次创建一个:

   File dir = new File( Environment.getExternalStorageDirectory().getAbsolutePath() + APP_PATH_SD_CARD );
   if (!dir.exists()) { dir.mkdirs();}

  File dirHoldingImages = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + APP_PATH_SD_CARD + APP_THUMBNAIL_PATH_SD_CARD);
    if (!dirHoldingImages.exists()) { dirHoldingImages.mkdirs(); }

// carry-on with the rest of the saveFileToExternalStorage code

希望这些链接可以帮助其他人遇到同样的问题。 :)