Whatsapp'ın bunu desteklemediğini söyleyen bazı eski gönderiler bulduğum için, bir şeyin değişip değişmediğini ve bir niyetle gönderdiğim bir numara ile bir whatsapp 'sohbeti' açmanın bir yolu olup olmadığını merak ediyordum.
Whatsapp'ın bunu desteklemediğini söyleyen bazı eski gönderiler bulduğum için, bir şeyin değişip değişmediğini ve bir niyetle gönderdiğim bir numara ile bir whatsapp 'sohbeti' açmanın bir yolu olup olmadığını merak ediyordum.
Yanıtlar:
GÜNCELLEME Lütfen https://faq.whatsapp.com/en/android/26000030/?category=5245251 adresine bakın
WhatsApp'ın Tıkla Sohbet özelliği, telefon numarası telefonunuzun adres defterine kaydedilmeden biriyle sohbet etmeye başlamanıza olanak tanır. Bu kişinin telefon numarasını bildiğiniz sürece, onunla sohbet başlatmanıza izin verecek bir bağlantı oluşturabilirsiniz.
Kullanın: https://wa.me/15551234567
Kullanmayın: https://wa.me/+001-(555)1234567
Örnek: https://wa.me/15551234567?text=I 'm% 20interested% 20in% 20your% 20car% 20for% 20sale
Orijinal cevap İşte çözüm
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();
}
}
Ayrıca http://www.whatsapp.com/faq/en/android/28000012 adresine de bakın
Bu kod ile verilen numara ile whatsapp sohbetini açabilirsiniz.
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, ""));
kullanmak yerine startActivity(i);
. 1. Çalışıyor Samsung J7 prime üzerinde test edilmiştir. 2. numara sohbet listemde de yoktu. 3. numara whatsapp kullanmıyorsa, o kişiyi whatsapp'a davet etmek istediğimi soran bir iletişim kutusu belirir. Uygulama kullanıcılarınız için whatsapp iletişim desteği sağlamak istiyorsanız, bunun en iyi çözüm olduğunu düşünüyorum.
Aşağıdaki çözümü buldum, önce whatsapp kimliğine ihtiyacınız olacak:
Buradaki ve diğer forumlardaki diğer başlıklardan gelen raporlarla eşleştiğimde, bulduğum giriş adı bir çeşitti: 0'lar olmadan uluslararası alan kodu veya başlangıçta + + ilk 0 + @ s.whatsapp.net olmadan telefon numarası
Örneğin, Hollanda'da yaşıyorsanız ve 0612325032 telefon numarasına sahipseniz, 0'lar veya + olmadan Hollanda için 31612325023@s.whatsapp.net -> +31 ve 0 olmadan telefon numarası olacaktır.
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)
Sizin yaptığınız 2 satırın hiçbir anlamı yok Intent whatsapp = new Intent(...)
.
<uses-permission android:name="android.permission.READ_CONTACTS" />
İzin eklemeniz gerekiyor AndroidManifest.xml
Bu, Whatsapp kurulu olsa da olmasa da çalışmalıdır.
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;
}
Basit çözüm, bunu deneyin.
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)
)
)
);
Marshmallow S5 üzerinde test edildi ve çalışıyor!
Uri uri = Uri.parse("smsto:" + "phone number with country code");
Intent sendIntent = new Intent(Intent.ACTION_SENDTO, uri);
sendIntent.setPackage("com.whatsapp");
startActivity(sendIntent);
Bu, bir kişiyle doğrudan bir sohbet açacak , whatsapp yüklenmemişse bu istisna atacak , telefon numarası whatsapp tarafından bilinmiyorsa sms veya basit sms mesajı yoluyla davetiye göndermeyi teklif edecekler
Aşağıdaki kod Google Now Uygulaması tarafından kullanılır ve başka hiçbir uygulama için ÇALIŞMAZ.
Bu yazıyı, WhatsApp'ın Google haricinde başka hiçbir geliştiricinin doğrudan mesaj göndermesine izin vermemesi beni kızdırdığı için yazıyorum.
Ve diğer serbest çalışan geliştiricilerin, bu tür bir işbirliğinin sürdüğünü bilmesini istiyorum, bu arada Google "herkese açık" hakkında konuşmaya devam ediyor ve WhatsApp geliştiricilere erişim sağlamak istemediklerini söylüyor.
Son zamanlarda WhatsApp, Google Asistan için özel olarak aşağıdaki gibi görünmesi gereken bir Amaç ekledi:
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", ?????);
Ayrıca "search_action_token" ifadesinin, Google Uygulamasına geri gönderilen ve Google Asistan tarafından oluşturulmuşsa kontrol edilen bir IBinder-Nesnesi içeren bir PendingIntent olduğunu da bulabildim.
Aksi takdirde WhatsApp mesajı kabul etmeyecektir.
Şu anda, istekte bulunabileceğiniz tek resmi APIGET
:
https://api.whatsapp.com/send?phone=919773207706&text=Hello
Her neyse, zaten WhatsApp tarafından çalıştırılan gizli bir API programı var
//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
}
Bu benim için çalışıyor:
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.");
}
Whatsapp'ın doğrudan URL'sini kullanın
String url = "https://api.whatsapp.com/send?phone="+number;
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url));
startActivity(i);
Bu çok uzun ama huysuz çalışıyor. kodunuzun keyfini çıkarı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();
}
Burada gerçekten geç kaldım ama bugünlerde WhatsApp üzerinden mesaj göndermek için daha kısa ve daha iyi çözümlerimiz olduğuna inanıyorum.
Sistem seçiciyi çağırmak için aşağıdakileri kullanabilir, ardından istediğinizi paylaşmak için hangi uygulamayı kullanacağınızı seçebilirsiniz.
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);
Gerçekten WhatsApp üzerinden göndermeniz gerekiyorsa, yapmanız gereken tek şey şudur (Sistem seçiciyi atlayacaksınız)
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);
Daha fazla bilgiye ihtiyacınız varsa burada bulabilirsiniz: WhatsApp SSS
Belgelerin dediği gibi, aşağıdaki gibi bir URL kullanabilirsiniz:
https://wa.me/15551234567
Son segmentin E164 Biçimindeki sayı olduğu yer
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)
}
Bu, bunu başarmanın çok daha kolay bir yoludur. Bu kod, cihazda whatsapp'ın kurulu olup olmadığını kontrol eder. Yüklenmişse, sistem seçiciyi atlar ve whatsapp'daki kişiye gider ve sohbetteki metni önceden alır. Yüklenmemişse, web tarayıcınızda whatsapp bağlantısını açar.
Aşağıdaki biçimde bir URL kullanmak isteyeceksiniz ...
https://api.whatsapp.com/send?text=text
Daha sonra istediğiniz metni göndermesini sağlayabilirsiniz. Ayrıca bir telefon numarası belirtme seçeneğiniz de var ...
https://api.whatsapp.com/send?text=text&phone=1234
Ne DO CAN NOT aşağıdaki kullanmaktır:
https://wa.me/send?text=text
Alacaksın...
Aradığınız sayfayı bulamadık
wa.me
Ancak hem bir telefon numarası hem de metin sağlarsanız işe yarayacaktır. Ancak, çoğunlukla, bir paylaşım bağlantısı oluşturmaya çalışıyorsanız, telefon numarasını belirtmek istemezsiniz çünkü kullanıcının birini seçmesini istersiniz. Bu durumda, numarayı vermezseniz ve wa.me
URL olarak kullanırsanız , tüm paylaşım bağlantılarınız başarısız olur. Lütfen kullanın app.whatsapp.com
.
Bu kodu kontrol edin,
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)));
}
Bu benim için çalışıyor:
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();
}
}
Mesajı göndermek istediğiniz kişi numarasını alın ve whatsapp için uri oluşturun, burada c seçilen kişiyi döndüren bir İmleçtir.
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);
Gönderen dokümantasyon
Bir sohbetin metin alanında otomatik olarak görünecek önceden doldurulmuş bir mesajla kendi bağlantınızı oluşturmak için, https://wa.me/whatsappphonenumber/?text=urlencodedtext'i kullanın ; burada whatsappphonenumber, uluslararası formatta ve URL'de tam bir telefon numarasıdır -encodedtext, URL kodlu önceden doldurulmuş mesajdır.
Örnek: 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)
Aşağıdaki API, makalemde gösterildiği gibi c ++ 'da kullanılabilir .
Birkaç sabit tanımlamanız gerekir:
//
#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"
//
Ardından API'nin uç noktasına bağlanırsınız.
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;
}
Ardından hem başlığı hem de gövdeyi gönderin ve "Tamam" olması gereken sonucu bekleyin.
Adım 1 - Bir HTTP isteği açın:
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;
}
Adım 2 - başlığı gönderin:
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);
Adım 3 - Mesajı Gönderin:
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());
Şimdi sadece sonucu kontrol edin:
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);