@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());
}
}
package:com.whatsapp,标题:Hello,Message:How are you
通知示例2:
包:com.whatsapp,标题:Hello,Message:you有2条消息(而不是:What are you doing)
试试这个,下面的代码对我有用-
Notification notification = (Notification) event.getParcelableData();
RemoteViews views = notification.contentView;
Class secretClass = views.getClass();
try {
Map<Integer, String> text = new HashMap<Integer, String>();
Field outerFields[] = secretClass.getDeclaredFields();
for (int i = 0; i < outerFields.length; i++) {
if (!outerFields[i].getName().equals("mActions")) continue;
outerFields[i].setAccessible(true);
ArrayList<Object> actions = (ArrayList<Object>) outerFields[i]
.get(views);
for (Object action : actions) {
Field innerFields[] = action.getClass().getDeclaredFields();
Object value = null;
Integer type = null;
Integer viewId = null;
for (Field field : innerFields) {
field.setAccessible(true);
if (field.getName().equals("value")) {
value = field.get(action);
} else if (field.getName().equals("type")) {
type = field.getInt(action);
} else if (field.getName().equals("viewId")) {
viewId = field.getInt(action);
}
}
if (type == 9 || type == 10) {
text.put(viewId, value.toString());
}
}
System.out.println("title is: " + text.get(16908310));
System.out.println("info is: " + text.get(16909082));
System.out.println("text is: " + text.get(16908358));
}
} catch (Exception e) {
e.printStackTrace();
}
希望对你有帮助。
已编辑
<?xml version="1.0" encoding="utf-8"?>
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
android:accessibilityEventTypes="typeNotificationStateChanged"
android:accessibilityFeedbackType="feedbackSpoken"
android:notificationTimeout="100" />
<service
android:name=".YourServiceClassName"
android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE" >
<intent-filter>
<action android:name="android.accessibilityservice.AccessibilityService" />
</intent-filter>
<meta-data
android:name="android.accessibilityservice"
android:resource="@xml/accessibilityservice" />
</service>
问题内容: 使用Accessibility Service,我能够阅读通知栏的标题和消息,我所面临的问题是,当出现第一个通知时,我可以很好地阅读所有这些信息,但是在第一次通知之后,我只会收到标题和文本“您有2条消息”以此类推,而不是整个消息。等待您的专家意见。 代码: 通知示例1: 包:com.whatsapp,标题:你好,消息:你好吗 通知示例2: 包:com.whatsapp,标题:您好,消息
我研究了一下,我能找到的唯一答案是: > 如何禁止下拉通知栏。 如何使用以下方法取消通知: 我尝试了Android的Lollipop和牛轧糖,但通知栏都没有恢复。如果有人能告诉我这是不是可能的以及怎么做。多谢了。 生成通知的代码:
本文向大家介绍Android编程获取通知栏高度的方法,包括了Android编程获取通知栏高度的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Android编程获取通知栏高度的方法。分享给大家供大家参考,具体如下: 这里通过反射机制获取通知栏高度 通知栏高度写在dimen文件中: 希望本文所述对大家Android程序设计有所帮助。
报告不能全部以编程方式进行,因为它们的布局会不断发生变化,我们不能每次发生这种变化时都更新我们的软件。
问题内容: 是否可以通过编程将xml属性设置为标题,然后使用将该属性用于动画? 这就是我声明我的方式: 这是我的xml声明: 为了添加动画,我必须使用以下代码: 如何将(?)标题传递给函数? 问题答案: 是的,这是可能的: 扩展的类能够调用 例如: 更新 似乎您专门尝试共享标题,因此我将执行以下操作: MainActivity的示例xml: 然后在“活动”参考中,该视图: 然后在您的SecondA
问题内容: 我有一个标签栏应用程序,并且在我的第一个视图上有一个按钮,当我按下该按钮时,需要在标签栏中以编程方式切换到第二个标签页。 我似乎不太明白如何获取索引等以切换到它,我已经尝试过类似的东西。 没有成功。 问题答案: 多数民众赞成在非常简单的tabBarController被声明为可选类型 视图控制器层次结构中最接近的祖先,它是一个标签栏控制器。如果视图控制器或其祖先之一是标签栏控制器的子代