如何在Android的Intent帮助下通过Whatsapp从自己的应用程序发送文本消息和图像?

时间:2014-10-29 10:16:54

标签: java android whatsapp

我无法通过whatsapp发送短信和图片。要么,我能够  在没有任何消息的情况下启动该特定的联系人聊天线程,或者我只能发送消息但不能打开该特定的联系人聊天线程。

我已关注以下链接: http://www.whatsapp.com/faq/en/android/28000012

Sending message through WhatsApp

Send Whatsapp message to specific contact

但没有获得成功:(

任何人都可以帮助我。 如何在Android的Intent帮助下从自己的应用程序通过whatsapp发送文本消息和图像?

3 个答案:

答案 0 :(得分:3)

尝试使用以下解决方案

            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清单片段,

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

特定联系人由对话课程选择并使用" SEND_TO "动作,但它使用短信体,不能占用图像和其他附件。

 <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类的反编译器,发现电话号码的额外键值为&#34; jid &#34;。

答案 1 :(得分:2)

早些时候,这是不可能的,但自5月15日更新以来。结帐:

try{
    PackageInfo info = pm.getPackageInfo("com.whatsapp", PackageManager.GET_META_DATA);
    Intent sendIntent = new Intent();
    sendIntent.setAction(Intent.ACTION_SEND);
    String sendString = "some random string";
    sendIntent.setPackage("com.whatsapp");
    sendIntent.putExtra(Intent.EXTRA_TEXT, sendString);
    sendIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(file));
    sendIntent.setType("image/*");
    startActivity(sendIntent);
} catch (Exception e){
    // some code
}

这里的PackageInfo行只是检查是否安装了WhatsApp。如果没有,它会抛出异常。如果你想做一个普通的共享(和setPackage),你可以忽略它。

另外。重要的是,您要共享的媒体必须在本地存储上公开。

<强>更新

发送给特定联系人

Uri uri = Uri.parse("smsto:" + "<CONTACT_NUMBER>");
Intent i = new Intent(Intent.ACTION_SENDTO, uri);
i.putExtra(Intent.EXTRA_TEXT, whatsAppMessage);

现在允许行动发送至

答案 2 :(得分:0)

我在这里看到许多类似的问题,答案是&#34;是的,这是可能的&#34;。您可以在不打开Whatsapp的情况下直接从应用程序向Whatsapp发送消息,这可以通过使用Wear Api和RemoteInput方法来实现。

这是一项有点复杂的任务,所以作为参考,您可以使用this code。它与您正在搜索的内容相同。