在Whatsapp中打开对话并填充文本

时间:2014-06-04 09:02:17

标签: android whatsapp

我想打开WhatsApp到特定的对话,并用一些字符串填充文本字段。

我拥有的代码,我设法与联系人打开对话:

private void openConversationWithWhatsapp(String e164PhoneNumber){
    String whatsappId = e164PhoneNumber+"@s.whatsapp.net";
    Uri uri = Uri.parse("smsto:" + whatsappId);
    Intent intent = new Intent(Intent.ACTION_SENDTO, uri);
    intent.setPackage("com.whatsapp");

    intent.putExtra(Intent.EXTRA_TEXT, "text");
    intent.putExtra(Intent.EXTRA_SUBJECT, "subject");
    intent.putExtra(Intent.EXTRA_TITLE, "title");
    intent.putExtra(Intent.EXTRA_EMAIL, "email");
    intent.putExtra("sms_body", "The text goes here");
    intent.putExtra("text","asd");
    intent.putExtra("body","body");
    intent.putExtra("subject","subjhect");

    startActivity(intent);
}

但是文本框中没有填充内容。我试图查看AndroidManifest.xml文件,找到有关其对话活动的以下信息:

<activity android:theme="@style/Theme.App.CondensedActionBar" android:name="com.whatsapp.Conversation" android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" android:windowSoftInputMode="stateUnchanged">
    <intent-filter>
        <action android:name="android.intent.action.SENDTO" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <data android:scheme="sms" />
        <data android:scheme="smsto" />
    </intent-filter>
</activity>

有人知道额外使用吗? 他们故意阻止这个吗? 我在他们的FAQ页面中看到了他们的iOS API。

10 个答案:

答案 0 :(得分:7)

可悲的是,他们没有在Android 上实现此功能(也许他们将来会这样做)。

我已经问过a similar question,但没有结果。虽然whatsapp会对您在代码中显示的某些意图做出反应,但他们根本不会使用您发送的文本。我想这是出于安全原因,想象一下游戏商店中whatsapp-spammer应用程序的数量......我不知道它在iOS中实现的方式(以及为什么)......

接近您的解决方案的两个替代方案

  1. 发送文字和create a chooser(无需输入,只需选择whatsapp)
  2. open the contact(需要输入文字,但不需要选择联系人)

答案 1 :(得分:5)

我做到了!

quickCheck $ forAll (myTest 10) $ \x -> ....

答案 2 :(得分:5)

2017年更新

基于此Whatsapp FAQ

即时通讯使用此网址

https://api.whatsapp.com/send?phone=62xxxxxxx&text=Hello,%20from%20my%20Apps

其中62是印度尼西亚的拨号代码

然后我使用这样的意图(即时通讯使用kotlin)

val uri = Uri.parse("https://api.whatsapp.com/send?phone=62xxxxxxx&text=Hello,%20from%20my%20Apps")
        val intent = Intent(Intent.ACTION_VIEW, uri)
        startActivity(intent)

用您的号码替换62xxxxx 这项工作对我很好

答案 3 :(得分:1)

尝试使用以下解决方案发送图片和文字。

您可以将TypeType设置为“text”,并删除extra_stream以仅将其用于发送文本。

            Intent sendIntent = new Intent("android.intent.action.SEND");
            File f=new File("path to the file");
            Uri uri = Uri.fromFile(f);
            sendIntent.setComponent(new ComponentName("com.whatsapp","com.whatsapp.ContactPicker"));
            sendIntent.setType("image");
            sendIntent.putExtra(Intent.EXTRA_STREAM,uri);
            sendIntent.putExtra("jid", PhoneNumberUtils.stripSeparators("919xxxxxxxxx")+"@s.whatsapp.net");
            sendIntent.putExtra(Intent.EXTRA_TEXT,"sample text you want to send along with the image");
            startActivity(sendIntent);

关于寻找解决方案的过程的额外信息:

在对WhatsApp进行逆向工程后,我遇到了以下Android清单片段,

正常分享意图,使用“发送”,不允许您发送给特定联系人并需要联系人选择。

特定联系人由Conversation类提取并使用“ SEND_TO ”操作,但它使用sms正文,无法占用图像和其他附件。

 <activity android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|screenSize|smallestScreenSize|uiMode" android:name="com.whatsapp.Conversation" android:theme="@style/Theme.App.CondensedActionBar" android:windowSoftInputMode="stateUnchanged">
            <intent-filter>
                <action android:name="android.intent.action.SENDTO"/>
                <category android:name="android.intent.category.DEFAULT"/>
                <category android:name="android.intent.category.BROWSABLE"/>
                <data android:scheme="sms"/>
                <data android:scheme="smsto"/>
            </intent-filter>
        </activity>

进一步挖掘,我遇到了这个,

 <activity android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|screenSize|smallestScreenSize|uiMode" android:name="com.whatsapp.ContactPicker" android:theme="@style/Theme.App.NoActionBar">
            <intent-filter>
                <action android:name="android.intent.action.PICK"/>
                <category android:name="android.intent.category.DEFAULT"/>
                <category android:name="com.whatsapp"/>
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.SEND"/>
                <category android:name="android.intent.category.DEFAULT"/>
                <data android:mimeType="audio/*"/>
                <data android:mimeType="video/*"/>
                <data android:mimeType="image/*"/>
                <data android:mimeType="text/plain"/>
                <data android:mimeType="text/x-vcard"/>
                <data android:mimeType="application/pdf"/>
                <data android:mimeType="application/vnd.openxmlformats-officedocument.wordprocessingml.document"/>
                <data android:mimeType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"/>
                <data android:mimeType="application/vnd.openxmlformats-officedocument.presentationml.presentation"/>
                <data android:mimeType="application/msword"/>
                <data android:mimeType="application/vnd.ms-excel"/>
                <data android:mimeType="application/vnd.ms-powerpoint"/>
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.SEND_MULTIPLE"/>
                <category android:name="android.intent.category.DEFAULT"/>
                <data android:mimeType="audio/*"/>
                <data android:mimeType="video/*"/>
                <data android:mimeType="image/*"/>
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.VIEW"/>
                <category android:name="android.intent.category.DEFAULT"/>
                <category android:name="android.intent.category.BROWSABLE"/>
                <data android:host="send" android:scheme="whatsapp"/>
            </intent-filter>
            <meta-data android:name="android.service.chooser.chooser_target_service" android:value=".ContactChooserTargetService"/>
        </activity>

