Отправить сообщение Whatsapp для конкретного контакта
Я следил за этой ссылкой , и это мой код
Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse("content://com.android.contacts/data/" + "[email protected]"));
i.setPackage("com.whatsapp");
startActivity(i);
Это мой журнал
android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=content://com.android.contacts/data/[email protected] pkg=com.whatsapp }
at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1545)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1416)
at android.app.Activity.startActivityForResult(Activity.java:3351)
at android.app.Activity.startActivityForResult(Activity.java:3312)
at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:824)
at android.app.Activity.startActivity(Activity.java:3522)
at android.app.Activity.startActivity(Activity.java:3490)
at com.sieryuu.maidchan.MainActivity.onClick(MainActivity.java:61)
at android.view.View.performClick(View.java:4147)
at android.view.View$PerformClick.run(View.java:17161)
at android.os.Handler.handleCallback(Handler.java:615)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:213)
at android.app.ActivityThread.main(ActivityThread.java:4787)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556)
Мой вопрос:
Как отправить текст в контакт whatsapp в фоновом режиме (без выбора номера контакта, я уже знаю ID)? Root
при необходимости
Ответы
Ответ 1
Я нашел правильный способ сделать это и просто после прочтения этой статьи: http://howdygeeks.com/send-whatsapp-message-unsaved-number-android/
телефон и сообщение оба String.
Исходный код:
try {
PackageManager packageManager = context.getPackageManager();
Intent i = new Intent(Intent.ACTION_VIEW);
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();
}
Наслаждайтесь!
Ответ 2
Если вы хотите отправить сообщение конкретному пользователю в фоновом режиме, не открывая whatsapp, и у вас есть внедренное устройство, используйте следующий код, который поможет вам,
protected void whatsAppSendMessage(String[] paramArrayOfString, String paramString) {
try {
Shell shell = Shell.startRootShell();
int j = paramArrayOfString.length;
for (int i = 0; i < j; i++) {
String str3;
long l1;
long l2;
int k;
String str1;
String str2;
Random localRandom = new Random(20L);
Log.d("AUTO",
"ps | grep -w 'com.whatsapp' | awk '{print $2}' | xargs kill");
commandsTestOnClick("ps | grep -w 'com.whatsapp' | awk '{print $2}' | xargs kill");
str3 = paramArrayOfString[i] + "@s.whatsapp.net";
l1 = System.currentTimeMillis();
l2 = l1 / 1000L;
k = localRandom.nextInt();
str1 = "sqlite3 /data/data/com.whatsapp/databases/msgstore.db \"INSERT INTO messages (key_remote_jid, key_from_me, key_id, status, needs_push, data, timestamp, MEDIA_URL, media_mime_type, media_wa_type, MEDIA_SIZE, media_name , latitude, longitude, thumb_image, remote_resource, received_timestamp, send_timestamp, receipt_server_timestamp, receipt_device_timestamp, raw_data, media_hash, recipient_count, media_duration, origin)VALUES ('"
+ str3
+ "', 1,'"
+ l2
+ "-"
+ k
+ "', 0,0, '"
+ paramString
+ "',"
+ l1
+ ",'','', '0', 0,'', 0.0,0.0,'','',"
+ l1
+ ", -1, -1, -1,0 ,'',0,0,0); \"";
str2 = "sqlite3 /data/data/com.whatsapp/databases/msgstore.db \"insert into chat_list (key_remote_jid) select '"
+ str3
+ "' where not exists (select 1 from chat_list where key_remote_jid='"
+ str3 + "');\"";
str3 = "sqlite3 /data/data/com.whatsapp/databases/msgstore.db \"update chat_list set message_table_id = (select max(messages._id) from messages) where chat_list.key_remote_jid='"
+ str3 + "';\"";
Log.d("AUTO", str1);
Log.d("AUTO", str2);
Log.d("AUTO", str3);
shell.add(
new SimpleCommand(
"chmod 777 /data/data/com.whatsapp/databases/msgstore.db"))
.waitForFinish();
shell.add(new SimpleCommand(str1)).waitForFinish();
shell.add(new SimpleCommand(str2)).waitForFinish();
shell.add(new SimpleCommand(str3)).waitForFinish();
}
shell.close();
} catch (Exception e) {
e.printStackTrace();
}
}
Просто просмотрите этот блог для получения дополнительной информации... Я протестировал его успешно.
http://siddhpuraamit.blogspot.in/
Ответ 3
после небольшого поискового запроса я нашел следующий код
public void onClickWhatsApp(View view) {
Intent waIntent = new Intent(Intent.ACTION_SEND);
waIntent.setType("text/plain");
String text = "YOUR TEXT HERE";
waIntent.setPackage("com.whatsapp");
if (waIntent != null) {
waIntent.putExtra(Intent.EXTRA_TEXT, text);//
startActivity(Intent.createChooser(waIntent, "Share with"));
} else {
Toast.makeText(this, "WhatsApp not Installed", Toast.LENGTH_SHORT)
.show();
}
}
чтобы вы могли отправить намерение отправить сообщение, но, насколько я читаю, вы не можете отправить его конкретному контакту
Ответ 4
private void openWhatsApp(String id) {
Cursor c = getSherlockActivity().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();
}
Где id - это то, что app uri нравится
[email protected]
Ответ 5
Попробуйте использовать следующее решение для изображения вместе с текстом.
Просто измените setType ( "текст" ) и удалите ExtraStream, если вы хотите отправлять только текстовое сообщение.
Intent sendIntent = new Intent("android.intent.action.SEND");
File f=new File("path to the file");
Uri uri = Uri.fromFile(f);
sendIntent.setComponent(new ComponentName("com.whatsapp","com.whatsapp.ContactPicker"));
sendIntent.setType("image");
sendIntent.putExtra(Intent.EXTRA_STREAM,uri);
sendIntent.putExtra("jid", PhoneNumberUtils.stripSeparators("919xxxxxxxxx")+"@s.whatsapp.net");
sendIntent.putExtra(Intent.EXTRA_TEXT,"sample text you want to send along with the image");
startActivity(sendIntent);
ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ О ПРОЦЕССЕ РЕШЕНИЯ РЕШЕНИЯ:
После обратного проектирования WhatsApp я наткнулся на следующий фрагмент манифеста Android,
Обычное намерение Share, использует " ОТПРАВИТЬ", что не позволяет отправлять конкретному контакту и требует выбора контактов.
Конкретный контакт подбирается классом "Разговор" и использует действие " SEND_TO", но он использует тело sms и не может отображать изображение и другие вложения.
<activity android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|screenSize|smallestScreenSize|uiMode" android:name="com.whatsapp.Conversation" android:theme="@style/Theme.App.CondensedActionBar" android:windowSoftInputMode="stateUnchanged">
<intent-filter>
<action android:name="android.intent.action.SENDTO"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
<data android:scheme="sms"/>
<data android:scheme="smsto"/>
</intent-filter>
</activity>
Копаем дальше, я наткнулся на это,
<activity android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|screenSize|smallestScreenSize|uiMode" android:name="com.whatsapp.ContactPicker" android:theme="@style/Theme.App.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.PICK"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="com.whatsapp"/>
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.SEND"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="audio/*"/>
<data android:mimeType="video/*"/>
<data android:mimeType="image/*"/>
<data android:mimeType="text/plain"/>
<data android:mimeType="text/x-vcard"/>
<data android:mimeType="application/pdf"/>
<data android:mimeType="application/vnd.openxmlformats-officedocument.wordprocessingml.document"/>
<data android:mimeType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"/>
<data android:mimeType="application/vnd.openxmlformats-officedocument.presentationml.presentation"/>
<data android:mimeType="application/msword"/>
<data android:mimeType="application/vnd.ms-excel"/>
<data android:mimeType="application/vnd.ms-powerpoint"/>
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.SEND_MULTIPLE"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="audio/*"/>
<data android:mimeType="video/*"/>
<data android:mimeType="image/*"/>
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
<data android:host="send" android:scheme="whatsapp"/>
</intent-filter>
<meta-data android:name="android.service.chooser.chooser_target_service" android:value=".ContactChooserTargetService"/>
</activity>
Наконец, используя декомпилятор для класса ContactPicker и Conversation, добавлено значение ключа для номера телефона " jid".
Ответ 6
Попробуйте следующее:
Intent i = new Intent(Intent.ACTION_VIEW).setData(Uri.parse("content://com.android.contacts/data/" + "[email protected]"));
i.setPackage("com.whatsapp");
startActivity(i);
Ответ 7
Вы можете сослаться на это: https://medium.com/@johnujamesmarattil/send-random-messages-in-loop-to-someone-in-whatsapp-9ae41755a6af
Это метод отправки сообщений определенному контакту из веб-браузера.
Ответ 8
Я использую этот код для его работы. Кроме того, я проверяю, не загружается ли что-то приложение, чтобы играть в магазин.
private void openWhatsApp() {
String smsNumber = "8801714884544";
boolean isWhatsappInstalled = whatsappInstalledOrNot("com.whatsapp");
if (isWhatsappInstalled) {
try {
Intent sendIntent = new Intent("android.intent.action.MAIN");
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.setType("text/plain");
sendIntent.putExtra(Intent.EXTRA_TEXT, FormViews.getTexBoxFieldValue(enquiryEditText));
sendIntent.putExtra("jid", smsNumber + "@s.whatsapp.net"); //phone number without "+" prefix
sendIntent.setPackage("com.whatsapp");
startActivity(sendIntent);
} catch(Exception e) {
Toast.makeText(getActivity(), "Error/n" + e.toString(), Toast.LENGTH_SHORT).show();
}
} else {
Uri uri = Uri.parse("market://details?id=com.whatsapp");
Intent goToMarket = new Intent(Intent.ACTION_VIEW, uri);
Toast.makeText(getActivity(), "WhatsApp not Installed",
Toast.LENGTH_SHORT).show();
getActivity().startActivity(goToMarket);
}
}
private boolean whatsappInstalledOrNot(String uri) {
PackageManager pm = getActivity().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;
}
Ответ 9
Вы можете попробовать это, это работает для меня:
String waUrl = "https://wa.me/918982061674?text=I+can+help+you+with+your+BA+Tuition+requirement.+Please+call+me+at+09080976510+or+check+my+UrbanPro+profile%3A+http%3A%2F%2Flocalhost%3A8080%2Ftesturl";
try {
PackageManager packageManager = context.getPackageManager();
Intent i = new Intent(Intent.ACTION_VIEW);
String url = waUrl;
i.setPackage("com.whatsapp");
i.setData(Uri.parse(url));
if (i.resolveActivity(packageManager) != null) {
context.startActivity(i);
}
} catch (Exception e) {
Log.e("WHATSAPP", e.getMessage())
}