it-swarm.com.de

Senden Sie Text programmgesteuert an einen bestimmten Kontakt (WhatsApp)

Ich wollte wissen, wie ich Text an einen bestimmten WhatsApp-Kontakt senden kann. Ich habe Code gefunden, um einen bestimmten Kontakt anzuzeigen, aber keine Daten zu senden.

Cursor c = getContentResolver().query(ContactsContract.Data.CONTENT_URI,
    new String[] { ContactsContract.Contacts.Data._ID }, ContactsContract.Data.DATA1 + "=?",
    new String[] { id }, null);
c.moveToFirst();
Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse("content://com.Android.contacts/data/" + c.getString(0)));

startActivity(i);
c.close();

Dies funktioniert gut, um einen WhatsApp-Kontakt anzuzeigen, aber wie kann ich jetzt Text hinzufügen? Oder hat der Whatsapp-Entwickler nicht so eine API implementiert?

48
CommonGuy

Dies ist jetzt über die WhatsApp Business API möglich. Nur Unternehmen können die Verwendung beantragen. Dies ist die einzige Möglichkeit, Nachrichten direkt an Telefonnummern ohne menschliche Interaktion zu senden.

Das Versenden normaler Nachrichten ist kostenlos. Anscheinend müssen Sie eine MySQL-Datenbank und den WhatsApp Business Client auf Ihrem Server hosten.

1
CommonGuy

Ich denke, die Antwort ist eine Mischung aus Ihrer Frage und dieser Antwort hier: https://stackoverflow.com/a/15931345/734687 .__ Ich würde den folgenden Code versuchen:

  1. Ändern Sie ACTION_VIEW in ACTION_SENDTO
  2. stellen Sie den Uri so ein, wie Sie es getan haben
  3. setze das Paket auf WhatsApp
Intent i = new Intent(Intent.ACTION_SENDTO, Uri.parse("content://com.Android.contacts/data/" + c.getString(0)));
i.setType("text/plain");
i.setPackage("com.whatsapp");           // so that only Whatsapp reacts and not the chooser
i.putExtra(Intent.EXTRA_SUBJECT, "Subject");
i.putExtra(Intent.EXTRA_TEXT, "I'm the body.");
startActivity(i);

Ich habe mir das Whatsapp-Manifest angesehen und festgestellt, dass ACTION_SEND für die Aktivität ContactPicker registriert ist, so dass es Ihnen nicht weiterhilft. Allerdings ist ACTION_SENDTO für die Aktivität com.whatsapp.Conversation registriert, was für Ihr Problem angemessener klingt.

WhatsApp kann als Ersatz für das Versenden von SMS verwendet werden. Es sollte also wie SMS funktionieren. Wenn Sie die gewünschte Anwendung nicht angeben (über setPackage), zeigt Android die Anwendungsauswahl an. Hierfür sollten Sie nur den Code für das Senden von SMS über Absicht betrachten und dann die zusätzlichen Paketinformationen angeben.

Uri uri = Uri.parse("smsto:" + smsNumber);
Intent i = new Intent(Intent.ACTION_SENDTO, uri);
i.putExtra("sms_body", smsText);  
i.setPackage("com.whatsapp");  
startActivity(i);

Versuchen Sie zunächst, nur die Absicht ACTION_SEND durch ACTION_SENDTO zu ersetzen. Wenn dies nicht funktioniert, geben Sie den zusätzlichen Code sms_body an. Wenn dies nicht funktioniert, versuchen Sie, den URI zu ändern.

Update Ich habe versucht, das Problem selbst zu lösen und konnte keine Lösung finden. Whatsapp öffnet den Chat-Verlauf, nimmt den Text jedoch nicht und sendet ihn. Es scheint, dass diese Funktionalität einfach nicht implementiert ist. 

60
ChrLipp

Ich habe es getan!

private void openWhatsApp() {
    String smsNumber = "7****"; // E164 format without '+' sign
    Intent sendIntent = new Intent(Intent.ACTION_SEND);
    sendIntent.setType("text/plain");
    sendIntent.putExtra(Intent.EXTRA_TEXT, "This is my text to send.");
    sendIntent.putExtra("jid", smsNumber + "@s.whatsapp.net"); //phone number without "+" prefix
    sendIntent.setPackage("com.whatsapp");
    if (intent.resolveActivity(getActivity().getPackageManager()) == null) {
        Toast.makeText(this, "Error/n" + e.toString(), Toast.LENGTH_SHORT).show();
        return;    
    }
    startActivity(sendIntent);
}
47
BahaR

Ich habe den richtigen Weg gefunden und es ist so einfach, dass Sie nur diesen Artikel lesen müssen: http://howdygeeks.com/send-whatsapp-message-unsaved-number-Android/

