web-dev-qa-db-ja.com

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があります。

12
Bogdan M.

残念ながら、Androidにはこの機能が実装されていませんでした(将来的には実装される可能性があります)。

私はすでに 同様の質問 を尋ねましたが、結果はありません。 whatsappは、コードに表示されているようないくつかのインテントに反応しますが、送信したテキストを使用しないだけです。これは安全上の理由によると思います。Playストアのwhatsapp-spammerアプリの数を想像してみてください... iOSでどのように(そしてなぜ)実装されているのかわかりません...

あなたの解決策に近づく2つの選択肢

  1. テキストを送信して チューザーを作成 (入力する必要はありません。whatsappを選択するだけです)
  2. 連絡先を開く (テキストを入力する必要がありますが、連絡先を選択する必要はありません)
7
CommonGuy

2017年に更新

これに基づく Whatsapp FAQ

このURLを使用しているim

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をあなたの番号に置き換えてくださいこれは私にはうまくいきます

7

やった!

private void openWhatsApp() {
    String smsNumber = "7****"; //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(Intent.EXTRA_TEXT, "This is my text to send.");
        sendIntent.putExtra("jid", smsNumber + "@s.whatsapp.net"); //phone number without "+" prefix
        sendIntent.setPackage("com.whatsapp");
        startActivity(sendIntent);
    } catch(Exception e) {
        Toast.makeText(this, "Error/n" + e.toString(), Toast.LENGTH_SHORT).show();
    }
}
5
BahaR

次のソリューションを使用して、画像とテキストを送信してみてください。

Typeを「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マニフェスト、

通常の共有インテントは、 "[〜#〜] send [〜#〜]"を使用します。これは、特定の連絡先に送信することを許可せず、連絡先ピッカーを必要とします。

特定の連絡先は会話クラスによって取得され、「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 and Conversationクラスの逆コンパイラーを使用すると、電話番号の追加のKey-Valueは "jid"であることがわかりました。

1
Bhavita Lalwani

方法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);
}
1
Pranav V R

以下のコードを使用して、What'sAppで会話を開きます

  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();
            }

注:番号には常に「+」を付けずに国コードを入力してください。

1
Kundan Singh

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();
   }  
}
0
Varun

このコードは私のために働いています。ここで、jidは「+」のない電話番号であり、これは[〜#〜]変更済み[〜# 〜]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();
            }
        }
    }
0
3llomi
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));
    }

}
0
Sahil Bansal