Как использовать совместное использование совместного использования изображений для совместного использования изображений в Android?

У меня есть приложение для галерей изображений в этом приложении. Я разместил все изображения в папке drawable-hdpi. И я назвал изображения в своей деятельности следующим образом:

private Integer[] imageIDs = { R.drawable.wall1, R.drawable.wall2, R.drawable.wall3, R.drawable.wall4, R.drawable.wall5, R.drawable.wall6, R.drawable.wall7, R.drawable.wall8, R.drawable.wall9, R.drawable.wall10 }; 

Так что теперь я хочу знать, как я могу поделиться этими изображениями, используя совместное использование Intent i putted кода обмена следующим образом:

  Button shareButton = (Button) findViewById(R.id.share_button); shareButton.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { Intent sharingIntent = new Intent(Intent.ACTION_SEND); Uri screenshotUri = Uri.parse(Images.Media.EXTERNAL_CONTENT_URI + "/" + imageIDs); sharingIntent.setType("image/jpeg"); sharingIntent.putExtra(Intent.EXTRA_STREAM, screenshotUri); startActivity(Intent.createChooser(sharingIntent, "Share image using")); } }); 

И у меня есть кнопка совместного доступа, когда я нажимаю кнопку «Поделиться». Открывается окно «Совместное использование». Но когда я кликнул какую-либо услугу, в основном ее сбой, или некоторые службы говорят: невозможно открыть изображение. Так как я могу это исправить или есть какой-либо формат кода для обмена изображениями ????

Редактировать :

Я попытался использовать приведенный ниже код. Но это не работает.

 Button shareButton = (Button) findViewById(R.id.share_button); shareButton.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { Intent sharingIntent = new Intent(Intent.ACTION_SEND); Uri screenshotUri = Uri.parse("android.resource://com.android.test/*"); try { InputStream stream = getContentResolver().openInputStream(screenshotUri); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } sharingIntent.setType("image/jpeg"); sharingIntent.putExtra(Intent.EXTRA_STREAM, screenshotUri); startActivity(Intent.createChooser(sharingIntent, "Share image using")); } }); 

Если вы не возражаете, чтобы кто-то изменил мой вышеприведенный код или дайте мне правильный пример plz. Как я могу поделиться своими изображениями с папкой drawable-hdpi

Solutions Collecting From Web of "Как использовать совместное использование совместного использования изображений для совместного использования изображений в Android?"

 Bitmap icon = mBitmap; Intent share = new Intent(Intent.ACTION_SEND); share.setType("image/jpeg"); ByteArrayOutputStream bytes = new ByteArrayOutputStream(); icon.compress(Bitmap.CompressFormat.JPEG, 100, bytes); File f = new File(Environment.getExternalStorageDirectory() + File.separator + "temporary_file.jpg"); try { f.createNewFile(); FileOutputStream fo = new FileOutputStream(f); fo.write(bytes.toByteArray()); } catch (IOException e) { e.printStackTrace(); } share.putExtra(Intent.EXTRA_STREAM, Uri.parse("file:///sdcard/temporary_file.jpg")); startActivity(Intent.createChooser(share, "Share Image")); 

Решение, предложенное SuperM, работало для меня в течение длительного времени, но в последнее время я тестировал его на 4.2 (HTC One), и он прекратил работать там. Я знаю, что это обходной путь, но это был единственный, который работал для меня со всеми устройствами и версиями.

Согласно документации, разработчикам предлагается «использовать систему MediaStore» для отправки двоичного содержимого. Это, однако, имеет (преимущество), что медиаконтент будет постоянно сохранен на устройстве.

Если это вариант для вас, вы можете предоставить разрешение WRITE_EXTERNAL_STORAGE и использовать общесистемный MediaStore.

 Bitmap icon = mBitmap; Intent share = new Intent(Intent.ACTION_SEND); share.setType("image/jpeg"); ContentValues values = new ContentValues(); values.put(Images.Media.TITLE, "title"); values.put(Images.Media.MIME_TYPE, "image/jpeg"); Uri uri = getContentResolver().insert(Media.EXTERNAL_CONTENT_URI, values); OutputStream outstream; try { outstream = getContentResolver().openOutputStream(uri); icon.compress(Bitmap.CompressFormat.JPEG, 100, outstream); outstream.close(); } catch (Exception e) { System.err.println(e.toString()); } share.putExtra(Intent.EXTRA_STREAM, uri); startActivity(Intent.createChooser(share, "Share Image")); 