Quellcode: phone und message sind beide String

    PackageManager packageManager = context.getPackageManager();
    Intent i = new Intent(Intent.ACTION_VIEW);

    try {
        String url = "https://api.whatsapp.com/send?phone="+ phone +"&text=" + URLEncoder.encode(message, "UTF-8");
        i.setPackage("com.whatsapp");
        i.setData(Uri.parse(url));
        if (i.resolveActivity(packageManager) != null) {
            context.startActivity(i);
        }
    } catch (Exception e){
        e.printStackTrace();
    }

Genießen!

39
Crono

Sie können den WhatsApp-Unterhaltungsbildschirm für den Benutzer öffnen, mit dem Sie kommunizieren möchten:

private void openWhatsApp() {
    String smsNumber = "91XXXXXXXX20";
    boolean isWhatsappInstalled = whatsappInstalledOrNot("com.whatsapp");
    if (isWhatsappInstalled) {

        Intent sendIntent = new Intent("Android.intent.action.MAIN");
        sendIntent.setComponent(new ComponentName("com.whatsapp", "com.whatsapp.Conversation"));
        sendIntent.putExtra("jid", PhoneNumberUtils.stripSeparators(smsNumber) + "@s.whatsapp.net");//phone number without "+" prefix

        startActivity(sendIntent);
    } else {
        Uri uri = Uri.parse("market://details?id=com.whatsapp");
        Intent goToMarket = new Intent(Intent.ACTION_VIEW, uri);
        Toast.makeText(this, "WhatsApp not Installed",
                Toast.LENGTH_SHORT).show();
        startActivity(goToMarket);
    }
}

private boolean whatsappInstalledOrNot(String uri) {
    PackageManager pm = getPackageManager();
    boolean app_installed = false;
    try {
        pm.getPackageInfo(uri, PackageManager.GET_ACTIVITIES);
        app_installed = true;
    } catch (PackageManager.NameNotFoundException e) {
        app_installed = false;
    }
    return app_installed;
}
14
Prakhar1001

Dieser Ansatz funktioniert auch mit der WhatsApp Business App!

Ändern Sie den Paketnamen als sendIntent.setPackage ("com.whatsapp.w4b"); für WhatsApp Business.

Toller Hack Rishabh, vielen Dank, ich habe diese Lösung seit 3 ​​Jahren gesucht.

Wie in der obigen Antwort des Rishabh Maurya beschrieben, habe ich diesen Code implementiert, der sowohl für die Text- als auch die Bildfreigabe auf WhatsApp geeignet ist.

Beachten Sie, dass in beiden Fällen eine WhatsApp-Konversation geöffnet wird (wenn toNumber in der WhatsApp-Kontaktliste von Benutzern vorhanden ist). Der Benutzer muss jedoch auf die Schaltfläche Senden klicken, um die Aktion abzuschließen. Das heißt, es hilft beim Überspringen des Kontaktauswahlschritts.

Für Kurzmitteilungen

String toNumber = "+91 98765 43210"; // contains spaces.
toNumber = toNumber.replace("+", "").replace(" ", "");

Intent sendIntent = new Intent("Android.intent.action.MAIN");
sendIntent.putExtra("jid", toNumber + "@s.whatsapp.net");
sendIntent.putExtra(Intent.EXTRA_TEXT, message);
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.setPackage("com.whatsapp");
sendIntent.setType("text/plain");
startActivity(sendIntent);

Für das Teilen von Bildern

String toNumber = "+91 98765 43210"; // contains spaces.
toNumber = toNumber.replace("+", "").replace(" ", "");

Intent sendIntent = new Intent("Android.intent.action.MAIN");
sendIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(imageFile));
sendIntent.putExtra("jid", toNumber + "@s.whatsapp.net");
sendIntent.putExtra(Intent.EXTRA_TEXT, message);
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.setPackage("com.whatsapp");
sendIntent.setType("image/png");
context.startActivity(sendIntent);

Genießen Sie was!

13
Sahil

Überprüfen Sie meine Antwort: https://stackoverflow.com/a/40285262/5879376

 Intent sendIntent = new Intent("Android.intent.action.MAIN");
 sendIntent.setComponent(new  ComponentName("com.whatsapp","com.whatsapp.Conversation"));
 sendIntent.putExtra("jid", PhoneNumberUtils.stripSeparators("YOUR_PHONE_NUMBER")+"@s.whatsapp.net");//phone number without "+" prefix

 startActivity(sendIntent);
9
Rishabh Maurya

