¿Cómo compartir la imagen de su aplicación con otra aplicación en Android?

La mayoría de las veces, mientras usamos una aplicación, queremos compartir imágenes de la aplicación con otra aplicación. Mientras usamos muchas plataformas de redes sociales, encontramos que esta función es muy útil cuando queremos compartir información de una aplicación a otra. El resolutor de Android Intent se usa cuando se envían datos a otra aplicación como parte de un flujo de tareas bien definido. Para usar la resolución de intenciones de Android, cree una intención y agregue extras. Aquí vamos a entender cómo hacerlo.

Nota: si desea compartir el entonces

Implementación paso a paso

Paso 1: Crear un nuevo Proyecto

Para crear un nuevo proyecto en Android Studio, consulte Cómo crear/iniciar un nuevo proyecto en Android Studio . Tenga en cuenta que seleccione Java como lenguaje de programación.  

Paso 2: trabajar con el archivo AndroidManifest.xml

Agregue el siguiente permiso al archivo AndroidManifest.xml

<usos-permiso android:name=”android.permission.READ_EXTERNAL_STORAGE” />

<usos-permiso android:name=”android.permission.WRITE_EXTERNAL_STORAGE” />

Agregue las siguientes líneas dentro de la etiqueta <application> y después de la etiqueta </acticty> .

XML

<provider
  android:name="androidx.core.content.FileProvider"
    
  <!-- Write down your package name -->
  android:authorities="com.anni.shareimage.fileprovider"
  
  android:exported="false"
  android:grantUriPermissions="true">
    <!-- we intend to request content
          URIs for the images/subdirectory
          of your private file area -->
    <meta-data
      android:name="android.support.FILE_PROVIDER_PATHS"
      android:resource="@xml/paths" />
</provider>

A continuación se muestra el código completo para el archivo AndroidManifest.xml

XML

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.anni.shareimage">
  
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".ViewPdfActivity"></activity>
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
  
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
  
        <provider
            android:name="androidx.core.content.FileProvider"
            android:authorities="com.anni.shareimage.fileprovider"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/paths" />
        </provider>
    </application>
  
</manifest>

Paso 3: Cree un nuevo archivo XML

Cree un directorio XML en resolución y luego cree un archivo paths.xml en él. Un proveedor de archivos solo puede generar un URI de contenido para archivos en directorios que especifiquemos de antemano. Especificamos un directorio, especificamos su área de almacenamiento y ruta en XML, utilizando elementos secundarios del elemento <paths> . A continuación se muestra el video de la creación del archivo XML.

XML

<?xml version="1.0" encoding="utf-8"?>
<paths>
    <cache-path
        name="shared_images"
        path="images/" />
</paths>

Paso 4: trabajar con el archivo activity_main.xml

Vaya al archivo activity_main.xml y consulte el siguiente código. A continuación se muestra el código para el archivo activity_main.xml .

Artículo de referencia:

XML

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical"
    tools:context=".MainActivity">
  
    <!-- Here we will attach our image to share -->
    <ImageView
        android:id="@+id/shareimage"
        android:layout_width="200dp"
        android:layout_height="200dp"
        android:src="@drawable/image" />
  
    <!-- We will click on it then shareonlytext 
         function will be called-->
    <Button
        android:id="@+id/share"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:background="@color/colorPrimary"
        android:padding="10dp"
        android:text="Click here to Share "
        android:textSize="10dp" />
      
</LinearLayout>

Paso 5: trabajar con el archivo MainActivity.java

Vaya al archivo MainActivity.java y consulte el siguiente código. A continuación se muestra el código del archivo MainActivity.java . Se agregan comentarios dentro del código para comprender el código con más detalle.

Java

import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;
  
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.content.FileProvider;
  
import java.io.File;
import java.io.FileOutputStream;
  
public class MainActivity extends AppCompatActivity {
  
    Button share;
    ImageView imageView;
  
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        share = findViewById(R.id.share);
        imageView = findViewById(R.id.shareimage);
  
        // initialising text field where we will enter data
        share.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // Now share image function will be called
                // here we  will be passing the text to share
                // Getting drawable value from image
                BitmapDrawable bitmapDrawable = (BitmapDrawable) imageView.getDrawable();
                Bitmap bitmap = bitmapDrawable.getBitmap();
                shareImageandText(bitmap);
            }
        });
    }
  
    private void shareImageandText(Bitmap bitmap) {
        Uri uri = getmageToShare(bitmap);
        Intent intent = new Intent(Intent.ACTION_SEND);
  
        // putting uri of image to be shared
        intent.putExtra(Intent.EXTRA_STREAM, uri);
  
        // adding text to share
        intent.putExtra(Intent.EXTRA_TEXT, "Sharing Image");
  
        // Add subject Here
        intent.putExtra(Intent.EXTRA_SUBJECT, "Subject Here");
  
        // setting type to image
        intent.setType("image/png");
  
        // calling startactivity() to share
        startActivity(Intent.createChooser(intent, "Share Via"));
    }
  
    // Retrieving the url to share
    private Uri getmageToShare(Bitmap bitmap) {
        File imagefolder = new File(getCacheDir(), "images");
        Uri uri = null;
        try {
            imagefolder.mkdirs();
            File file = new File(imagefolder, "shared_image.png");
            FileOutputStream outputStream = new FileOutputStream(file);
            bitmap.compress(Bitmap.CompressFormat.PNG, 90, outputStream);
            outputStream.flush();
            outputStream.close();
            uri = FileProvider.getUriForFile(this, "com.anni.shareimage.fileprovider", file);
        } catch (Exception e) {
            Toast.makeText(this, "" + e.getMessage(), Toast.LENGTH_LONG).show();
        }
        return uri;
    }
}

Producción:

Publicación traducida automáticamente

Artículo escrito por annianni y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *