-2
Whatsapp通知フィルタリングアプリケーションを作成しようとしています。ここで、Whatsappからのすべての通知を監視し、いくつかのフィルタを使用してメッセージを削除します。 私はそれらの通知メッセージをキャッチして、それらを操作できるように助けてもらえますか アクセシビリティサービスを使用する必要があることは分かっていましたが、イベントを取得することができません nullイベントソースもnullですWhatsapp通知フィルタリングアプリケーション
https://stackoverflow.com/users/2452075/ghmulchandani
私のコードは次のとおりです。 - Accessib
MainActivity.java
package com.example.pavilion.accessebilityone;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
static TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = (TextView)findViewById(R.id.textView);
Intent intent = new Intent(android.provider.Settings.ACTION_ACCESSIBILITY_SETTINGS);
startActivityForResult(intent, 0);
Intent service = new Intent(this,WhatsappService.class);
startService(service);
}
}
をアクセシビリティサービスを使用してilityサービスクラス: -
import android.accessibilityservice.AccessibilityService;
import android.accessibilityservice.AccessibilityServiceInfo;
import android.app.Notification;
import android.os.Parcelable;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.view.accessibility.AccessibilityEvent;
import android.view.accessibility.AccessibilityNodeInfo;
import android.view.accessibility.AccessibilityWindowInfo;
import android.widget.RemoteViews;
import android.widget.TextView;
import android.widget.Toast;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* Created by pavilion on 6/6/2017.
*/
public class WhatsappService extends AccessibilityService {
protected void onServiceConnected() {
Toast.makeText(this, "connectd", Toast.LENGTH_SHORT).show();
AccessibilityServiceInfo info = new AccessibilityServiceInfo();
info.eventTypes = AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED;
info.feedbackType = AccessibilityServiceInfo.FEEDBACK_GENERIC;
info.notificationTimeout = 100;
setServiceInfo(info);
}
public synchronized void onAccessibilityEvent(AccessibilityEvent event) {
if (event.getEventType() == AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED) {
CharSequence pk = event.getPackageName();
//Toast.makeText(this,cl,Toast.LENGTH_SHORT).show();
Toast.makeText(this, pk, Toast.LENGTH_SHORT).show();
Notification n = (Notification) event.getParcelableData();
if (n == null)
return;
RemoteViews rv = n.contentView;
View view = rv.apply(this, null);
if (view == null)
return;
if (view instanceof ViewGroup) {
ViewGroup group = (ViewGroup) view;
searchTextView(group);
}
}
}
@Override
public void onInterrupt() {
}
private void searchTextView(ViewGroup group) {
int count = group.getChildCount();
for (int i = 0; i < count; i++) {
View v = group.getChildAt(i);
if (v instanceof TextView) {
Toast.makeText(this,((TextView) v).getText(),Toast.LENGTH_SHORT).show();
} else if (v instanceof ViewGroup) {
searchTextView((ViewGroup) v);
}
}
}
}
マニフェストファイル: -
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.pavilion.accessebilityone">
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service android:name=".WhatsappService"
android:enabled="true"
android:exported="true"
android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<action android:name="android.accessibilityservice.AccessibilityService"/>
</intent-filter>
<meta-data android:name="android.accessibilityservice"
android:resource="@xml/accessibilityservice"/>
</service>
</application>
</manifest>
アクセシビリティ-serviceのXML
<?xml version="1.0" encoding="utf-8"?>
<accessibility-service
android:accessibilityEventTypes="typeNotificationStateChanged"
android:accessibilityFeedbackType="feedbackGeneric"
android:canRetrieveWindowContent="true"
android:notificationTimeout="100"
android:settingsActivity="com.example.pavilion.accessebilityone.MainActivity"
xmlns:android="http://schemas.android.com/apk/res/android">
</accessibility-service>
私はそれが何も表示されていない同じ方法を行った私は私のデバイスはMoto G3アンドロイドバージョン6.0.1です情報を生成するために乾杯を使用した| なぜそれが通知をキャッチしていないのかわかりません。 handleNotification(packageName、notificationTitle、message)ではなく;これは、名前、タイトル、メッセージを表示するためにToastを使用しました。 – kanhaiyabgs
さて、アプリケーションを携帯電話にインストールしたら、電話を再起動してください。私は、アプリケーションのデバッグバージョンでは、これが必要であることに気付きました。 – archLucifer
インターネット速度通知のみを取得することができ、whatsappやその他の通知を受け取ることができません。事実、whatsappは通知として考慮されていません。なぜなら少なくともwhatsappパッケージのトーストを生成するはずですが、whatsappは全く言及していないからです。 – kanhaiyabgs