Share URL image with android Web view | share image from android Web view to another app
In previous posts, we create a context menu and add two buttons of download image and copy image address.
Today, we create a Share Image button to share an image to another app.
For that, we add a new Picasso library in our app-level Gradle file.
Gradle dependency
Then we add a new button in our context menu in our Main activity.java
Gradle dependency
implementation 'com.squareup.picasso:picasso:2.71828'
Then we add a new button in our context menu in our Main activity.java
MainActivity.java Context menu
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
final WebView.HitTestResult webviewHittestResult = mywebview.getHitTestResult();
String DownloadImageUrl = webviewHittestResult.getExtra();
if(webviewHittestResult.getType() == WebView.HitTestResult.IMAGE_TYPE ||
webviewHittestResult.getType() == WebView.HitTestResult.SRC_IMAGE_ANCHOR_TYPE)
{
if(URLUtil.isNetworkUrl(DownloadImageUrl))
{
menu.setHeaderTitle("Download Image from Below");
menu.add(0,1,0,"Share").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem menuItem) {
Picasso.get().load(DownloadImageUrl).into(new Target() {
@Override
public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
Intent i = new Intent(Intent.ACTION_SEND);
i.setType("image/*");
i.putExtra(Intent.EXTRA_STREAM,getloacalBitmaUri(bitmap));
startActivity(Intent.createChooser(i,"Share Image"));
}
@Override
public void onBitmapFailed(Exception e, Drawable errorDrawable) {
}
@Override
public void onPrepareLoad(Drawable placeHolderDrawable) {
}
});
return false;
}
});
}
}
else
{
Toast.makeText(this, "Error Downloading", Toast.LENGTH_SHORT).show();
}
}
public Uri getloacalBitmaUri(Bitmap bmp)
{
Uri bmpuri = null;
try{
File file = new File(getExternalFilesDir(Environment.DIRECTORY_PICTURES),"shareimage"+ System.currentTimeMillis()+".png");
FileOutputStream out = new FileOutputStream(file);
bmp.compress(Bitmap.CompressFormat.PNG,90,out);
out.close();
bmpuri = FileProvider.getUriForFile(getApplicationContext(),"studio.harpreet.mybrowser.provider",file);
}
catch(IOException e)
{
e.printStackTrace();
}
return bmpuri;
}
Here, we create a context menu which is shown when we long click on any image in our Webview. Then, we add a share image button in our context menu. Then we also add a new method for handling a Bitmap image. getloacalBitmaUri method is used to save the image in our pictures directory. Then we use Picasso to load that saved bitmap image and send it to another app.
Then we add a Provider tag in android manifest.
AndroidManifest.xml
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="studio.harpreet.mybrowser.provider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_provider_path" />
</provider>
Then we add a new XML File which we called in this Provider Tag. named file_provider_pathfile_provider_path,xml
<?xml version="1.0" encoding="utf-8"?>
<paths
xmlns:android = "http://schemas.android.com/apk/res/android">
<external-path name="image_capture" path="."/>
</paths>
Now, when we long click on the image which is shown in our WebView and click share image button then we successfully share that image to another app.
Follow us for more posts like this,
Subscribe Harpreet studio on Youtube
Like Harpreet Studio on Facebook
Follow me on Instagram
No comments