Dabei wird zuerst nach dem angegebenen Kontakt gesucht und anschließend ein Chat-Fenster geöffnet. Wenn WhatsApp nicht installiert ist, kann try-catch block damit umgehen.

 String digits = "\\d+";
    Sring mob_num = 987654321;     
    if (mob_num.matches(digits)) 
            {
        try {
              /linking for whatsapp
              Uri uri = Uri.parse("whatsapp://send?phone=+91" + mob_num);
              Intent i = new Intent(Intent.ACTION_VIEW, uri);
              startActivity(i);
            }
            catch (ActivityNotFoundException e){
                    e.printStackTrace();
                    Toast.makeText(this, "WhatsApp not installed.", Toast.LENGTH_SHORT).show();
            }
        }
5
Ajay Yadav

Dies ist der kürzeste Weg

    String mPhoneNumber = "+972505555555";
    mPhoneNumber = mPhoneNumber.replaceAll("+", "").replaceAll(" ", "").replaceAll("-","");
    String mMessage = "Hello world";
    String mSendToWhatsApp = "https://wa.me/" + mPhoneNumber + "?text="+mMessage;
    startActivity(new Intent(Intent.ACTION_VIEW,
            Uri.parse(
                    mSendToWhatsApp
            )));

Siehe auch die Dokumentation von WhatsApp

2

WhatsApp neue Funktion ist angekommen versuchen Sie diese

    Intent sendIntent = new Intent("Android.intent.action.MAIN");
                        sendIntent.setAction(Intent.ACTION_VIEW);
                        sendIntent.setPackage("com.whatsapp");
                        String url = "https://api.whatsapp.com/send?phone=" + "Phone with international format" + "&text=" + "your message";
                        sendIntent.setData(Uri.parse(url));
                        if(sendIntent.resolveActivity(context.getPackageManager()) != null){
                             startActivity(sendIntent);
                        }

Die für Aktivität hinzugefügte Code-Überprüfung ist verfügbar oder nicht.

diese Dokumentation

2
Bitmap bmp = null;
            bmp = ((BitmapDrawable) tmpimg.getDrawable()).getBitmap();
            Uri bmpUri = null;
            try {
                File file = new File(getBaseContext().getExternalFilesDir(Environment.DIRECTORY_PICTURES), "share_image_" + System.currentTimeMillis() + ".jpg");
                FileOutputStream out = new FileOutputStream(file);
                bmp.compress(Bitmap.CompressFormat.PNG, 90, out);
                out.close();
                bmpUri = Uri.fromFile(file);

            } catch (IOException e) {
                e.printStackTrace();
            }

            String toNumber = "+919999999999"; 
            toNumber = toNumber.replace("+", "").replace(" ", "");
            Intent shareIntent =new Intent("Android.intent.action.MAIN");
            shareIntent.setAction(Intent.ACTION_SEND);
            String ExtraText;
            ExtraText =  "Share Text";
            shareIntent.putExtra(Intent.EXTRA_TEXT, ExtraText);
            shareIntent.putExtra(Intent.EXTRA_STREAM, bmpUri);
            shareIntent.setType("image/jpg");
            shareIntent.setPackage("com.whatsapp");
            shareIntent.putExtra("jid", toNumber + "@s.whatsapp.net");
            shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
            try {

                startActivity(shareIntent);
            } catch (Android.content.ActivityNotFoundException ex) {
                Toast.makeText(getBaseContext(), "Sharing tools have not been installed.", Toast.LENGTH_SHORT).show();
            }

        }
0
Venus Solutions
 private void openWhatsApp() {
       //without '+'
        try {
            Intent sendIntent = new Intent("Android.intent.action.MAIN");

            //sendIntent.setComponent(new ComponentName("com.whatsapp", "com.whatsapp.Conversation"));
            sendIntent.setAction(Intent.ACTION_SEND);
            sendIntent.setType("text/plain");
            sendIntent.putExtra("jid",whatsappId);
            sendIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            sendIntent.setPackage("com.whatsapp");
            startActivity(sendIntent);
        } catch(Exception e) {
            Toast.makeText(this, "Error/n" + e.toString(), Toast.LENGTH_SHORT).show();
            Log.e("Error",e+"")    ;    }
    }
0
swati kapoor

versuchen Sie das, arbeitete für mich! . Verwenden Sie einfach Vorsatz

   Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(whatsappUrl()));
   startActivity(intent);

WhatsApp-URL erstellen. fügen Sie die Landeskennzahl in WhatsApp-Telefonnummer hinzu https://countrycode.org/

