使用“操作发送”从应用程序发送图片

时间:2014-03-16 18:18:50

标签: java android image share shareactionprovider

我想制作一个带有图片的应用程序,并且可以通过whatsapp,gmail,mms分享其中一个或一些这些照片... 我能够编码的方式有一半。

我现在的问题是我在应用程序中有一个用于测试的图像(用ImageView制作)pic被复制到drawable-hdpi中。 如果我有更多的照片,最好的方法是什么? (ImageView,Gallery,..?) 我想将照片存储在应用程序内...

我的SharedActionProvider工作我用文本测试了它。 我现在修改了代码:

ShareActionProvider mShare = (ShareActionProvider) shareItem.getActionProvider();

    Intent picMessageIntent = new Intent(android.content.Intent.ACTION_SEND);
    picMessageIntent.setType("image/*");
    picMessageIntent.setAction(Intent.ACTION_SEND);
    picMessageIntent.putExtra(Intent.EXTRA_STREAM,Uri.fromFile(imageView1));
    mShare.setShareIntent(picMessageIntent);

我想知道的是:

如何让用户决定要发送哪张照片? 用户在应用中标记它然后分享到whatsapp例如? 我真的需要Uri吗?

如果你能给我一些帮助,我会很高兴。

1 个答案:

答案 0 :(得分:0)

解决方案对我来说是全屏活动:

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.full_image);

        // get intent data
        Intent i = getIntent();

        // Selected image id
        int position = i.getExtras().getInt("id");
        ImageAdapter imageAdapter = new ImageAdapter(this);

        ImageView imageView = (ImageView) findViewById(R.id.full_image_view);
        imageView.setImageResource(imageAdapter.mThumbIds[position]);
        BitmapDrawable bm = (BitmapDrawable) imageView.getDrawable();
        Bitmap mysharebmp = bm.getBitmap();


        try {
            ByteArrayOutputStream bytes = new ByteArrayOutputStream();
            mysharebmp.compress(Bitmap.CompressFormat.JPEG, 100, bytes);

            //you can create a new file name "test.jpeg"
            File f = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)
                                    + File.separator + "tmp.jpeg");

            f.createNewFile();
            //write the bytes in file
            FileOutputStream fo = new FileOutputStream(f);
            fo.write(bytes.toByteArray());

            // remember close de FileOutput
            fo.close();
          Log.d("done","done");
        } catch (FileNotFoundException e) {
          e.printStackTrace();
        } catch (IOException e) {
          e.printStackTrace();
        }

        Intent sharingIntent = new Intent(Intent.ACTION_SEND);  
        sharingIntent.setType("image/*");
        sharingIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file:///mnt/sdcard/Pictures/tmp.jpeg"));
        startActivity(Intent.createChooser(sharingIntent,
                            "Share image using"));

    }


}