web-dev-qa-db-ja.com

Whatsappビデオ通話にプログラムで応答する

AndroidのAccessibilityServiceを使用してwhatsappビデオ通話に自動応答する方法はありますか?

または、ヘッドセット/ Bluetoothの通話応答ボタンのクリックを促す方法はありますか? どのようにして応答ボタンのIDを取得できますか??アクセシビリティサービスでクリックを実行するには

私はAndroid 8.0 OreoからANSWER_PHONE_CALLSパーミッションを持っていることを知っていますが、私のプロジェクトではリモート監視に古いデバイスを使用したいです。

助けていただければ幸いです!

-----更新:ヘミスフィア氏とカバジ氏の回答のおかげで、このアプリは電話に応答できますが、動作するにはシステムアプリである必要があります!システムアプリにならずに動作させる方法はありますか?ヘッドセットのボタンハックなしで?

public class AnswerCall  extends AccessibilityService {
    @Override
    public void onAccessibilityEvent( AccessibilityEvent event )
    {
        if(event.getEventType() == TYPE_WINDOW_CONTENT_CHANGED)
        {

            if(event.getPackageName().equals("com.whatsapp"))
            {

                Thread thread = new Thread() {
                    @Override
                    public void run() {
                        try {
                            while(true) {
                                Instrumentation inst = new Instrumentation();
                                inst.sendKeyDownUpSync(KeyEvent.KEYCODE_HEADSETHOOK);
                            }
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                };

                thread.start();
                StringBuilder sb = new StringBuilder();
                List<CharSequence> texts = event.getText();
                if (!texts.isEmpty())
                {
                    for (CharSequence s : event.getText()) {
                        sb.append(s);
                    }
                    if(sb.toString().equals("Incoming video call"))
                        Log.d( "onAccessibilityEvent", "whatsapp video call" );

                }
            }
        }
    }

    @Override
    public void onInterrupt() {

    }
}
24
Nizar

あなたがやりたいことはできないと思います。 AccessibilityServiceを使用すると、ビデオコールがいつ着信するかを知ることができます。

@Override
public void onAccessibilityEvent( AccessibilityEvent event )
{
    if(event.getEventType() == AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED)
    {
        if(event.getPackageName().equals("com.whatsapp"))
        {
            StringBuilder sb = new StringBuilder();
            List<CharSequence> texts = event.getText();
            if (!texts.isEmpty()) 
            {
                for (CharSequence s : event.getText()) 
                {
                    sb.append(s);
                }
                if(sb.toString().equals("Incoming video call"))
                {
                    Log.d( "onAccessibilityEvent", "whatsapp video call" );
                }
            }
        }
    }
}

ただし、プログラムで呼び出しに応答することはできませんでした。 Android 5.0(Lollipop)でプログラムから着信コールに応答するにはどうすればよいですか? システムアプリであること。

11
hemisphire

sendKeyDownUpSyncクラスのInstrumentationメソッドを使用できます。

Instrumentation inst = new Instrumentation();
inst.sendKeyDownUpSync(KeyEvent.KEYCODE_HEADSETHOOK);

このコードが機能しない場合は、別のKeyEventを使用して正しいコードを見つけてください。

このリンクからKeyEventのリストを見ることができます: https://developer.Android.com/reference/Android/view/KeyEvent.html

詳細はこちらから確認できます。 Instrumentation

6
Kahbazi

これを達成する古典的な方法は、 NotificationListenerService を使用して通知を監視し、関連する 通知のアクション に基づいて行動することです。

6
rds