public static String whatsappUrl(){

    final String BASE_URL = "https://api.whatsapp.com/";
    final String WHATSAPP_PHONE_NUMBER = "628123232323";    //'62' is country code for Indonesia
    final String PARAM_PHONE_NUMBER = "phone";
    final String PARAM_TEXT = "text";
    final String TEXT_VALUE = "Hello, How are you ?";

    String newUrl = BASE_URL + "send";

    Uri builtUri = Uri.parse(newUrl).buildUpon()
            .appendQueryParameter(PARAM_PHONE_NUMBER, WHATSAPP_PHONE_NUMBER)
            .appendQueryParameter(PARAM_TEXT, TEXT_VALUE)
            .build();

    return buildUrl(builtUri).toString();
}

public static URL buildUrl(Uri myUri){

    URL finalUrl = null;
    try {
        finalUrl = new URL(myUri.toString());
    } catch (MalformedURLException e) {
        e.printStackTrace();

    }
    return finalUrl;
}
0
Taufiq Suryanto

Überprüfen Sie diese Antwort. Hier beginnt Ihre Nummer mit "91 **********".

Intent sendIntent = new Intent("Android.intent.action.MAIN");
sendIntent.setAction(Intent.ACTION_SEND);

sendIntent.setType("text/plain");                    
sendIntent.putExtra(Intent.EXTRA_TEXT, "This is my text to send.");                   sendIntent.putExtra("jid",PhoneNumberUtils.stripSeparators("91**********")                   + "@s.whatsapp.net");                    
sendIntent.setPackage("com.whatsapp");                    
startActivity(sendIntent);
0
chahat jain

Dies sucht zuerst nach dem angegebenen Kontakt und öffnet dann ein Chat-Fenster.

Hinweis: phone_number und str sind Variablen.

Uri mUri = Uri.parse("https://api.whatsapp.com/send?
phone=" + phone_no + "&text=" + str);
Intent mIntent = new Intent("Android.intent.action.VIEW", mUri);
mIntent.setPackage("com.whatsapp");
startActivity(mIntent);
0
Aman Jain
try {
                    String text = "Hello, Admin sir";// Replace with your message.

                    String toNumber = "xxxxxxxxxxxx"; // Replace with mobile phone number without +Sign or leading zeros, but with country code
                    //Suppose your country is India and your phone number is “xxxxxxxxxx”, then you need to send “91xxxxxxxxxx”.


                    Intent intent = new Intent(Intent.ACTION_VIEW);
                    intent.setData(Uri.parse("http://api.whatsapp.com/send?phone=" + toNumber + "&text=" + text));
                    context.startActivity(intent);
                } catch (Exception e) {
                    e.printStackTrace();
                    context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://play.google.com/store/apps/details?id=com.whatsapp")));

                }
0
Shekhar Saini

Anstatt sich darauf einzulassen, den Inhalt für die jeweilige App freizugeben.

Der folgende Code ist ein allgemeiner Code, der mit "ShareCompact" eine einfache Lösung bietet, die Android öffnet die Liste der Apps, die das Teilen des Inhalts unterstützen.

Hier teile ich die Daten von MIME-Typ Text/Plain.

    String mimeType = "text/plain"
    String Message  = "Hi How are you doing?"

    ShareCompact.IntentBuilder
                .from(this)
                .setType(mimeType)
                .setText(Message)
                .startChooser()
 public void shareWhatsup(String text) {


        String smsNumber = "91+" + "9879098469"; // E164 format without '+' sign

        Intent intent = new Intent(Intent.ACTION_VIEW);

        try {
            String url = "https://api.whatsapp.com/send?phone=" + smsNumber + "&text=" + URLEncoder.encode(text, "UTF-8");
            intent.setPackage("com.whatsapp");
            intent.setData(Uri.parse(url));
        } catch (Exception e) {
            e.printStackTrace();
        }

        //    intent.setAction(Intent.ACTION_SEND);
        //   intent.setType("image/jpeg");
        //   intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, imageUriArray);
        startActivity(intent);


    }
0
CHirag RAmi
private void sendToContactUs() {
     String phoneNo="+918000874386";

    Intent sendIntent = new Intent("Android.intent.action.MAIN");
    sendIntent.setAction(Intent.ACTION_VIEW);
    sendIntent.setPackage("com.whatsapp");
    String url = "https://api.whatsapp.com/send?phone=" + phoneNo + "&text=" + "Unique Code - "+CommonUtils.getMacAddress();
    sendIntent.setDataAndType(Uri.parse(url),"text/plain");


    if(sendIntent.resolveActivity(getPackageManager()) != null){
        startActivity(sendIntent);
    }else{
        Toast.makeText(getApplicationContext(),"Please Install Whatsapp Massnger App in your Devices",Toast.LENGTH_LONG).show();
    }
}
0