最后使用针对ContactPicker和Conversation类的反编译器,发现电话号码的额外键值为“ jid ”。

答案 4 :(得分:0)

您可以将以下代码段用于WhatsApp:

public void onClickWhatsApp(View view) {

    PackageManager pm=getPackageManager();
    try {

        Intent waIntent = new Intent(Intent.ACTION_SEND);
        waIntent.setType("text/plain");
        String text = "YOUR TEXT HERE";

        PackageInfo info=pm.getPackageInfo("com.whatsapp", PackageManager.GET_META_DATA);
        //Check if package exists or not. If not then code 
        //in catch block will be called
        waIntent.setPackage("com.whatsapp");

        waIntent.putExtra(Intent.EXTRA_TEXT, text);
        startActivity(Intent.createChooser(waIntent, "Share with"));

   } catch (NameNotFoundException e) {
        Toast.makeText(this, "WhatsApp not Installed", Toast.LENGTH_SHORT)
                .show();
   }  
}

答案 5 :(得分:0)

这段代码对我有用。其中 jid 是没有'+'的电话号码 这支持 MODIFIED 版本的 WhatsApp ,如WhatsApp +等。 只传递 WhatsApp软件包名称。 您可以在MyApp

中找到完整的代码
   private void openChat(String text, String packageName) {
        if (text.trim().isEmpty())
            Toast.makeText(context, "Please Enter Number", Toast.LENGTH_SHORT).show();
        else {
            try {
                String smsNumber = Util.getNumber(text) + "@s.whatsapp.net";
                Uri uri = Uri.parse("smsto:" + smsNumber);
                Intent i = new Intent(Intent.ACTION_SENDTO, uri);
                i.putExtra("jid", smsNumber);
                i.setPackage(packageName);
                context.startActivity(i);
            } catch (ActivityNotFoundException e) {
                Toast.makeText(context, "Make Sure you have WhatsApp App Installed on Your Device", Toast.LENGTH_SHORT).show();
            }
        }
    }

答案 6 :(得分:0)

使用以下代码在应用程序中打开对话

  Intent intent = new Intent(Intent.ACTION_VIEW);
            intent.setPackage("com.whatsapp");
            intent.setData(Uri.parse(String.format("https://api.whatsapp.com/send?phone=%s", "91xxxxxxxxxx")));
            if (getPackageManager().resolveActivity(intent, 0) != null) {
                startActivity(intent);
            } else {
                Toast.makeText(this, "Please install whatsApp", Toast.LENGTH_SHORT).show();
            }

注意:请始终输入国家/地区代码,数字后不要带“ +”。

答案 7 :(得分:0)

方法1-使用android组件名称

 public static void openWhatsAppConversation(Context context, String number, String message) {

    number = number.replace(" ", "").replace("+", "");

    Intent sendIntent = new Intent("android.intent.action.MAIN");

    sendIntent.setType("text/plain");
    sendIntent.putExtra(Intent.EXTRA_TEXT, message);
    sendIntent.setComponent(new ComponentName("com.whatsapp", "com.whatsapp.Conversation"));
    sendIntent.putExtra("jid", PhoneNumberUtils.stripSeparators(number) + "@s.whatsapp.net");

    context.startActivity(sendIntent);
}

方法2-使用whatsapp api uri

public static void openWhatsAppConversationUsingUri(Context context, String numberWithCountryCode, String message) {

    Uri uri = Uri.parse("https://api.whatsapp.com/send?phone=" + numberWithCountryCode + "&text=" + message);

    Intent sendIntent = new Intent(Intent.ACTION_VIEW, uri);

    context.startActivity(sendIntent);
}

答案 8 :(得分:0)

public void sendMessageOnWhatsApp(String number, String text, Context context){
    String url = "https://api.whatsapp.com/send?phone="+number+"&text="+text;
    Intent whatsappIntent = new Intent(Intent.ACTION_VIEW,Uri.parse(url));
    whatsappIntent.setPackage("com.whatsapp");
    whatsappIntent.setFlags(FLAG_ACTIVITY_NEW_TASK);
    try {
        context.startActivity(whatsappIntent);
    } catch (android.content.ActivityNotFoundException ex) {
        Toaster.showMessageShort(context.getString(R.string.no_whatsapp_msg));
    }

}

答案 9 :(得分:0)

尝试{ PackageManager packageManager = getApplicationContext()。getPackageManager(); 字符串url =“ https://api.whatsapp.com/send?phone=” +数字+“&text =” + URLEncoder.encode(消息,“ UTF-8”); 意图whatappIntent =新的意图(Intent.ACTION_VIEW); whatappIntent.setPackage(“ com.whatsapp”); whatappIntent.setData(Uri.parse(url)); whatappIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 如果(whatappIntent.resolveActivity(packageManager)!= null){ startActivity(whatappIntent); }其他{ Log.d(“ msg”,“未安装WhatsApp”) } } catch(UnsupportedEncodingException e){ e.printStackTrace(); }