We will develop a feature for sharing images to another application (such as Telegram and Facebook). The instructions will be provided in the Java programming language for Android.
Method 1: Use base64 image string:
private void shareImageBase64(Context context, String base64Image) { try { // Decode the Base64 string into a bitmap byte[] decodedBytes = android.util.Base64.decode(base64Image, android.util.Base64.DEFAULT); Bitmap decodedBitmap = BitmapFactory.decodeByteArray(decodedBytes, 0, decodedBytes.length); // Save the bitmap to a temporary file File cachePath = new File(context.getCacheDir(), "images"); cachePath.mkdirs(); File imageFile = new File(cachePath, "shared_image.png"); FileOutputStream fos = new FileOutputStream(imageFile); decodedBitmap.compress(Bitmap.CompressFormat.PNG, 100, fos); fos.flush(); fos.close(); // Create an Intent to share the image Intent shareIntent = new Intent(Intent.ACTION_SEND); shareIntent.setType("image/*"); Uri uriShare = FileProvider.getUriForFile(context, context.getPackageName() + ".provider", imageFile); shareIntent.putExtra(Intent.EXTRA_STREAM, uriShare); // Start an activity to allow the user to choose the app to share with Intent chooser = Intent.createChooser(shareIntent, "Share Image"); List<ResolveInfo> resInfoList = context.getPackageManager().queryIntentActivities(chooser, PackageManager.MATCH_DEFAULT_ONLY); for (ResolveInfo resolveInfo : resInfoList) { String packageName = resolveInfo.activityInfo.packageName; context.grantUriPermission(packageName, uriShare, Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION); } context.startActivity(chooser); } catch (IOException e) { e.printStackTrace(); Toast.makeText(context, "Error sharing image", Toast.LENGTH_SHORT).show(); } }
Method 2: Use path file:
private void shareImageWithPath(Context context, String pathName) { // Add to AndroidManifest.xml file // For example, if you're sharing a file from external storage, you would add the following permission: // <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> File fileShare = new File(pathName); // Create an Intent to share the file Intent shareIntent = new Intent(); shareIntent.setAction(Intent.ACTION_SEND); shareIntent.setType("image/*"); Uri uriShare = Uri.fromFile(fileShare); shareIntent.putExtra(Intent.EXTRA_STREAM, uriShare); Intent chooser = Intent.createChooser(shareIntent, "Share Image"); List<ResolveInfo> resInfoList = context.getPackageManager().queryIntentActivities(chooser, PackageManager.MATCH_DEFAULT_ONLY); for (ResolveInfo resolveInfo : resInfoList) { String packageName = resolveInfo.activityInfo.packageName; context.grantUriPermission(packageName, uriShare, Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION); } // Start the share activity context.startActivity(chooser); }
Next step:
Add to AndroidManifest.xml file, inside tag application
<provider android:name="androidx.core.content.FileProvider" android:authorities="${applicationId}.provider" android:exported="false" android:grantUriPermissions="true"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/provider_paths" /> </provider>
Next step: Create file provider_paths.xml inside folder xml at /src/main/res/xml/provider_paths.xml
Paste to file provider_paths.xml code:
<?xml version="1.0" encoding="utf-8"?> <paths> <external-files-path name="external_files" path="/" /> <external-cache-path name="external_cache" path="/" /> <external-media-path name="external_media" path="/" /> <external-path name="external" path="/" /> <cache-path name="cache" path="/" /> <files-path name="files" path="/" /> <external-path name="external_files" path="."/> </paths>
Done, please build project!