Intereting Posts

Как обмениваться имиджем изображения?

У меня есть ImageView, и я хочу поделиться своим изображением.

Ниже приведен мой код,

btshare.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { View content = findViewById(R.id.full_image_view); content.setDrawingCacheEnabled(true); Bitmap bitmap = content.getDrawingCache(); File root = Environment.getExternalStorageDirectory(); File cachePath = new File(root.getAbsolutePath() + "/DCIM/Camera/image.jpg"); try { root.createNewFile(); FileOutputStream ostream = new FileOutputStream(root); bitmap.compress(CompressFormat.JPEG, 100, ostream); ostream.close(); } catch (Exception e) { e.printStackTrace(); } Intent shareIntent = new Intent(Intent.ACTION_SEND); Uri phototUri = Uri.parse("/DCIM/Camera/image.jpg"); shareIntent.setData(phototUri); shareIntent.setType("image/*"); shareIntent.putExtra(Intent.EXTRA_STREAM, phototUri); startActivity(Intent.createChooser(shareIntent, "Share Via")); } }); 

Когда я нажимаю кнопку, я получаю эти ошибки?

 01-13 06:00:19.282: W/System.err(6199): java.io.FileNotFoundException: /storage/emulated/0: open failed: EISDIR (Is a directory) 01-13 06:00:19.286: W/System.err(6199): at libcore.io.IoBridge.open(IoBridge.java:409) 01-13 06:00:19.286: W/System.err(6199): at java.io.FileOutputStream.<init>(FileOutputStream.java:88) 01-13 06:00:19.294: W/System.err(6199): at java.io.FileOutputStream.<init>(FileOutputStream.java:73) 01-13 06:00:19.294: W/System.err(6199): at com.safshari.mandegar.FullImageActivity$3.onClick(FullImageActivity.java:116) 01-13 06:00:19.294: W/System.err(6199): at android.view.View.performClick(View.java:4240) 01-13 06:00:19.294: W/System.err(6199): at android.view.View$PerformClick.run(View.java:17721) 01-13 06:00:19.298: W/System.err(6199): at android.os.Handler.handleCallback(Handler.java:730) 01-13 06:00:19.298: W/System.err(6199): at android.os.Handler.dispatchMessage(Handler.java:92) 01-13 06:00:19.298: W/System.err(6199): at android.os.Looper.loop(Looper.java:137) 01-13 06:00:19.302: W/System.err(6199): at android.app.ActivityThread.main(ActivityThread.java:5103) 01-13 06:00:19.302: W/System.err(6199): at java.lang.reflect.Method.invokeNative(Native Method) 01-13 06:00:19.302: W/System.err(6199): at java.lang.reflect.Method.invoke(Method.java:525) 01-13 06:00:19.302: W/System.err(6199): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 01-13 06:00:19.306: W/System.err(6199): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 01-13 06:00:19.306: W/System.err(6199): at dalvik.system.NativeStart.main(Native Method) 01-13 06:00:19.310: W/System.err(6199): Caused by: libcore.io.ErrnoException: open failed: EISDIR (Is a directory) 01-13 06:00:19.310: W/System.err(6199): at libcore.io.Posix.open(Native Method) 01-13 06:00:19.310: W/System.err(6199): at libcore.io.BlockGuardOs.open(BlockGuardOs.java:110) 01-13 06:00:19.310: W/System.err(6199): at libcore.io.IoBridge.open(IoBridge.java:393) 01-13 06:00:19.314: W/System.err(6199): ... 14 more 01-13 06:00:19.618: E/Genymotion(489): Could not open '/sys/class/power_supply/genymotion_fake_path/present' 

Что мне делать и какие разрешения требуется моей программе? Я уже объявлял следующие разрешения,

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

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

  Intent share = new Intent(Intent.ACTION_SEND); share.setType("image/*"); share.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(new File(root.getAbsolutePath() + "/DCIM/Camera/image.jpg")); startActivity(Intent.createChooser(share,"Share via")); 

Добавьте эти разрешения в AndroidMenifest.xml

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

Final Code, чтобы каждый мог использовать для сохранения и совместного использования изображения из imageview:

 View content = findViewById(R.id.full_image_view); content.setDrawingCacheEnabled(true); Bitmap bitmap = content.getDrawingCache(); File root = Environment.getExternalStorageDirectory(); File cachePath = new File(root.getAbsolutePath() + "/DCIM/Camera/image.jpg"); try { cachePath.createNewFile(); FileOutputStream ostream = new FileOutputStream(cachePath); bitmap.compress(CompressFormat.JPEG, 100, ostream); ostream.close(); } catch (Exception e) { e.printStackTrace(); } Intent share = new Intent(Intent.ACTION_SEND); share.setType("image/*"); share.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(cachePath)); startActivity(Intent.createChooser(share,"Share via")); } 

Счастливое кодирование

Вы должны добавить это разрешение

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

Попробуйте создать кэш, чтобы сначала сохранить это изображение, а затем поделиться им, потому что вы можете обмениваться только изображениями, которые являются общедоступными для других приложений. Вы не можете делиться содержимым, которое является приватным для вашего приложения.

Используйте Context.getExternalCacheDir () для создания кеша и затем обменивайтесь содержимым этого кеша