Как использовать совместное использование совместного использования изображений для совместного использования изображений в 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 puted code:

  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 исправьте мой вышеприведенный код ИЛИ дайте мне правильный пример plz. Как мне поделиться изображениями из папки drawable-hdpi

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

Решение, предлагаемое супермаром, работало для меня в течение длительного времени, но в последнее время я тестировал его на 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")); 

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

использовать 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 и другие мессенджеры

Работает как Шарм.

Я нашел самый простой способ сделать это, используя 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")); 

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

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

Многие предложения говорят, что хранить в «приватном» кэше 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"); } } 

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

Как распространять изображение в андроиде пропорционально, Иногда вы хотите сделать снимок вашего представления, а затем хотите поделиться им, выполните следующие действия: 1.Добавить разрешение на файл mainfest

  

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

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

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

после того, как вы сделаете снимок экрана с помощью метода обхода изображения на кнопке
нажмите или где хотите

 shareBitmap(screenShot(image),"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(); } } 

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

  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: Разделите блок обработки намерений. Появится окно со списком приложений в телефоне.

 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); } 

У меня была такая же проблема.
Вот ответ, который не использует явные записи файлов в вашем основном коде (позволяя 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.

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

 ArrayList imageUris = new ArrayList(); 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..")); 

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

 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")); } 
Давайте будем гением компьютера.