Já que encontrei alguns posts mais antigos, que dizem que o whatsapp não suporta isso, queria saber se algo mudou e se existe uma maneira de abrir um 'chat' do whatsapp com um número que estou enviando por meio de uma intent?
Já que encontrei alguns posts mais antigos, que dizem que o whatsapp não suporta isso, queria saber se algo mudou e se existe uma maneira de abrir um 'chat' do whatsapp com um número que estou enviando por meio de uma intent?
Respostas:
ATUALIZAÇÃO Consulte https://faq.whatsapp.com/en/android/26000030/?category=5245251
O recurso Click to Chat do WhatsApp permite que você inicie um bate-papo com alguém sem ter o número do telefone salvo na agenda do seu telefone. Contanto que você saiba o número de telefone dessa pessoa, você pode criar um link que permitirá que você inicie um bate-papo com ela.
Use: https://wa.me/15551234567
Não use: https://wa.me/+001-(555)1234567
Exemplo: https://wa.me/15551234567?text=I 'm% 20interested% 20in% 20your% 20car% 20for% 20sale
Resposta original Aqui está a solução
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();
}
}
Consulte também http://www.whatsapp.com/faq/en/android/28000012
Com este código você pode abrir o chat do Whatsapp com o número fornecido.
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, ""));
usar startActivity(i);
para abrir diretamente o chat numérico fornecido. 1. Testado em Samsung J7 prime está funcionando. 2. O número não estava na minha lista de contatos nem na minha lista de chat. 3. se o número não estiver usando o whatsapp, uma caixa de diálogo aparecerá perguntando se eu gostaria de convidar esse contato no whatsapp. Acho que é a melhor solução se você deseja fornecer suporte de contato do Whatsapp para os usuários do seu aplicativo.
Eu encontrei a seguinte solução, primeiro você vai precisar do id do whatsapp:
Correspondendo a relatórios de alguns outros tópicos aqui e em outros fóruns, o nome de login que encontrei era algum tipo de: código de área internacional sem os 0's ou + no início + número de telefone sem o primeiro 0 + @ s.whatsapp.net
Por exemplo, se você mora na Holanda e tem o número de telefone 0612325032, seria 31612325023@s.whatsapp.net -> +31 para a Holanda sem os 0s ou + e o número de telefone sem 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)
como 2 linhas acima de você Intent whatsapp = new Intent(...)
.
<uses-permission android:name="android.permission.READ_CONTACTS" />
permissão emAndroidManifest.xml
Isso deve funcionar quer o Whatsapp esteja instalado ou não.
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;
}
Solução simples, tente isso.
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)
)
)
);
Testado em Marshmallow S5 e funciona!
Uri uri = Uri.parse("smsto:" + "phone number with country code");
Intent sendIntent = new Intent(Intent.ACTION_SENDTO, uri);
sendIntent.setPackage("com.whatsapp");
startActivity(sendIntent);
Isso abrirá um bate-papo direto com uma pessoa, se o WhatsApp não estiver instalado, isso gerará uma exceção , se o número de telefone não for conhecido pelo WhatsApp, eles se oferecerão para enviar o convite via sms ou mensagem sms simples
O código a seguir é usado pelo Google Now App e NÃO funcionará com nenhum outro aplicativo.
Estou escrevendo este post porque me deixa com raiva que o WhatsApp não permite que nenhum outro desenvolvedor envie mensagens diretamente, exceto para o Google.
E eu quero que outros desenvolvedores autônomos saibam que esse tipo de cooperação está acontecendo, enquanto o Google continua falando sobre "aberto para qualquer pessoa" e o WhatsApp diz que não quer fornecer nenhum acesso aos desenvolvedores.
Recentemente, o WhatsApp adicionou um Intent especialmente para o Google Now, que deve ser semelhante a este:
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", ?????);
Também pude descobrir que "search_action_token" é um PendingIntent que contém um IBinder-Object, que é enviado de volta ao Google App e verificado, se foi criado pelo Google Now.
Caso contrário, o WhatsApp não aceitará a mensagem.
Atualmente, a única API oficial para a qual você pode fazer uma GET
solicitação:
https://api.whatsapp.com/send?phone=919773207706&text=Hello
De qualquer forma, já existe um programa secreto de API sendo executado pelo 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
}
Isso funciona para mim:
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.");
}
Use o URL direto do Whatsapp
String url = "https://api.whatsapp.com/send?phone="+number;
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url));
startActivity(i);
isso é muito demorado, mas difícil de trabalhar. aproveite seu código :)
//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();
}
Estou muito atrasado aqui, mas acredito que hoje em dia temos soluções mais curtas e melhores para enviar mensagens pelo WhatsApp.
Você pode usar o seguinte para chamar o seletor de sistema e, em seguida, escolher qual aplicativo usará para compartilhar o que quiser.
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);
Se você realmente precisa enviar pelo WhatsApp, tudo o que você precisa fazer é o seguinte (você irá pular o seletor de sistema)
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);
Se precisar de mais informações, você pode encontrá-las aqui: FAQ do WhatsApp
Como a documentação diz, você pode apenas usar um URL como:
https://wa.me/15551234567
Onde o último segmento é o número no formato 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)
}
Esta é uma maneira muito mais fácil de conseguir isso. Este código verifica se o Whatsapp está instalado no dispositivo. Se estiver instalado, ele ignora o seletor de sistema e vai para o contato no whatsapp e pré-exibe o texto no chat. Se não estiver instalado, ele abre o link do Whatsapp no seu navegador.
Você vai querer usar um URL no seguinte formato ...
https://api.whatsapp.com/send?text=text
Depois, você pode fazer com que ele envie o texto que desejar. Você também tem a opção de especificar um número de telefone ...
https://api.whatsapp.com/send?text=text&phone=1234
O que você NÃO PODE FAZER é usar o seguinte:
https://wa.me/send?text=text
Você vai ter...
Não foi possível encontrar a página que você estava procurando
wa.me
, porém, funcionará se você fornecer um número de telefone e uma mensagem de texto. Mas, na maioria das vezes, se você está tentando fazer um link de compartilhamento, você realmente não quer indicar o número de telefone, porque deseja que o usuário selecione alguém. Nesse caso, se você não fornecer o número e usar wa.me
como URL, todos os seus links de compartilhamento falharão. Por favor, use app.whatsapp.com
.
Verifique este código,
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)));
}
Isso funciona para mim:
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();
}
}
pegue o número de contato para quem deseja enviar a mensagem e crie uri para o whatsapp, aqui c é um Cursor retornando o contato selecionado.
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);
Da documentação
Para criar seu próprio link com uma mensagem pré-preenchida que aparecerá automaticamente no campo de texto de um chat, use https://wa.me/whatsappphonenumber/?text=urlencodedtext onde whatsappphonenumber é um número de telefone completo em formato internacional e URL -encodedtext é a mensagem pré-preenchida codificada por URL.
Exemplo: 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 API a seguir pode ser usada em c ++, conforme mostrado em meu artigo .
Você precisa definir várias constantes:
//
#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"
//
Então você se conecta ao endpoint da 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;
}
Em seguida, envie o cabeçalho e o corpo e aguarde o resultado que precisa ser “OK”.
Etapa 1 - abrir uma solicitação 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;
}
Etapa 2 - enviar o cabeçalho:
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);
Etapa 3 - enviar a mensagem:
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());
Agora é só verificar o resultado:
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);