[Android] 프로그래밍 방식으로 특정 연락처에 텍스트 보내기 (whatsapp)


Answers

나는 대답은 당신의 질문과이 답변의 혼합이다 생각 : https://stackoverflow.com/a/15931345/734687 그래서 다음 코드를 시도 할 것이다 :

  1. ACTION_VIEW를 ACTION_SENDTO (으)로 변경하십시오.
  2. 당신이했던 것처럼 우리를 설정하십시오.
  3. 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);

Whatsapp 매니페스트를 살펴본 결과 ACTION_SEND가 ContactPicker 활동에 등록되어있어 도움이되지 않는다는 것을 알았습니다. 그러나 ACTION_SENDTO는 com.whatsapp.Conversation 활동에 등록되어 사용자의 문제에 더 적절하게 들립니다.

Whatsapp는 SMS 전송 대신 사용할 수 있으므로 SMS처럼 작동해야합니다. 원하는 애플리케이션을 지정하지 않으면 ( setPackage 를 통해) Android는 애플리케이션 선택기를 표시합니다. 따라서 인 텐트를 통해 SMS를 보내는 코드를 살펴보고 추가 패키지 정보를 제공해야합니다.

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

먼저 ACTION_SEND 의도를 ACTION_SEND 로 바꾸십시오. 이 추가 sms_body 추가 제공하는 것보다 작동하지 않는 경우. 이것이 uri를 변경하려고 시도하는 것보다 효과가 없다면.

업데이트이 문제를 직접 풀려고했으나 해결 방법을 찾지 못했습니다. Whatsapp이 채팅 기록을 열어도 텍스트를 가져 와서 보내지 않습니다. 이 기능은 구현되지 않은 것 같습니다.

Question

특정 whatsapp 연락처에 텍스트를 보낼 수있는 방법을 알고 싶었습니다. 특정 연락처를 볼 수있는 코드를 발견했지만 데이터를 보내지 않았습니다.

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

이것은 whatsapp-contact를 보는 데는 잘 작동하지만, 이제 어떻게 텍스트를 추가 할 수 있습니까? 또는 Whatsapp 개발자가 그런 종류의 API를 구현하지 않았습니까?




이렇게하면 먼저 지정된 연락처를 검색 한 다음 채팅 창을 엽니 다. 그리고 WhatsApp가 설치되어 있지 않으면 try-catch 블록이이를 처리합니다.

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



이 대답을 확인하십시오. 여기서 번호는 "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);



이 접근 방식은 WhatsApp Business 앱에서도 작동합니다!

패키지 이름을 sendIntent.setPackage ( "com.whatsapp.w4b");로 변경하십시오. WhatsApp 비즈니스 용.

위대한 해킹 Rishabh, 고마워, 지난 3 년이 솔루션을 찾고 있었어.

위의 Rishabh Maurya의 대답에 따라 WhatsApp에서 텍스트 및 이미지 공유에 모두 잘 작동하는이 코드를 구현했습니다.

두 경우 모두 whatsapp 대화를 엽니 다 (toNumber가 사용자 whatsapp 연락처 목록에있는 경우).하지만 사용자는 보내기 버튼을 클릭하여 작업을 완료해야합니다. 즉, 연락처 선택 단계를 건너 뛰는 데 도움이됩니다.

문자 메시지

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

이미지 공유

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

WhatsApping 즐기십시오!




이거 해봐, 나를 위해 일했다! . 의도 만 사용하십시오.

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

Whatsapp URL을 작성하십시오. whatsapp 전화 번호에 국가 코드 추가 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;
}



의사 소통하려는 특정 사용자의 WhatsApp 대화 화면을 열 수 있습니다.

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



이 작업을 수행하는 올바른 방법을 찾았 으며이 문서를 읽은 후 간단합니다. http://howdygeeks.com/send-whatsapp-message-unsaved-number-android/

전화와 메시지는 모두 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();
    }

즐겨!




 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+"")    ;    }
    }



나는 해냈다!

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



    String toNumber = "+92307 8401217"; // 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);



내 대답을 확인하십시오 : https://.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);



Whatsapp 새로운 기능이 도착했습니다.

                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));
                startActivity(sendIntent);

크레딧

이 문서 보기




이렇게하면 먼저 지정된 연락처를 검색 한 다음 채팅 창을 엽니 다.

참고 : phone_numberstr 은 변수입니다.

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