将图像发送给Whatsapp用户

问题描述 投票:0回答:1

我正在尝试通过Stackoverflow Send message via whatsapp programmatically中“ user1079425”指示的可访问性服务按“发送”按钮,将图像发送到一定数量的Whatsapp。

这是我使用的代码:

private void sendImageWhatsapp (String telephone){

    String toNumber, tel, message;
    String mystring = "\u0007";

    // adjust tel.number
    tel = telephone.replaceAll("[^0-9+]","");
    if (tel.substring(0,1).equalsIgnoreCase("+")){
        tel = tel.substring(1);
    }
    else{
        if (tel.substring(0,2).equalsIgnoreCase("00")){
            tel = tel.substring(2);
        }
        else{
            tel = context.getApplicationContext().getResources().getString(R.string.prefix_code) + tel;
        }
    }

    //String toNumber = "+91 98765 43210"; // contains spaces.
    //toNumber = toNumber.replace("+", "").replace(" ", "");

    toNumber = tel;     // E164 format without '+' sign
    message = imageDidascalia.getText().toString() + mystring;

    Intent sendIntent = new Intent("android.intent.action.MAIN");
    //sendIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(imageFile));
    sendIntent.putExtra(Intent.EXTRA_STREAM, imageUri);
    sendIntent.putExtra("jid", toNumber + "@s.whatsapp.net");
    sendIntent.putExtra(Intent.EXTRA_TEXT, message);
    sendIntent.setAction(Intent.ACTION_SEND);
    sendIntent.setPackage("com.whatsapp");
    sendIntent.setType("image/png");
    context.startActivity(sendIntent);
}

public class WhatsappAccessibilityService extends AccessibilityService {

private int index = 0;

@Override
public void onAccessibilityEvent (AccessibilityEvent event) {
    if (getRootInActiveWindow () == null) {
        return;
    }

    AccessibilityNodeInfoCompat rootInActiveWindow = AccessibilityNodeInfoCompat.wrap (getRootInActiveWindow ());

    // Whatsapp Message EditText id
    List<AccessibilityNodeInfoCompat> messageNodeList = rootInActiveWindow.findAccessibilityNodeInfosByViewId ("com.whatsapp:id/entry");
    if (messageNodeList == null || messageNodeList.isEmpty ()) {
        // Whatsapp Image EditText id
        index=1;
        messageNodeList = rootInActiveWindow.findAccessibilityNodeInfosByViewId ("com.whatsapp:id/pickfiletype_gallery");
        if (messageNodeList == null || messageNodeList.isEmpty ()) {
            return;
        }`enter code here`

        //return;
    }

    // check if the whatsapp message EditText field is filled with text and ending with your suffix (explanation above)
    AccessibilityNodeInfoCompat messageField = messageNodeList.get (index);
    if (messageField.getText () == null || messageField.getText ().length () == 0
            || !messageField.getText ().toString ().endsWith ("\u0007")) { // So your service doesn't process any message, but the ones ending your apps suffix
        //               || !messageField.getText ().toString ().endsWith (getApplicationContext ().getString (R.string.whatsapp_suffix))) { // So your service doesn't process any message, but the ones ending your apps suffix
        return;
    }

    // Whatsapp send button id
    List<AccessibilityNodeInfoCompat> sendMessageNodeInfoList = rootInActiveWindow.findAccessibilityNodeInfosByViewId ("com.whatsapp:id/send");
    if (sendMessageNodeInfoList == null || sendMessageNodeInfoList.isEmpty ()) {
        return;
    }

    AccessibilityNodeInfoCompat sendMessageButton = sendMessageNodeInfoList.get (0);
    if (!sendMessageButton.isVisibleToUser ()) {
        return;
    }

    // Now fire a click on the send button
    sendMessageButton.performAction (AccessibilityNodeInfo.ACTION_CLICK);

    // Now go back to your app by clicking on the Android back button twice:
    // First one to leave the conversation screen
    // Second one to leave whatsapp
    try {
        Thread.sleep (500); // hack for certain devices in which the immediate back click is too fast to handle
        performGlobalAction (GLOBAL_ACTION_BACK);
        Thread.sleep (500);  // same hack as above
    } catch (InterruptedException ignored) {}
    performGlobalAction (GLOBAL_ACTION_BACK);
}

@Override
public void onInterrupt() {
}
}

此代码适用于消息,但不适用于图像。

java android whatsapp
1个回答
0
投票

我也陷入同样的​​问题。花了一段时间后,我解决了这个问题。如果要发送图像而无需用户交互,则只需删除要应用于WhatsApp的编辑文本的代码和条件。我将直接跳至按钮代码,您的图像将自动发送到您已通过的号码。`重写fun onAccessibilityEvent(event:AccessibilityEvent){如果(rootInActiveWindow == null){返回}val rootInActiveWindow = AccessibilityNodeInfoCompat.wrap(rootInActiveWindow)

© www.soinside.com 2019 - 2024. All rights reserved.