私は通知ベースのアプリに取り組んでいます。そのためには、着信通知を聞く必要があります。着信コール、SMS、メールなどを聞くことができました。コードを介してWhatsappで友人からのpingやメッセージを聞く方法がわかりません。これは実際に行うことができますか?もしそうなら、どのように?パッケージ名を「com.whatsapp」として使用して、 Accessibility Service を使用できますか?
Accessibility Service を使用してこれを行うことができました。これを使用すると、通知バーですべての通知を聞くことができます。アクセシビリティサービスにパッケージ名を追加して、アプリケーションの仕様を聞きましたservice info
、この場合はcom.whatsapp
。メッセージを読むことができませんでしたが、メッセージが到着するたびに通知されます。
[〜#〜] yes [〜#〜]
実際には、Android 4.2。これをやったことがあります。 https://github.com/Snirpo/whatsapprelay 。現在、特定のWhatsAppグループからのメッセージを解析しますが、すべてのメッセージを解析するように適合させることができますWhatsAppを介したメッセージの送信は、残念ながらさらに困難です。
そのアプリの開発者が意図的にサービス、コンテンツプロバイダーを共有したり、意図的にイベントのパブリックブロードキャストを送信したり、カスタムブロードキャスト登録システムを公開したりしない限り、Androidサードパーティアプリの内部動作。アプリの分離は、Androidで設計されています。非常に重要な理由:セキュリティ。
アクセシビリティイベントは、更新されたときではなく、着信通知イベントのみをキャッチします。今のところ、WhatsApp通知はメッセージを表示せず、送信者のみを表示します。その後、メッセージはWhatsAppアプリによって更新で追加されますが、これはアクセシビリティサービスでキャッチできません。
「XXXからの新しいメッセージ1件」のようなものしかありませんが、それで十分です。
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();
}
}
}
そして、システムイベントにアクセスするために、設定>アクセシビリティから許可を設定することを忘れないでください。設定からの許可を許可します。
このリンクを確認してください