Javi
Javi

Reputation: 939

Receive Whatsapp "Send chat via" intent in my own app

I'm building an app that will ask the user to export a chat from WhatsApp into my app. How can I show my app in the "Send chat via.." intent window?

Upvotes: 3

Views: 491

Answers (2)

Alktraz
Alktraz

Reputation: 11

To read the content of the chat is this complete:

Intent intent = getIntent();
String type=intent.getType();
    
String action=intent.getAction();
StringBuffer chatContent=new StringBuffer();
// Figure out what to do based on the intent type
if(intent.ACTION_SEND_MULTIPLE.equals(action) && type!=null){
    Bundle bundle=intent.getExtras();
    try {
        for(int i=0;i<intent.getClipData().getItemCount();i++){
            Uri uri = intent.getClipData().getItemAt(i).getUri();
            InputStream inputstream = getContentResolver().openInputStream(uri);
            byte[] data = new byte[1024];
            int bytesRead = inputstream.read(data);

            while (bytesRead != -1) {
                chatContent.append(new String(data));
                bytesRead = inputstream.read(data);
            }
    }
    //aqui se hace lo que se quiera con el chat "chatContent"
    System.out.println(chatContent.toString());
            
    System.out.println(bundle.getString(Intent.EXTRA_TEXT).replaceAll("El historial del chat se adjuntó a este correo como \"Chat de WhatsApp con ","").replaceAll("\".",""));
    }catch (Exception e){
        e.printStackTrace();
    }
}

Upvotes: 1

Javi
Javi

Reputation: 939

The correct way to do this is to add the following intent-filter:

    <intent-filter>
        <action android:name="android.intent.action.SENDTO"/>
        <data android:scheme="mailto"/>
        <category android:name="android.intent.category.DEFAULT"/>
    </intent-filter>
    <intent-filter>
        <action android:name="android.intent.action.SEND"/>
        <data android:mimeType="*/*"/>
        <category android:name="android.intent.category.DEFAULT"/>
    </intent-filter>
    <intent-filter>
        <action android:name="android.intent.action.SEND_MULTIPLE"/>
        <data android:mimeType="*/*"/>
        <category android:name="android.intent.category.DEFAULT"/>
    </intent-filter>

Then you can read the content of the chat using this:

            Uri uri = intent.getClipData().getItemAt(i).getUri();
            InputStream inputstream = getContentResolver().openInputStream(uri);
            byte[] data = new byte[1024];
            int bytesRead = inputstream.read(data);

            while (bytesRead != -1) {
                chatContent.append(new String(data));
                bytesRead = inputstream.read(data);
            }

            // TODO - Here we can do whatever we want with the chat content chatContent.toString()
            if (mainTextView != null){
                mainTextView.setText(chatContent.toString());
            }

Upvotes: 6

Related Questions