由于我发现一些较旧的帖子称whatsapp不支持此功能,因此我想知道是否有变化以及是否有办法通过意图打开一个whatsapp“聊天”,并将其中的号码发送出去?
由于我发现一些较旧的帖子称whatsapp不支持此功能,因此我想知道是否有变化以及是否有办法通过意图打开一个whatsapp“聊天”,并将其中的号码发送出去?
更新 请参考https://faq.whatsapp.com/en/android/26000030/?category=5245251
WhatsApp的“点击聊天”功能允许您在不将某人的电话号码保存在手机通讯录中的情况下开始与他们聊天。只要您知道此人的电话号码,就可以创建一个链接,使您可以与他们开始聊天。
示例:https://wa.me/15551234567?text=I'm%20interested%20in%20your%20car%20for%20sale
原始答案 这是解决方案
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();
}
}
使用此代码,您可以打开带有给定号码的WhatsApp聊天。
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(i);
直接打开提供的号码聊天,而不是使用startActivity(Intent.createChooser(i, ""));
。已在三星J7 Prime上测试过,可以正常工作。该号码既不在我的联系人列表中,也不在我的聊天列表中。如果该号码没有使用WhatsApp,则会出现一个对话框询问我是否想邀请该联系人加入WhatsApp。如果您想为应用程序用户提供WhatsApp联系人支持,我认为这是最佳解决方案。 - Muhammad Saqib简单的解决方案,请试试这个。
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)
)
)
);
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);
}
}
Intent whatsapp = new Intent(...)
,所以 if (whatsapp != null)
是没有意义的。 - CarcamanoAndroidManifest.xml
文件中添加 <uses-permission android:name="android.permission.READ_CONTACTS" />
权限。 - Pratik Butani这应该可以在Whatsapp已安装或未安装的情况下正常工作。
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;
}
在 Marshmallow S5 上进行测试,它可以正常工作!
Uri uri = Uri.parse("smsto:" + "phone number with country code");
Intent sendIntent = new Intent(Intent.ACTION_SENDTO, uri);
sendIntent.setPackage("com.whatsapp");
startActivity(sendIntent);
如果安装了WhatsApp,这将打开与某个人的直接聊天,否则将抛出异常。如果电话号码在WhatsApp中不存在,则他们将提供通过短信或普通短信消息发送邀请。
以下是关于如何通过WhatsApp
发送信息的最新方法,即使收件人的电话号码不在您的WhatsApp
聊天或手机通讯录中。
private fun openWhatsApp(number: String) {
try {
packageManager.getPackageInfo("com.whatsapp", PackageManager.GET_ACTIVITIES)
val intent = Intent(
Intent.ACTION_VIEW,
Uri.parse("https://wa.me/$number?text=I'm%20interested%20in%20your%20car%20for%20sale")
)
intent.setPackage("com.whatsapp")
startActivity(intent)
} catch (e: PackageManager.NameNotFoundException) {
Toast.makeText(
this,
"Whatsapp app not installed in your phone",
Toast.LENGTH_SHORT
).show()
e.printStackTrace()
}
}
intent.setPackage("com.whatsapp")
将帮助您避免出现打开方式选择器并直接打开Whatsapp
。
重要提示: 如果您处于catch
语句中,即使已安装了Whatsapp
,请按以下方式向manifest.xml
添加queries
:
<queries>
<package android:name="com.whatsapp" />
</queries>
//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
}
try {
// Check if whatsapp is installed
context?.packageManager?.getPackageInfo("com.whatsapp", PackageManager.GET_META_DATA)
val intent = Intent(Intent.ACTION_VIEW, Uri.parse("https://wa.me/$internationalPhoneNumber"))
startActivity(intent)
} catch (e: NameNotFoundException) {
Toast.makeText(context, "WhatsApp not Installed", Toast.LENGTH_SHORT).show()
}
Java:
try {
// Check if whatsapp is installed
getPackageManager().getPackageInfo("com.whatsapp", PackageManager.GET_META_DATA);
Intent intent = Intent(Intent.ACTION_VIEW, Uri.parse("https://wa.me/" + internationalPhoneNumber));
startActivity(intent);
} catch (NameNotFoundException e) {
Toast.makeText(context, "WhatsApp not Installed", Toast.LENGTH_SHORT).show();
}
getPackageInfo()
会在 WhatsApp 没有安装时抛出 NameNotFoundException
异常。
internationalPhoneNumber
变量用于访问电话号码。
参考:
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", ?????);
我还发现,“search_action_token”是一个携带IBinder-Object的PendingIntent,将其发送回Google应用程序进行检查,以确定它是否由Google Now创建。
否则,WhatsApp将无法接受该消息。