web-dev-qa-db-ja.com

着信Whatsappメッセージ/通知を聞く

私は通知ベースのアプリに取り組んでいます。そのためには、着信通知を聞く必要があります。着信コール、SMS、メールなどを聞くことができました。コードを介してWhatsappで友人からのpingやメッセージを聞く方法がわかりません。これは実際に行うことができますか?もしそうなら、どのように?パッケージ名を「com.whatsapp」として使用して、 Accessibility Service を使用できますか?

28
sanjeev mk

Accessibility Service を使用してこれを行うことができました。これを使用すると、通知バーですべての通知を聞くことができます。アクセシビリティサービスにパッケージ名を追加して、アプリケーションの仕様を聞きましたservice info、この場合はcom.whatsapp。メッセージを読むことができませんでしたが、メッセージが到着するたびに通知されます。

19
sanjeev mk

[〜#〜] yes [〜#〜]

実際には、Android 4.2。これをやったことがあります。 https://github.com/Snirpo/whatsapprelay 。現在、特定のWhatsAppグループからのメッセージを解析しますが、すべてのメッセージを解析するように適合させることができますWhatsAppを介したメッセージの送信は、残念ながらさらに困難です。

9
user2252051

そのアプリの開発者が意図的にサービス、コンテンツプロバイダーを共有したり、意図的にイベントのパブリックブロードキャストを送信したり、カスタムブロードキャスト登録システムを公開したりしない限り、Androidサードパーティアプリの内部動作。アプリの分離は、Androidで設計されています。非常に重要な理由:セキュリティ

5
S.D.

アクセシビリティイベントは、更新されたときではなく、着信通知イベントのみをキャッチします。今のところ、WhatsApp通知はメッセージを表示せず、送信者のみを表示します。その後、メッセージはWhatsAppアプリによって更新で追加されますが、これはアクセシビリティサービスでキャッチできません。

「XXXからの新しいメッセージ1件」のようなものしかありませんが、それで十分です。

3
Nicolas LUCAS

Whatsapp通知をキャッチするには、以下の例を参照してください。

public class Notifier extends AccessibilityService {


@Override
public void onCreate(){
    //Toast.makeText(this,"Oncreate", Toast.LENGTH_LONG).show();

}

@Override
protected void onServiceConnected() {
    // Set the type of events that this service wants to listen to.  Others
    // won't be passed to this service.
    Toast.makeText(this,"Service connected", Toast.LENGTH_LONG).show();
    AccessibilityServiceInfo info = new AccessibilityServiceInfo();
    info.feedbackType = AccessibilityServiceInfo.FEEDBACK_ALL_MASK;;
    info.eventTypes = AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED ;

    // If you only want this service to work with specific applications, set their
    // package names here.  Otherwise, when the service is activated, it will listen
    // to events from all applications.
    info.packageNames = new String[] {"com.whatsapp"};
    info.notificationTimeout = 100;

    setServiceInfo(info);

}

@Override
public void onAccessibilityEvent(AccessibilityEvent event) {

    if(event.getEventType() == AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED) {

            Toast.makeText(this,"Notification Catched", Toast.LENGTH_LONG).show();
        }

    }
}

そして、システムイベントにアクセスするために、設定>アクセシビリティから許可を設定することを忘れないでください。設定からの許可を許可します。

このリンクを確認してください

アクセシビリティサービスが開始されていません

2
Marcel Verwey