Как обмениваться изображениями через папку активов в Android?

У меня проблема с обменом данными в папке с ресурсами, и я написал коды для этого. Но это не работает, и я не могу ничем поделиться. Я хочу обмениваться изображениями через все приложения для Android в социальных сетях. это мой код:

String path="file:///android_asset/"+share.jpg;
    Intent whatsappIntent = new Intent(Intent.ACTION_SEND);
    Uri uri=Uri.parse(path); 
    whatsappIntent.setType("image/*");
    whatsappIntent.putExtra(Intent.EXTRA_STREAM,uri);
    try {
        startActivity(whatsappIntent);
    } catch (android.content.ActivityNotFoundException ex) {
        //ToastHelper.MakeShortText("Whatsapp have not been installed.");
}

Как я могу решить это спасибо


person sr.farzad    schedule 30.06.2015    source источник


Ответы (1)


file:///android_asset/ работает только в вашем процессе. Ваши варианты:

  1. Скопируйте ресурс в файл на внешнем хранилище. и поделиться им.

  2. Скопируйте ресурс в файл во внутреннем хранилище. , добавьте FileProvider в свое приложение и поделитесь изображение через Uri с вашего FileProvider.

  3. Попробуйте мой StreamProvider, чтобы поделиться им прямо из ресурсов.

person CommonsWare    schedule 30.06.2015
comment
что вы имеете в виду, что файл работает только в вашем процессе? В моем случае у меня есть файл изображения .png, который я хотел бы отправить через приложение Android Messages из моего приложения другому пользователю моего приложения. Изображение представляет собой простой скриншот данных CardView. Вместо того, чтобы копировать во внутреннее хранилище, могу ли я просто поделиться изображением с помощью Uri содержимого в каталоге res/drawable, где изображение сохранено? В чем преимущество сохранения во внутреннюю память, а затем обмена? - person AJW; 13.05.2020
comment
@AJW: что вы имеете в виду, что файл работает только в вашем процессе? -- Я не говорил, что файл работает только в вашем процессе. Я сказал, что file:///android_asset/ работает только в вашем процессе. я не могу просто поделиться изображением, используя Uri контента, в каталог res/drawable, где изображение сохранено? - это утверждение не имеет для меня особого смысла, извините. Если под каталогом res/drawable вы подразумеваете каталог на устройстве, то он уже записан в хранилище (внутреннее или внешнее, скорее всего). - person CommonsWare; 13.05.2020
comment
@AJW: Если под каталогом res/drawable вы подразумеваете каталог на своем компьютере для разработки и имеете в виду ресурс, который упакован в ваше приложение, ваша следующая проблема связана с использованием содержимого Uri. В Android SDK нет ContentProvider для этого ресурса. Мой StreamProvider специально не справляется с этим, потому что я понятия не имею, как плотность экрана повлияет на поведение ContentProvider. Вы можете попробовать создать его самостоятельно, если хотите. И file:///android_asset/ не имеет значения, так как ваш контент не является активом. - person CommonsWare; 13.05.2020
comment
Спасибо за ответ. Так что лучше всего было бы создать растровое изображение из изображения .png и явно скопировать растровое изображение во внутреннюю память? А затем поделиться из внутреннего хранилища с помощью FileProvider, UriFromFile(), намерения и .addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)? - person AJW; 13.05.2020
comment
@AJW: Это сработает. Или упакуйте другую копию изображения как актив или необработанный ресурс и просто скопируйте его байты в файл, затем используйте FileProvider (быстрее, чем декодирование и перекодирование изображения). - person CommonsWare; 13.05.2020
comment
Понял. Используйте методы, описанные BalusC здесь: stackoverflow. com/questions/7211161/ ? - person AJW; 13.05.2020
comment
@AJW: IOUtils из библиотеки Apache IIRC. И вам не понадобится ByteArrayInputStream, если вы идете по маршруту активов/необработанных ресурсов, поскольку вы получаете InputStream от Android. Хотя общая концепция здравая. - person CommonsWare; 13.05.2020
comment
А, тогда будем исследовать. - person AJW; 13.05.2020
comment
Используется InputStream и OutputStream для копирования в файл... может подтвердить, что файл создан в каталоге, и может сохранить его на машине разработки и открыть его. Не удается загрузить в ImageView и отобразить в пользовательском интерфейсе, а на скопированном изображении появляется черный фон. Есть мысли как исправить? Вопрос размещен здесь: stackoverflow.com/questions/61846723/ - person AJW; 17.05.2020