2014-02-15 5 views
2

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

здесь кнопка сохранения:

public void exportImage() { 
    if (this.mImageDrawableSet == false) { 
     this.mSaveImageOnDisplay = true; 
     return; 
    } 

    try { 
     final Bitmap bitmap = getImageBitmap(); 
     if (bitmap == null) { 
      Toast.makeText(getActivity(), "Something Went Wrong, Please Try Again!", Toast.LENGTH_SHORT).show(); 
      return; 
     } 

     final File dir = new File(Environment.getExternalStorageDirectory(), super.getResources().getString(R.string.config_external_storage_folder)); 

     if (!dir.exists()) { 
      dir.mkdirs(); 
     } 

     final File img = new File(dir, this.mNode.name + ".png"); 
     if (img.exists()) { 
      img.delete(); 
     } 

     final OutputStream outStream = new FileOutputStream(img); 
     bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outStream); 
     outStream.flush(); 
     outStream.close(); 

     super.getActivity().sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" + dir.toString()))); 
     Toast.makeText(getActivity(), "Wallpaper Saved To, " + img.toString() + "!", Toast.LENGTH_LONG).show(); 
    } catch (Exception e) { 
     Log.e(TAG, "", e); 
     Toast.makeText(getActivity(), "Something Went Wrong, Please Try Again!", Toast.LENGTH_SHORT).show(); 
    } 
} 

и вот раздел доля:

public void shareimage() { 
    if (this.mImageDrawableSet == false) { 
     this.mApplyImageOnDisplay = true; 
     return; 
    } 

    try { 
     final Bitmap bitmap = getImageBitmap(); 
     if (bitmap == null) { 
      Toast.makeText(getActivity(), "Something Went Wrong, Please Try Again!", Toast.LENGTH_SHORT).show(); 
      return; 
     }  
     File root = Environment.getExternalStorageDirectory(); 
     File cachePath = new File(root.getAbsolutePath() + "/DCIM/Camera/image.jpg"); 

      cachePath.createNewFile(); 
      FileOutputStream ostream = new FileOutputStream(cachePath); 
      bitmap.compress(CompressFormat.JPEG, 100, ostream); 
      ostream.close(); 
      Intent share = new Intent(Intent.ACTION_SEND); 
      share.setType("image/*"); 
      share.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(cachePath)); 
      startActivity(Intent.createChooser(share,"Share via")); 
     } catch (Exception e) { 
      e.printStackTrace(); 
      Toast.makeText(getActivity(), "Something Went Wrong, Please Try Again!", Toast.LENGTH_SHORT).show(); 
     } 
    } 

и ничего не отображается на LogCat и я просто получить что-то неправильно тост. Разрешения правильные.

LogCat

02-15 16:10:50.527: W/System.err(2033):  at  android.support.v4.app.Watson.onMenuItemSelected(Watson.java:126) 
02-15 16:10:50.539: W/System.err(2033):  at com.actionbarsherlock.ActionBarSherlock.callbackOptionsItemSelected(ActionBarSherlock.java:604) 
02-15 16:10:50.539: W/System.err(2033):  at com.actionbarsherlock.internal.ActionBarSherlockNative.dispatchOptionsItemSelected(ActionBarSherlockNative.java:92) 
02-15 16:10:50.539: W/System.err(2033):  at com.actionbarsherlock.app.SherlockFragmentActivity.onMenuItemSelected(SherlockFragmentActivity.java:204) 
02-15 16:10:50.539: W/System.err(2033):  at com.android.internal.policy.impl.PhoneWindow.onMenuItemSelected(PhoneWindow.java:986) 
02-15 16:10:50.539: W/System.err(2033):  at com.android.internal.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:735) 
02-15 16:10:50.539: W/System.err(2033):  at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:152) 
02-15 16:10:50.539: W/System.err(2033):  at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:874) 
02-15 16:10:50.539: W/System.err(2033):  at com.android.internal.view.menu.ActionMenuView.invokeItem(ActionMenuView.java:547) 
02-15 16:10:50.539: W/System.err(2033):  at com.android.internal.view.menu.ActionMenuItemView.onClick(ActionMenuItemView.java:115) 
02-15 16:10:50.539: W/System.err(2033):  at android.view.View.performClick(View.java:4240) 
02-15 16:10:50.539: W/System.err(2033):  at android.view.View$PerformClick.run(View.java:17721) 
02-15 16:10:50.543: W/System.err(2033):  at android.os.Handler.handleCallback(Handler.java:730) 
02-15 16:10:50.543: W/System.err(2033):  at android.os.Handler.dispatchMessage(Handler.java:92) 
02-15 16:10:50.543: W/System.err(2033):  at android.os.Looper.loop(Looper.java:137) 
02-15 16:10:50.543: W/System.err(2033):  at android.app.ActivityThread.main(ActivityThread.java:5103) 
02-15 16:10:50.543: W/System.err(2033):  at java.lang.reflect.Method.invokeNative(Native Method) 
02-15 16:10:50.543: W/System.err(2033):  at java.lang.reflect.Method.invoke(Method.java:525) 
02-15 16:10:50.543: W/System.err(2033):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 
02-15 16:10:50.551: W/System.err(2033):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
02-15 16:10:50.551: W/System.err(2033):  at dalvik.system.NativeStart.main(Native Method) 
02-15 16:10:50.551: W/System.err(2033): Caused by: libcore.io.ErrnoException: open failed: ENOENT (No such file or directory) 
02-15 16:10:50.555: W/System.err(2033):  at libcore.io.Posix.open(Native Method) 
02-15 16:10:50.555: W/System.err(2033):  at libcore.io.BlockGuardOs.open(BlockGuardOs.java:110) 
02-15 16:10:50.555: W/System.err(2033):  at java.io.File.createNewFile(File.java:941) 
02-15 16:10:50.559: W/System.err(2033):  ... 23 more 
+1

