在Android中分享来自图库的图片

时间:2014-12-05 11:26:15

标签: android image android-intent android-camera-intent

我写了一个程序,它有两个按钮,一个用于图库,点击时显示我的图库中的图像,另一个按钮启动我的相机,显示捕获的图像。

图片显示正常,但我无法理解如何将显示的图片分享给其他应用,请提供帮助。

下面是我的共享代码:我已经放了问号,因为我需要知道我应该在我的Uri中传递什么,以便我可以获得我的图像的路径

imgShare.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub

            Intent intent = new Intent(Intent.ACTION_SEND);
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
            intent.setType("image/*");
            Uri selectedImage = ????
            intent.putExtra(Intent.EXTRA_STREAM, selectedImage);
            startActivityForResult(
                    Intent.createChooser(intent, "Select Picture"),
                    SELECT_PICTURE);


        }

我的startActivityForResult代码

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // TODO Auto-generated method stub

    if (requestCode == SELECT_PICTURE && resultCode == RESULT_OK
            && null != data) {

        // Toast.makeText(getBaseContext(),
        // "File saved at " + imageFile.getAbsolutePath(),
        // Toast.LENGTH_SHORT).show();
        Uri selectedImage = data.getData();
        String[] filePathColumn = { MediaStore.Images.Media.DATA };

        Cursor cursor = getContentResolver().query(selectedImage,
                filePathColumn, null, null, null);
        cursor.moveToFirst();

        int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
        String picturePath = cursor.getString(columnIndex);
        cursor.close();

        BitmapFactory.Options options = new BitmapFactory.Options();
        options.inPreferredConfig = Bitmap.Config.ARGB_8888;
        /*
         * Bitmap bitmap = BitmapFactory .decodeFile( Environment
         * .getExternalStoragePublicDirectory
         * (Environment.DIRECTORY_PICTURES) + File.separator + ".jpg",
         * options);
         */
        Bitmap bitmap = BitmapFactory.decodeFile(picturePath);
        int newWidth = bitmap.getWidth();
        int newHeight = bitmap.getHeight();

        while (newWidth > 1200) {
            newWidth = newWidth / 2;
            newHeight = newHeight / 2;
        }
        img.setImageBitmap(Bitmap.createScaledBitmap(bitmap, newWidth,
                newHeight, false));

    }

欢迎任何建议,感谢您

1 个答案:

答案 0 :(得分:2)

这些被称为意图,一些应用程序正在侦听图像和纯文本等内容。当你调用这些意图时,会打开一个对话框,正在监听你的内容。

分享单张图片

Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND);
shareIntent.putExtra(Intent.EXTRA_STREAM, uriToImage);
shareIntent.setType("image/jpeg");
startActivity(Intent.createChooser(shareIntent, getResources().getText(R.string.send_to)));

分享多张图片

ArrayList<Uri> imageUris = new ArrayList<Uri>();
imageUris.add(imageUri1); // Add your image URIs here
imageUris.add(imageUri2);

Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND_MULTIPLE);
shareIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, imageUris);
shareIntent.setType("image/*");
startActivity(Intent.createChooser(shareIntent, "Share images to.."));

获取ImageURI

public Uri getImageUri(Context inContext, Bitmap inImage) {
  ByteArrayOutputStream bytes = new ByteArrayOutputStream();
  inImage.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
  String path = Images.Media.insertImage(inContext.getContentResolver(), inImage, "Title", null);
  return Uri.parse(path);
}

Uri.parse(new File("/sdcard/yourImage.jpg").toString())

你可以在Android official website

上找到更多信息