Vì tôi tìm thấy một số bài đăng cũ hơn, nói rằng whatsapp không hỗ trợ điều này, tôi đã tự hỏi liệu có điều gì đó đã thay đổi và liệu có cách nào để mở 'trò chuyện' whatsapp với một số mà tôi đang gửi thông qua một ý định không?
Vì tôi tìm thấy một số bài đăng cũ hơn, nói rằng whatsapp không hỗ trợ điều này, tôi đã tự hỏi liệu có điều gì đó đã thay đổi và liệu có cách nào để mở 'trò chuyện' whatsapp với một số mà tôi đang gửi thông qua một ý định không?
Câu trả lời:
CẬP NHẬT Vui lòng tham khảo https://faq.whatsapp.com/en/android/26000030/?category=5245251
Tính năng Nhấp để trò chuyện của WhatsApp cho phép bạn bắt đầu trò chuyện với ai đó mà không cần lưu số điện thoại của họ trong danh bạ điện thoại của bạn. Miễn là bạn biết số điện thoại của người này, bạn có thể tạo một liên kết cho phép bạn bắt đầu trò chuyện với họ.
Sử dụng: https://wa.me/15551234567
Không sử dụng: https://wa.me/+001-(555)1234567
Ví dụ: https://wa.me/15551234567?text=I 'm% 20interested% 20in% 20your% 20car% 20for% 20sale
Câu trả lời ban đầu Đây là giải pháp
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();
}
}
Với mã này, bạn có thể mở cuộc trò chuyện whatsapp với số nhất định.
void openWhatsappContact(String number) {
Uri uri = Uri.parse("smsto:" + number);
Intent i = new Intent(Intent.ACTION_SENDTO, uri);
i.setPackage("com.whatsapp");
startActivity(Intent.createChooser(i, ""));
}
startActivity(Intent.createChooser(i, ""));
sử dụng startActivity(i);
cho trò chuyện số được cung cấp trực tiếp mở. 1. Đã test trên Samsung J7 prime thì nó hoạt động. 2. số không có trong danh sách liên lạc của tôi cũng như trong danh sách trò chuyện của tôi. 3. nếu số không sử dụng whatsapp, một hộp thoại xuất hiện hỏi tôi rằng tôi có muốn mời liên hệ đó trên whatsapp không. Tôi không nghĩ đó là giải pháp tốt nhất nếu bạn muốn cung cấp hỗ trợ liên hệ whatsapp cho người dùng ứng dụng của mình.
Tôi đã tìm thấy giải pháp sau, trước tiên bạn sẽ cần id whatsapp:
Đối sánh với các báo cáo từ một số chủ đề khác ở đây và trong các diễn đàn khác, tên đăng nhập mà tôi tìm thấy là một số loại: mã vùng quốc tế không có số 0 hoặc + ở đầu + số điện thoại không có số 0 + @ s.whatsapp.net đầu tiên
Ví dụ: nếu bạn sống ở Hà Lan và có số điện thoại 0612325032, nó sẽ là 31612325023@s.whatsapp.net -> +31 cho Hà Lan không có số 0 hoặc + và số điện thoại không có số 0.
public void sendWhatsAppMessageTo(String whatsappid) {
Cursor c = getSherlockActivity().getContentResolver().query(ContactsContract.Data.CONTENT_URI,
new String[] { ContactsContract.Contacts.Data._ID }, ContactsContract.Data.DATA1 + "=?",
new String[] { whatsappid }, null);
c.moveToFirst();
Intent whatsapp = new Intent(Intent.ACTION_VIEW, Uri.parse("content://com.android.contacts/data/" + c.getString(0)));
c.close();
if (whatsapp != null) {
startActivity(whatsapp);
} else {
Toast.makeText(this, "WhatsApp not Installed", Toast.LENGTH_SHORT)
.show();
//download for example after dialog
Uri uri = Uri.parse("market://details?id=com.whatsapp");
Intent goToMarket = new Intent(Intent.ACTION_VIEW, uri);
}
}
if (whatsapp != null)
như 2 dòng trên bạn đã làm Intent whatsapp = new Intent(...)
.
<uses-permission android:name="android.permission.READ_CONTACTS" />
quyền vàoAndroidManifest.xml
Điều này sẽ hoạt động cho dù Whatsapp đã được cài đặt hay chưa.
boolean isWhatsappInstalled = whatsappInstalledOrNot("com.whatsapp");
if (isWhatsappInstalled) {
Uri uri = Uri.parse("smsto:" + "98*********7")
Intent sendIntent = new Intent(Intent.ACTION_SENDTO, uri);
sendIntent.putExtra(Intent.EXTRA_TEXT, "Hai Good Morning");
sendIntent.setPackage("com.whatsapp");
startActivity(sendIntent);
} else {
Toast.makeText(this, "WhatsApp not Installed", Toast.LENGTH_SHORT).show();
Uri uri = Uri.parse("market://details?id=com.whatsapp");
Intent goToMarket = new Intent(Intent.ACTION_VIEW, uri);
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;
}
Giải pháp đơn giản, hãy thử điều này.
String phoneNumberWithCountryCode = "+62820000000";
String message = "Hallo";
startActivity(
new Intent(Intent.ACTION_VIEW,
Uri.parse(
String.format("https://api.whatsapp.com/send?phone=%s&text=%s", phoneNumberWithCountryCode, message)
)
)
);
Đã thử nghiệm trên Marshmallow S5 và nó hoạt động!
Uri uri = Uri.parse("smsto:" + "phone number with country code");
Intent sendIntent = new Intent(Intent.ACTION_SENDTO, uri);
sendIntent.setPackage("com.whatsapp");
startActivity(sendIntent);
Thao tác này sẽ mở một cuộc trò chuyện trực tiếp với một người, nếu whatsapp không được cài đặt, điều này sẽ ném ra ngoại lệ , nếu số điện thoại không được biết đến với whatsapp, họ sẽ đề nghị gửi lời mời qua sms hoặc tin nhắn sms đơn giản
Mã sau được ứng dụng Google Hiện hành sử dụng và sẽ KHÔNG hoạt động với bất kỳ ứng dụng nào khác.
Tôi viết bài này vì nó khiến tôi tức giận, rằng WhatsApp không cho phép bất kỳ nhà phát triển nào khác gửi tin nhắn trực tiếp ngoại trừ Google.
Và tôi muốn các nhà phát triển tự do khác biết rằng kiểu hợp tác này đang diễn ra, trong khi Google tiếp tục nói về việc "mở cho mọi người" và WhatsApp nói rằng họ không muốn cung cấp bất kỳ quyền truy cập nào cho các nhà phát triển.
Gần đây WhatsApp đã thêm một Intent đặc biệt cho Google Hiện hành, trông giống như sau:
Intent intent = new Intent("com.google.android.voicesearch.SEND_MESSAGE_TO_CONTACTS");
intent.setPackage("com.whatsapp");
intent.setComponent(new ComponentName("com.whatsapp", "com.whatsapp.VoiceMessagingActivity"));
intent.putExtra("com.google.android.voicesearch.extra.RECIPIENT_CONTACT_CHAT_ID", number);
intent.putExtra("android.intent.extra.TEXT", text);
intent.putExtra("search_action_token", ?????);
Tôi cũng có thể phát hiện ra rằng "search_action_token" là PendingIntent có chứa IBinder-Object, được gửi trở lại Google App và được kiểm tra, nếu nó được tạo bởi Google Hiện hành.
Nếu không, WhatsApp sẽ không chấp nhận tin nhắn.
Hiện tại, API chính thức duy nhất mà bạn có thể GET
yêu cầu:
https://api.whatsapp.com/send?phone=919773207706&text=Hello
Dù sao, có một chương trình API bí mật đã được chạy bởi WhatsApp
//NOTE : please use with country code first 2digits without plus signed
try {
String mobile = "911234567890";
String msg = "Its Working";
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://api.whatsapp.com/send?phone=" + mobile + "&text=" + msg)));
}catch (Exception e){
//whatsapp app not install
}
Điều này phù hợp với tôi:
PackageManager pm = context.getPackageManager();
try {
pm.getPackageInfo("com.whatsapp", PackageManager.GET_ACTIVITIES);
Intent intent = new Intent();
intent.setComponent(new ComponentName(packageName,
ri.activityInfo.name));
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_TEXT, element);
} catch (NameNotFoundException e) {
ToastHelper.MakeShortText("Whatsapp have not been installed.");
}
Sử dụng URL trực tiếp của whatsapp
String url = "https://api.whatsapp.com/send?phone="+number;
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url));
startActivity(i);
điều này dài dòng nhưng rất hiệu quả. thưởng thức mã của bạn :)
//method used to show IMs
private void show_custom_chooser(String value) {
List<ResolveInfo> list = null;
final Intent email = new Intent(Intent.ACTION_SEND);
email.setData(Uri.parse("sms:"));
email.putExtra(Intent.EXTRA_TEXT, "" + value);
email.setType("text/plain"); // vnd.android-dir/mms-sms
WindowManager.LayoutParams WMLP = dialogCustomChooser.getWindow()
.getAttributes();
WMLP.gravity = Gravity.CENTER;
dialogCustomChooser.getWindow().setAttributes(WMLP);
dialogCustomChooser.getWindow().setBackgroundDrawable(
new ColorDrawable(android.graphics.Color.TRANSPARENT));
dialogCustomChooser.setCanceledOnTouchOutside(true);
dialogCustomChooser.setContentView(R.layout.about_dialog);
dialogCustomChooser.setCancelable(true);
ListView lvOfIms = (ListView) dialogCustomChooser
.findViewById(R.id.listView1);
PackageManager pm = getPackageManager();
List<ResolveInfo> launchables = pm.queryIntentActivities(email, 0);
// ////////////new
list = new ArrayList<ResolveInfo>();
for (int i = 0; i < launchables.size(); i++) {
String string = launchables.get(i).toString();
Log.d("heh", string);
//check only messangers
if (string.contains("whatsapp")) {
list.add(launchables.get(i));
}
}
Collections.sort(list, new ResolveInfo.DisplayNameComparator(pm));
int size = launchables.size();
adapter = new AppAdapter(pm, list, MainActivity.this);
lvOfIms.setAdapter(adapter);
lvOfIms.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1,
int position, long arg3) {
ResolveInfo launchable = adapter.getItem(position);
ActivityInfo activity = launchable.activityInfo;
ComponentName name = new ComponentName(
activity.applicationInfo.packageName, activity.name);
email.addCategory(Intent.CATEGORY_LAUNCHER);
email.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
| Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
email.setComponent(name);
startActivity(email);
dialogCustomChooser.dismiss();
}
});
dialogCustomChooser.show();
}
Tôi thực sự đến muộn nhưng tôi tin rằng ngày nay chúng ta có các giải pháp ngắn hơn và tốt hơn để gửi tin nhắn qua WhatsApp.
Bạn có thể sử dụng tùy chọn sau để gọi bộ chọn hệ thống, sau đó chọn ứng dụng bạn sẽ sử dụng để chia sẻ bất cứ thứ gì bạn muốn.
Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_TEXT, "This is my text to send.");
sendIntent.setType("text/plain");
startActivity(sendIntent);
Nếu bạn thực sự cần gửi qua WhatsApp, tất cả những gì bạn cần làm là như sau (Bạn sẽ bỏ qua bộ chọn hệ thống)
Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_TEXT, "This is my text to send.");
sendIntent.setType("text/plain");
// Put this line here
sendIntent.setPackage("com.whatsapp");
//
startActivity(sendIntent);
Nếu bạn cần thêm thông tin, bạn có thể tìm thấy nó ở đây: Câu hỏi thường gặp về WhatsApp
Như tài liệu cho biết bạn chỉ có thể sử dụng một URL như:
https://wa.me/15551234567
Trong đó phân đoạn cuối cùng là số ở Định dạng E164
Uri uri = Uri.parse("https://wa.me/15551234567");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
private fun sendWhatsappMessage(phoneNumber:String, text:String) {
val url = if (Intent().setPackage("com.whatsapp").resolveActivity(packageManager) != null) {
"whatsapp://send?text=Hello&phone=$phoneNumber"
} else {
"https://api.whatsapp.com/send?phone=$phoneNumber&text=$text"
}
val browserIntent = Intent(Intent.ACTION_VIEW, Uri.parse(url))
startActivity(browserIntent)
}
Đây là một cách dễ dàng hơn nhiều để đạt được điều này. Mã này kiểm tra xem whatsapp đã được cài đặt trên thiết bị hay chưa. Nếu nó được cài đặt, nó sẽ bỏ qua bộ chọn hệ thống và đi đến địa chỉ liên hệ trên whatsapp và nhập trước văn bản trong cuộc trò chuyện. Nếu chưa được cài đặt, nó sẽ mở liên kết whatsapp trên trình duyệt web của bạn.
Bạn sẽ muốn sử dụng URL ở định dạng sau ...
https://api.whatsapp.com/send?text=text
Sau đó, bạn có thể yêu cầu nó gửi bất kỳ văn bản nào bạn muốn. Bạn cũng có tùy chọn để chỉ định số điện thoại ...
https://api.whatsapp.com/send?text=text&phone=1234
Điều bạn KHÔNG THỂ LÀM là sử dụng những thứ sau:
https://wa.me/send?text=text
Bạn sẽ nhận được...
Chúng tôi không thể tìm thấy trang bạn đang tìm kiếm
wa.me
Tuy nhiên, sẽ hoạt động nếu bạn cung cấp cả số điện thoại và văn bản. Tuy nhiên, phần lớn, nếu bạn đang cố tạo liên kết chia sẻ, bạn thực sự không muốn chỉ ra số điện thoại, vì bạn muốn người dùng chọn một người nào đó. Trong trường hợp đó, nếu bạn không cung cấp số và sử dụng wa.me
làm URL, tất cả các liên kết chia sẻ của bạn sẽ không thành công. Hãy sử dụng app.whatsapp.com
.
Kiểm tra mã này,
public void share(String subject,String text) {
final Intent intent = new Intent(Intent.ACTION_SEND);
String score=1000;
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_SUBJECT, score);
intent.putExtra(Intent.EXTRA_TEXT, text);
startActivity(Intent.createChooser(intent, getString(R.string.share)));
}
Điều này phù hợp với tôi:
public static void shareWhatsApp(Activity appActivity, String texto) {
Intent sendIntent = new Intent(Intent.ACTION_SEND);
sendIntent.setType("text/plain");
sendIntent.putExtra(android.content.Intent.EXTRA_TEXT, texto);
PackageManager pm = appActivity.getApplicationContext().getPackageManager();
final List<ResolveInfo> matches = pm.queryIntentActivities(sendIntent, 0);
boolean temWhatsApp = false;
for (final ResolveInfo info : matches) {
if (info.activityInfo.packageName.startsWith("com.whatsapp")) {
final ComponentName name = new ComponentName(info.activityInfo.applicationInfo.packageName, info.activityInfo.name);
sendIntent.addCategory(Intent.CATEGORY_LAUNCHER);
sendIntent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_ACTIVITY_NEW_TASK);
sendIntent.setComponent(name);
temWhatsApp = true;
break;
}
}
if(temWhatsApp) {
//abre whatsapp
appActivity.startActivity(sendIntent);
} else {
//alerta - você deve ter o whatsapp instalado
Toast.makeText(appActivity, appActivity.getString(R.string.share_whatsapp), Toast.LENGTH_SHORT).show();
}
}
lấy số liên lạc mà bạn muốn gửi tin nhắn và tạo uri cho whatsapp, ở đây c là Con trỏ trả về liên hệ đã chọn.
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);
Từ tài liệu
Để tạo liên kết của riêng bạn với một tin nhắn điền sẵn sẽ tự động xuất hiện trong trường văn bản của cuộc trò chuyện, hãy sử dụng https://wa.me/whatsappphonenumber/?text=urlencodedtext trong đó whatsappphonenumber là số điện thoại đầy đủ ở định dạng quốc tế và URL -encodedtext là thông báo điền trước được mã hóa URL.
Ví dụ: https://wa.me/15551234567?text=I 'm% 20interested% 20in% 20your% 20car% 20for% 20sale
val phoneNumber = "13492838472"
val text = "Hey, you know... I love StackOverflow :)"
val uri = Uri.parse("https://wa.me/$phoneNumber/?text=$text")
val sendIntent = Intent(Intent.ACTION_VIEW, uri)
startActivity(sendIntent)
API sau có thể được sử dụng trong c ++ như trong bài viết của tôi .
Bạn cần xác định một số hằng số:
//
#define GroupAdmin <YOUR GROUP ADMIN MOBILE PHONE>
#define GroupName <YOUR GROUP NAME>
#define CLIENT_ID <YOUR CLIENT ID>
#define CLIENT_SECRET <YOUR CLIENT SECRET>
#define GROUP_API_SERVER L"api.whatsmate.net"
#define GROUP_API_PATH L"/v3/whatsapp/group/text/message/12"
#define IMAGE_SINGLE_API_URL L"http://api.whatsmate.net/v3/whatsapp/group/image/message/12"
//
Sau đó, bạn kết nối với điểm cuối của API.
hOpenHandle = InternetOpen(_T("HTTP"), INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
if (hOpenHandle == NULL)
{
return false;
}
hConnectHandle = InternetConnect(hOpenHandle,
GROUP_API_SERVER,
INTERNET_DEFAULT_HTTP_PORT,
NULL, NULL, INTERNET_SERVICE_HTTP,
0, 1);
if (hConnectHandle == NULL)
{
InternetCloseHandle(hOpenHandle);
return false;
}
Sau đó, gửi cả tiêu đề và nội dung và đợi kết quả cần là “OK”.
Bước 1 - mở một yêu cầu HTTP:
const wchar_t *AcceptTypes[] = { _T("application/json"),NULL };
HINTERNET hRequest = HttpOpenRequest(hConnectHandle, _T("POST"), GROUP_API_PATH, NULL, NULL, AcceptTypes, 0, 0);
if (hRequest == NULL)
{
InternetCloseHandle(hConnectHandle);
InternetCloseHandle(hOpenHandle);
return false;
}
Bước 2 - gửi tiêu đề:
std::wstring HeaderData;
HeaderData += _T("X-WM-CLIENT-ID: ");
HeaderData += _T(CLIENT_ID);
HeaderData += _T("\r\nX-WM-CLIENT-SECRET: ");
HeaderData += _T(CLIENT_SECRET);
HeaderData += _T("\r\n");
HttpAddRequestHeaders(hRequest, HeaderData.c_str(), HeaderData.size(), NULL);
Bước 3 - gửi tin nhắn:
std::wstring WJsonData;
WJsonData += _T("{");
WJsonData += _T("\"group_admin\":\"");
WJsonData += groupAdmin;
WJsonData += _T("\",");
WJsonData += _T("\"group_name\":\"");
WJsonData += groupName;
WJsonData += _T("\",");
WJsonData += _T("\"message\":\"");
WJsonData += message;
WJsonData += _T("\"");
WJsonData += _T("}");
const std::string JsonData(WJsonData.begin(), WJsonData.end());
bResults = HttpSendRequest(hRequest, NULL, 0, (LPVOID)(JsonData.c_str()), JsonData.size());
Bây giờ chỉ cần kiểm tra kết quả:
TCHAR StatusText[BUFFER_LENGTH] = { 0 };
DWORD StatusTextLen = BUFFER_LENGTH;
HttpQueryInfo(hRequest, HTTP_QUERY_STATUS_TEXT, &StatusText, &StatusTextLen, NULL);
bResults = (StatusTextLen && wcscmp(StatusText, L"OK")==FALSE);