Using Accessibility Service I am being able to read notification bar title & message, the issue I am facing is when first notification appear I am reading all these perfectly but after first notification & onward I am only getting title & text "you have 2 messages" and so on, not the entire message. Waiting for your expert advice.
Code :
@Override
protected void onServiceConnected()
{
Log.d("AccessibilityServiceNotification", "ServiceConnected");
try
{
AccessibilityServiceInfo info = new AccessibilityServiceInfo();
info.eventTypes = AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED;
info.feedbackType = AccessibilityServiceInfo.FEEDBACK_ALL_MASK;
info.notificationTimeout = 100;
setServiceInfo(info);
}
catch(Exception e)
{
Log.d("ERROR onServiceConnected", e.toString());
}
}
@Override
public void onAccessibilityEvent(AccessibilityEvent event)
{
try
{
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
Parcelable data = event.getParcelableData();
if(data !=null)
{
Notification notification = (Notification) data;
RemoteViews remoteView = notification.bigContentView;
ViewGroup localView = (ViewGroup) inflater.inflate(remoteView.getLayoutId(), null);
remoteView.reapply(getApplicationContext(), localView);
Resources resources = null;
PackageManager pkm = getPackageManager();
try
{
resources = pkm.getResourcesForApplication("com.user.package");
}
catch (NameNotFoundException e)
{
e.printStackTrace();
}
if (resources == null)
return;
int TITLE = resources.getIdentifier("android:id/title", null, null);
int INBOX = resources.getIdentifier("android:id/big_text", null, null);
int TEXT = resources.getIdentifier("android:id/text", null, null);
String packagename = String.valueOf(event.getPackageName());
title = (TextView) localView.findViewById(TITLE);
inbox = (TextView) localView.findViewById(INBOX);
text = (TextView) localView.findViewById(TEXT);
Log.d("NOTIFICATION Package : ", packagename);
Log.d("NOTIFICATION Title : ", title.getText().toString());
Log.d("NOTIFICATION You have got x messages : ", text.getText().toString());
Log.d("NOTIFICATION inbox : ", inbox.getText().toString());
}
}
catch(Exception e)
{
Log.e("onAccessibilityEvent ERROR", e.toString());
}
}
Example Notification 1:
package : com.whatsapp, title : Hello, message: How are you
Example Notification 2:
package : com.whatsapp, title : Hello, message: you have 2 messages (instead of : What are you doing)
try this, below code works for me -
hope it will help you.
EDITED
create a folder named xml inside your res folder - create a xml in it named -"accessibilityservice" and paste below code -
and inside manifest update your service tag to below code -
It is rather simple by using the
extras
field in the notification. The key that holds the expanded text lines isEXTRA_TEXT_LINES
.This is working for me:
This code works perfectly for me:
I researched some days to get this method, i have tested it on Android 4.4, 5.5 and 6.0. You can also use the method
Then you can get all written messages. Hope it helps.