1

Я пытаюсь передать загруженное растровое изображение с помощью приложения ShareActionProvider от Android, и у меня возникла проблема с передачей растрового изображения соответствующим приложениям (таким как Messenger, Google+, Gmail). Когда я передаю намерение с помощью uri, ничего не происходит (изображение не заполняется в стороннем приложении).Совместное использование изображения с помощью ShareActionProvider

Вот мое Намерение:

Intent intent = new Intent(Intent.ACTION_SEND); 
    intent.setType("image/*"); 
    writeToDirectory(bitmap, "cached-image.png"); // write bitmap to file system in order to share 
    intent.putExtra(Intent.EXTRA_STREAM, getFileUri("cached-image.png")) 
    mShareActionProvider.setShareIntent(intent); 

Я в настоящее время сохранение растрового изображения в файл с помощью следующего:

public String writeToDirectory(Bitmap bitmap, String filename) { 
    assert context != null; 
    assert bitmap != null; 
    assert filename != null; 

    // Ensure directory exists and create if not 
    String path = Environment.getExternalStorageDirectory() + File.separator + "myApp"; 
    File f = new File(path); 
    boolean dirExists = f.isDirectory(); 

    if (!f.isDirectory() && !f.exists()) { 
     dirExists = f.mkdirs(); 
    } 


    if (dirExists) { 
     File file = new File(sharedPrivateExternalPath, filename); 
     try { 
      FileOutputStream out = new FileOutputStream(file); 
      bitmap.compress(Bitmap.CompressFormat.PNG, 90, out); 
      out.close(); 
     } catch (IOException ex) { 
      e(TAG, "Write failed!"); 
      e(TAG, ex.getMessage()); 
      ex.printStackTrace(); 
     } 
     return file.toString(); 
    } else { 
     return ""; 
    } 
} 

и я извлекая Uri с помощью этого метода

public Uri getFileUri(String filename) { 
    assert context != null; 
    assert filename != null; 

    String path = Environment.getExternalStorageDirectory() + File.separator + "myApp"; 
    File file = new File(path, filename); 
    return Uri.fromFile(file); 
} 

Я проверил, что файл записывается в соответствующее место (Uri is file:///storage/emulated/0/myApp/cached-image.png) и смог просмотреть изображение там (сделал adb pull с устройства), хотя изображение не прошло. Я не вижу ошибок в журнале (нет FileNotFoundException или что-то в этом роде). Это проблема с разрешением файла? Разве я не могу поделиться с «непубличным» местом?

Если я меняю getExternalStorageDirectory() + File.separator + "myApp"; на простой getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), он отлично работает ... но это беспокоит меня, что это не работает другим способом :).

Любая помощь будет замечательной!

+0

я не получаю эту проблему, вам нужно разделить путь изображения или что? –

+0

Извините, вопрос был немного расплывчатым. Я обновил свой вопрос, но я также нашел свою проблему. – loeschg

ответ

0

Оказывается, это связано с кодом, который я не опубликовал (удивление, удивление). Я пытался установить shareIntent в setOnShareTargetSelectedListener ... который, по-видимому, вы не можете сделать.

Моя проблема была с этим фрагмент кода

mShareActionProvider = (ShareActionProvider) 
      MenuItemCompat.getActionProvider(shareItem); 
    mShareActionProvider.setOnShareTargetSelectedListener(new ShareActionProvider.OnShareTargetSelectedListener() { 
     @Override 
     public boolean onShareTargetSelected(ShareActionProvider shareActionProvider, Intent intent) { 
      String urlKey = mImageUrlList.get(mImageGallery.getCurrentItem()) + "\n"; 

      // This is the problem line 
      mShareActionProvider.setShareIntent(getImageIntent(app.getImageCache().get(urlKey))); 

      return false; 
     } 
    }) 
Смежные вопросы