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() {
}
}
あなたがやりたいことはできないと思います。 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)でプログラムから着信コールに応答するにはどうすればよいですか? システムアプリであること。
sendKeyDownUpSync
クラスのInstrumentation
メソッドを使用できます。
Instrumentation inst = new Instrumentation();
inst.sendKeyDownUpSync(KeyEvent.KEYCODE_HEADSETHOOK);
このコードが機能しない場合は、別のKeyEvent
を使用して正しいコードを見つけてください。
このリンクからKeyEvent
のリストを見ることができます: https://developer.Android.com/reference/Android/view/KeyEvent.html
詳細はこちらから確認できます。 Instrumentation
これを達成する古典的な方法は、 NotificationListenerService を使用して通知を監視し、関連する 通知のアクション に基づいて行動することです。