• QQ
  • nahooten@sina.com
  • 常州市九洲新世界花苑15-2

Android

让你监控Android手机的notify栏

原创内容,转载请注明原文网址:http://homeqin.cn/a/wenzhangboke/jishutiandi/Android/2019/0728/585.html

 
 
非常非常要紧的源码其实就惟有下面我提到的这些了,非常焦点的功效都在上头了,以及可能遇到的坑。
 
 
 
原文:
 
 
 
有段光阴没写博了,想着照旧要写点东西,免得陌生了,恰好前段光阴做了一个抓取关照栏的功效,时代也走了少许弯路,
 
通过网上查资料,看Android源码,非常终总算办理了监控关照栏的功效。实现的结果如下:
 
 
 
 
 
但是在应用关照栏监控以前,开始要进行配置,要让手机容许你监控关照栏,真相App开发培训这是很隐衷的操纵,不然要是没有这个容许动作,辣么Android手机也太凶险了,
 
包含谈天信息,短消息都有可能被监控。配置如下:
 
 
 
在辅助功效这里,开启NotificationMonitor服无。
 
接下来来讲一下实现要领:
 
开始写一个类秉承AccessibilityService,AccessibilityService辅助服无,可以看官方先容:
 
http://developer.android.com/reference/android/accessibilityservice/AccessibilityService.html
 
这个服无运转在背景,当有定义的的AccessibilityEvent被触发时,则会进行响应的回调函数,关照栏必要应用到的事件是:
 
AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED
也即是关照栏状况变更事件。
代码如下:
 
public class NeNotificationService extends AccessibilityService {
 
@Override
public void onAccessibilityEvent(AccessibilityEvent event) {
 
//校验辅助服无触发的事件是否是关照栏转变事件
if (event.getEventType() == AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED)
{
   
    //获取Parcelable工具
    Parcelable data = event.getParcelableData();
   
    //校验是否是Notification工具
if (data instanceof Notification) {
 
Notification notification = (Notification) data;
 
Intent intent = new Intent();
intent.putExtra("NotifyData", notification);
intent.putExtra("packageName", event.getPackageName());
 
intent.setAction(".NeNotificationService");
 
//进行常州网站开发培训处分剖判关照栏内容的函数
MainActivity.notifyReceive((String)event.getPackageName(), notification);
 
}else
{
   
}
 
}
 
 
/**
*Service被启动的时候会挪用这个API
*/
@Override
protected void onServiceConnected() {
//配置关心的事件范例
AccessibilityServiceInfo info = new AccessibilityServiceInfo();
info.eventTypes = AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED |
AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED |
AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED;
info.feedbackType = AccessibilityServiceInfo.FEEDBACK_GENERIC;
info.notificationTimeout = 100;//两个相像事件的超时光阴隔断
setServiceInfo(info);
}
}
 
这个服无类在应用以前肯定是要先被启动的,启动可以放在MainActivity的某个按钮点击时:
//在MainActivity.onCreate里初始化
Intent upservice = new Intent(this, NeNotificationService.class);
//按钮按下时更新或启动服无
accesscStartNo.setOnClickListener(new View.OnClickListener() {
 
@Override
public void onClick(View v) {
updateServiceStatus(true);
}
});
//这里防备屡次启动服无,以是先校验服无是否在运转中
private void updateServiceStatus(boolean start)
{
boolean bRunning = util.isServiceRunning(this, "com.nis.bcreceiver.NeNotificationService");
 
//没有Running则启动
if (start && !bRunning) {
this.startService(upservice);
} else if(!start && bRunning) {
this.stopService(upservice);
}
 
}
//另外必要在AndroidManifest.xml文件中配置
<service android:name="com.nis.bcreceiver.NeNotificationService"
android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE"
android:label="NotificationMonitor"
android:enabled="true"
android:exported="false">
<intent-filter>
<action android:name="android.accessibilityservice.AccessibilityService"/>
</intent-filter>
<meta-data
android:name="android.accessibilityservice"
android:resource="@xml/accessibilityservice" />
</service>
 
 
如许我们根基实现了Notification的监控和抓取,至于要是你想剖判出甚么数据,便处分这个
notification变量。通过多个程序的测试,发现notification里对照有效的即是contentView,这是一个干脆表现在
</pre></p><p>界面上的View,我们只要剖判它便获取展现的View的题目及文本内容,处分代码如下:</p><p><pre name="code" class="java">  private void AnalyzeView(RemoteViews remoteView, String packName) {
try {
//把RemoteView apply后造成目前可以处分的View
View v1 = remoteView.apply(this, rootLayout);
 
//而后即是枚举处分这个View的内容
EnumGroupViews(v1);
 
//展现出来
rootLayout.addView(v1);
 
 
} catch (Exception e) {
AppLog.e("addToUi excep",e);
}
 
}
private void EnumGroupViews(View v1)
{
if(v1 instanceof ViewGroup)
{
 
ViewGroup lav = (ViewGroup)v1;
int lcCnt = lav.getChildCount();
for(int i = 0; i < lcCnt; i++)
{
View c1 = lav.getChildAt(i);
if(c1 instanceof ViewGroup)
EnumGroupViews(c1);//递归处分GroupView
else if(c1 instanceof TextView)
{
//TestView则剖判内部文本内容
TextView txt = (TextView)c1;
String str = txt.getText().toString().trim();
if(str.length() > 0)
{
//这里常州软件技术培训打印文本内容
}
 
AppLog.i( "TextView id:"+ txt.getId() + ".text:" + str);
}else
{
AppLog.w("2 other layout:" + c1.toString());
 
}
}
}
else {
AppLog.w("1 other layout:" + v1.toString());
}
}
 
通过这个剖判,我们根基上实现了从监控、抓取、剖判内容的历程。网上也另有其它少许剖判处分的要领,朋友们也能够参考,以上剖判remoteView是本人
在查看其响应源码环境下本人揣摩出来的,并且测试了十几款有推送消息的运用,都可以平常剖判其所有内容。
 
 

上篇:上一篇:WebView-Android与H5交互
下篇:下一篇:AndroidStudio异常drawable context