Сначала добавьте разрешение

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

Использовать Bitmap из res

 Bitmap b =BitmapFactory.decodeResource(getResources(),R.drawable.userimage); Intent share = new Intent(Intent.ACTION_SEND); share.setType("image/jpeg"); ByteArrayOutputStream bytes = new ByteArrayOutputStream(); b.compress(Bitmap.CompressFormat.JPEG, 100, bytes); String path = MediaStore.Images.Media.insertImage(getContentResolver(), b, "Title", null); Uri imageUri = Uri.parse(path); share.putExtra(Intent.EXTRA_STREAM, imageUri); startActivity(Intent.createChooser(share, "Select")); 

Протестировано через Bluetooth и другие мессенджеры

Работает как Очарование.

Вот решение, которое сработало для меня. Один из них: вам нужно хранить изображения в общем или не-частном месте ( http://developer.android.com/guide/topics/data/data-storage.html#InternalCache )

Многие предложения говорят, что хранить в «приватном» кэше Apps « Apps », но это, конечно, недоступно через другие внешние приложения, в том числе общие намерения Share File, которые используются. Когда вы попробуете это, он запустится, но, например, dropbox сообщит вам, что файл больше не доступен.

/ * ШАГ 1 – Сохраните файл растрового изображения локально, используя функцию сохранения файлов ниже. * /

 localAbsoluteFilePath = saveImageLocally(bitmapImage); 

/ * ШАГ 2 – Поделитесь нефинансовым файлом Абсолютного пути к файлу с файлом share * /

 if (localAbsoluteFilePath!=null && localAbsoluteFilePath!="") { Intent shareIntent = new Intent(Intent.ACTION_SEND); Uri phototUri = Uri.parse(localAbsoluteFilePath); File file = new File(phototUri.getPath()); Log.d(TAG, "file path: " +file.getPath()); if(file.exists()) { // file create success } else { // file create fail } shareIntent.setData(phototUri); shareIntent.setType("image/png"); shareIntent.putExtra(Intent.EXTRA_STREAM, phototUri); activity.startActivityForResult(Intent.createChooser(shareIntent, "Share Via"), Navigator.REQUEST_SHARE_ACTION); } 

/ * СОХРАНИТЬ ФУНКЦИЮ ИЗОБРАЖЕНИЯ * /

  private String saveImageLocally(Bitmap _bitmap) { File outputDir = Utils.getAlbumStorageDir(Environment.DIRECTORY_DOWNLOADS); File outputFile = null; try { outputFile = File.createTempFile("tmp", ".png", outputDir); } catch (IOException e1) { // handle exception } try { FileOutputStream out = new FileOutputStream(outputFile); _bitmap.compress(Bitmap.CompressFormat.PNG, 90, out); out.close(); } catch (Exception e) { // handle exception } return outputFile.getAbsolutePath(); } 

/ * ШАГ 3 – Обработать результат совместного использования файла. Необходим удаленный временный файл и т. Д. * /

  @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); // deal with this with whatever constant you use. i have a navigator object to handle my navigation so it also holds all mys constants for intents if (requestCode== Navigator.REQUEST_SHARE_ACTION) { // delete temp file File file = new File (localAbsoluteFilePath); file.delete(); Toaster toast = new Toaster(activity); toast.popBurntToast("Successfully shared"); } } 

Надеюсь, это поможет кому-то.

Я нашел самый простой способ сделать это, используя MediaStore для временного хранения изображения, которое вы хотите разделить:

 Drawable mDrawable = mImageView.getDrawable(); Bitmap mBitmap = ((BitmapDrawable) mDrawable).getBitmap(); String path = MediaStore.Images.Media.insertImage(getContentResolver(), mBitmap, "Image Description", null); Uri uri = Uri.parse(path); Intent intent = new Intent(Intent.ACTION_SEND); intent.setType("image/jpeg"); intent.putExtra(Intent.EXTRA_STREAM, uri); startActivity(Intent.createChooser(intent, "Share Image")); 

От: Совместное использование контента с намерением

Простой и простой код, который вы можете использовать для совместного использования изображения из галереи.

  String image_path; File file = new File(image_path); Uri uri = Uri.fromFile(file); Intent intent = new Intent(Intent.ACTION_SEND); intent .setType("image/*"); intent .putExtra(Intent.EXTRA_STREAM, uri); context.startActivity(intent ); 

Как распространять изображение в андроиде пропорционально, Иногда вы хотите сделать снимок вашего представления, а затем хотите поделиться им

Поэтому выполните следующие действия: 1.Добавить разрешение файла mainfest

 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 

2.Very Сначала сделайте снимок экрана вашего вида, например, это

Imageview, Textview, Framelayout, LinearLayout и т. Д.

Например, у вас есть изображение, чтобы сделать снимок экрана

Вызовите этот метод в oncreate ()

  ImageView ivCircle = (ImageView)findViewById(R.id.iv_answer_circle); ///take a creenshot screenShot(ivCircle); 

После того, как вы используете метод снимка снимка экрана, либо на кнопке

Нажмите или где хотите

 shareBitmap(screenShot(ivCircle),"myimage"); 

После того как метод create определит эти два метода

  public Bitmap screenShot(View view) { Bitmap bitmap = Bitmap.createBitmap(view.getWidth(), view.getHeight(), Config.ARGB_8888); Canvas canvas = new Canvas(bitmap); view.draw(canvas); return bitmap; } //////// this method share your image private void shareBitmap (Bitmap bitmap,String fileName) { try { File file = new File(getContext().getCacheDir(), fileName + ".png"); FileOutputStream fOut = new FileOutputStream(file); bitmap.compress(CompressFormat.PNG, 100, fOut); fOut.flush(); fOut.close(); file.setReadable(true, false); final Intent intent = new Intent( android.content.Intent.ACTION_SEND); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(file)); intent.setType("image/png"); startActivity(intent); } catch (Exception e) { e.printStackTrace(); } } 

Я устал от поиска различных вариантов совместного использования вида или изображения из приложения в другое приложение. И, наконец, я получил решение.

Шаг 1: Разделите блок обработки намерений. Появится окно со списком приложений в телефоне

 public void share_bitMap_to_Apps() { Intent i = new Intent(Intent.ACTION_SEND); i.setType("image/*"); ByteArrayOutputStream stream = new ByteArrayOutputStream(); /*compress(Bitmap.CompressFormat.PNG, 100, stream); byte[] bytes = stream.toByteArray();*/ i.putExtra(Intent.EXTRA_STREAM, getImageUri(mContext, getBitmapFromView(relative_me_other))); try { startActivity(Intent.createChooser(i, "My Profile ...")); } catch (android.content.ActivityNotFoundException ex) { ex.printStackTrace(); } } 

Шаг 2. Преобразование вашего представления в BItmap

 public static Bitmap getBitmapFromView(View view) { //Define a bitmap with the same size as the view Bitmap returnedBitmap = Bitmap.createBitmap(view.getWidth(), view.getHeight(), Bitmap.Config.ARGB_8888); //Bind a canvas to it Canvas canvas = new Canvas(returnedBitmap); //Get the view's background Drawable bgDrawable = view.getBackground(); if (bgDrawable != null) //has background drawable, then draw it on the canvas bgDrawable.draw(canvas); else //does not have background drawable, then draw white background on the canvas canvas.drawColor(Color.WHITE); // draw the view on the canvas view.draw(canvas); //return the bitmap return returnedBitmap; } 

Шаг 3 :

Чтобы получить URI из растрового изображения

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

Ref: – http://developer.android.com/training/sharing/send.html#send-multiple-content

 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..")); 

У меня была такая же проблема.
Вот ответ, который не использует явные записи файлов в вашем основном коде (позволяя api заботиться о нем для вас).

 Drawable mDrawable = myImageView1.getDrawable(); Bitmap mBitmap = ((BitmapDrawable)mDrawable).getBitmap(); String path = MediaStore.Images.Media.insertImage(getContentResolver(), mBitmap, "Image I want to share", null); Uri uri = Uri.parse(path); Intent shareIntent = new Intent(); shareIntent.setAction(Intent.ACTION_SEND); shareIntent.putExtra(Intent.EXTRA_STREAM, uri); shareIntent.setType("image/*"); startActivity(Intent.createChooser(shareIntent, "Share Image")); 

Это путь … вам просто нужно добавить свои идентификаторы изображений в объект Drawable. В моем случае (код выше) извлекаемый файл был извлечен из ImageView.

попробуй это,

 Uri imageUri = Uri.parse("android.resource://your.package/drawable/fileName"); Intent intent = new Intent(Intent.ACTION_SEND); intent.setType("image/png"); intent.putExtra(Intent.EXTRA_STREAM, imageUri); startActivity(Intent.createChooser(intent , "Share")); 

Ответ SuperM работал для меня, но с Uri.fromFile () вместо Uri.parse ().

С Uri.parse () он работал только с Whatsapp.

Это мой код:

 sharingIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(mFile)); 

Выход Uri.parse ():
/storage/emulated/0/Android/data/application_package/Files/17072015_0927.jpg

Выход Uri.fromFile:
Файл: ///storage/emulated/0/Android/data/application_package/Files/17072015_0927.jpg

 Strring temp="facebook",temp="whatsapp",temp="instagram",temp="googleplus",temp="share"; if(temp.equals("facebook")) { Intent intent = getPackageManager().getLaunchIntentForPackage("com.facebook.katana"); if (intent != null) { Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND); shareIntent.setType("image/png"); shareIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://" + "/sdcard/folder name/abc.png")); shareIntent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); shareIntent.setPackage("com.facebook.katana"); startActivity(shareIntent); } else { Toast.makeText(MainActivity.this, "Facebook require..!!", Toast.LENGTH_SHORT).show(); } } if(temp.equals("whatsapp")) { try { File filePath = new File("/sdcard/folder name/abc.png"); final ComponentName name = new ComponentName("com.whatsapp", "com.whatsapp.ContactPicker"); Intent oShareIntent = new Intent(); oShareIntent.setComponent(name); oShareIntent.setType("text/plain"); oShareIntent.putExtra(android.content.Intent.EXTRA_TEXT, "Website : www.google.com"); oShareIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(filePath)); oShareIntent.setType("image/jpeg"); oShareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); MainActivity.this.startActivity(oShareIntent); } catch (Exception e) { Toast.makeText(MainActivity.this, "WhatsApp require..!!", Toast.LENGTH_SHORT).show(); } } if(temp.equals("instagram")) { Intent intent = getPackageManager().getLaunchIntentForPackage("com.instagram.android"); if (intent != null) { File filePath =new File("/sdcard/folder name/"abc.png"); Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND); shareIntent.setType("image"); shareIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://" + "/sdcard/Chitranagari/abc.png")); shareIntent.setPackage("com.instagram.android"); startActivity(shareIntent); } else { Toast.makeText(MainActivity.this, "Instagram require..!!", Toast.LENGTH_SHORT).show(); } } if(temp.equals("googleplus")) { try { Calendar c = Calendar.getInstance(); SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy hh:mm:ss"); String strDate = sdf.format(c.getTime()); Intent shareIntent = ShareCompat.IntentBuilder.from(MainActivity.this).getIntent(); shareIntent.setType("text/plain"); shareIntent.putExtra(Intent.EXTRA_TEXT, "Website : www.google.com"); shareIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://" + "/sdcard/folder name/abc.png")); shareIntent.setPackage("com.google.android.apps.plus"); shareIntent.setAction(Intent.ACTION_SEND); startActivity(shareIntent); }catch (Exception e) { e.printStackTrace(); Toast.makeText(MainActivity.this, "Googleplus require..!!", Toast.LENGTH_SHORT).show(); } } if(temp.equals("share")) { File filePath =new File("/sdcard/folder name/abc.png"); //optional //internal storage Intent shareIntent = new Intent(); shareIntent.setAction(Intent.ACTION_SEND); shareIntent.putExtra(Intent.EXTRA_TEXT, "Website : www.google.com"); shareIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(filePath)); //optional//use this when you want to send an image shareIntent.setType("image/jpeg"); shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); startActivity(Intent.createChooser(shareIntent, "send")); }