Можете ли вы сообщить мне, что именно такое приложение для показа в Тосте? –

+0

Я получаю это «Что-то пошло не так, попробуй еще раз!» хотите их указать, чтобы узнать, какой из них отображается? – Soheyl

+1

Да, я хочу этого. –

ответ

3

я нашел его в случае, если кто нужен ему окончательного shareimage()

public void shareimage() { 
    if (this.mImageDrawableSet == false) { 
     this.mApplyImageOnDisplay = true; 
     return; 
    } 

    try { 
     final Bitmap bitmap = getImageBitmap(); 
     if (bitmap == null) { 
      Toast.makeText(getActivity(), "Something Went Wrong, Please Try Again!1", Toast.LENGTH_SHORT).show(); 
      return; 
     }  
     final File dir = new File(Environment.getExternalStorageDirectory(), super.getResources().getString(R.string.config_external_storage_folder)); 

     if (!dir.exists()) { 
      dir.mkdirs(); 
     } 

     final File img = new File(dir, this.mNode.name + ".png"); 
     if (img.exists()) { 
      img.delete(); 
     } 
     final OutputStream outStream = new FileOutputStream(img); 
     bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outStream); 
     outStream.flush(); 
     outStream.close(); 
      Intent share = new Intent(Intent.ACTION_SEND); 
      share.setType("image/*"); 
      share.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(img)); 
      startActivity(Intent.createChooser(share,"Share via")); 
     } catch (Exception e) { 
      e.printStackTrace(); 
      Toast.makeText(getActivity(), "Something Went Wrong, Please Try Again!2", Toast.LENGTH_SHORT).show(); 
     } 
    } 
+0

Вы используете файл, заканчивающийся «.png» и Bitmap.CompressFormat.JPEG. Я думаю, они должны соответствовать. – Meier

1

творю дикое предположение сейчас, но выглядит как здесь:

File root = Environment.getExternalStorageDirectory(); 

вы забыли назвать

root.mkdirs(); 

впоследствии. Я имею в виду, вы уверены, что в этой точке вашего кода существует ваш каталог файлов +?

2

Я предполагаю, что мой код меньше +, так как он использует openFileOutput() метод из контекста + MODE_WORLD_READABLE для временного файла он не нуждается в каком-либо Разрешения:

ImageView iv = (ImageView)adapter.getmCurrentView(); 
    String fileName = "image.jpg"; 
    iv.setDrawingCacheEnabled(true); 
    Bitmap bitmap = iv.getDrawingCache(); 
    try 
    { 
     FileOutputStream ostream = getActivity().openFileOutput(fileName, Context.MODE_WORLD_READABLE); 
     bitmap.compress(Bitmap.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_SUBJECT, "Great photo from Poland!"); 
    share.putExtra(Intent.EXTRA_TEXT, "Hi, I'm sharing with you this great picture!"); 
    share.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(new File(getActivity().getFileStreamPath(fileName).getAbsolutePath()))); 
    startActivity(Intent.createChooser(share,"Share via")); 
+0

Хорошая идея. Несомненно, Context.MODE_WORLD_READABLE устарел в API17. Так что это может скоро закончиться с новой версией Andrid. – Meier

+0

Это больше не поддерживается и генерирует исключение. Любой другой способ создать изображение общего изображения из ImageView? – bashan

Смежные вопросы