如下图:

这个需求是别人外包项目给我提出的一个需求。

1.拿到通知栏的内容

2.将通知栏内容写入本地

3.显示通知内容到屏幕上

这demo目前就这三个小模块

这是获取的微信消息的内容

我们来看下源码:

MyNotifiService.java

package com.qfy.getnotifiservice;import android.annotation.SuppressLint;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Environment;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.service.notification.NotificationListenerService;
import android.service.notification.StatusBarNotification;
import android.util.Log;
import android.widget.Toast;import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.text.SimpleDateFormat;
import java.util.Date;@SuppressLint("OverrideAbstract")
public class MyNotifiService extends NotificationListenerService {private BufferedWriter bw;private SimpleDateFormat sdf;private MyHandler handler = new MyHandler();private String nMessage;private String data;Handler mHandler = new Handler(Looper.getMainLooper()) {@Overridepublic void handleMessage(Message msg) {String msgString = (String) msg.obj;Toast.makeText(getApplicationContext(), msgString, Toast.LENGTH_LONG).show();}};@Overridepublic int onStartCommand(Intent intent, int flags, int startId) {Log.i("KEVIN", "Service is started" + "-----");data = intent.getStringExtra("data");return super.onStartCommand(intent, flags, startId);}@Overridepublic void onNotificationPosted(StatusBarNotification sbn) {//        super.onNotificationPosted(sbn);try {//有些通知不能解析出TEXT内容,这里做个信息能判断if (sbn.getNotification().tickerText != null) {SharedPreferences sp = getSharedPreferences("msg", MODE_PRIVATE);nMessage = sbn.getNotification().tickerText.toString();Log.e("KEVIN", "Get Message" + "-----" + nMessage);sp.edit().putString("getMsg", nMessage).apply();Message obtain = Message.obtain();obtain.obj = nMessage;mHandler.sendMessage(obtain);init();if (nMessage.contains(data)) {Message message = handler.obtainMessage();message.what = 1;handler.sendMessage(message);writeData(sdf.format(new Date(System.currentTimeMillis())) + ":" + nMessage);}}} catch (Exception e) {Toast.makeText(MyNotifiService.this, "不可解析的通知", Toast.LENGTH_SHORT).show();}}private void writeData(String str) {try {
//            bw.newLine();
//            bw.write("NOTE");bw.newLine();bw.write(str);bw.newLine();
//            bw.newLine();bw.close();} catch (IOException e) {e.printStackTrace();}}private void init() {sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");try {FileOutputStream fos = new FileOutputStream(newFile(), true);OutputStreamWriter osw = new OutputStreamWriter(fos);bw = new BufferedWriter(osw);} catch (IOException e) {Log.d("KEVIN", "BufferedWriter Initialization error");}Log.d("KEVIN", "Initialization Successful");}private File newFile() {File fileDir = new File(Environment.getExternalStorageDirectory().getPath() + File.separator + "ANotification");fileDir.mkdir();String basePath = Environment.getExternalStorageDirectory() + File.separator + "ANotification" + File.separator + "record.txt";return new File(basePath);}class MyHandler extends Handler {@Overridepublic void handleMessage(Message msg) {switch (msg.what) {case 1:
//                    Toast.makeText(MyService.this,"Bingo",Toast.LENGTH_SHORT).show();}}}
}

再看下mainactivity.java

package com.qfy.getnotifiservice;import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Build;
import android.provider.Settings;
import android.support.annotation.RequiresApi;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;import com.gionee.notificationmonitor.R;public class MainActivity extends AppCompatActivity {private EditText editText;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Button button = findViewById(R.id.button);Button button2 = findViewById(R.id.button2);Button button3 = findViewById(R.id.button3);editText = findViewById(R.id.editText);Intent  intent = new Intent(MainActivity.this, MyNotifiService.class);//启动服务startService(intent);//启动服务final SharedPreferences sp = getSharedPreferences("msg", MODE_PRIVATE);button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {String getMsg = sp.getString("getMsg", "");if (!TextUtils.isEmpty(getMsg)){editText.setText(getMsg);}}});button2.setOnClickListener(new View.OnClickListener() {@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP_MR1)@Overridepublic void onClick(View v) {//打开监听引用消息Notification accessIntent intent_s = new Intent(Settings.ACTION_NOTIFICATION_LISTENER_SETTINGS);startActivity(intent_s);}});button3.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent intent_p = new Intent(Settings.ACTION_APPLICATION_SETTINGS);startActivity(intent_p);}});}
}

再看下布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><EditTextandroid:id="@+id/editText"android:layout_width="match_parent"android:layout_height="wrap_content"android:hint="输入" /><Buttonandroid:id="@+id/button"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="获取收到的内容" /><Buttonandroid:id="@+id/button2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="开启通知监听服务" /><Buttonandroid:id="@+id/button3"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="开启数据读写权限" /></LinearLayout>

记得服务要在xml里面注册

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.gionee.notificationmonitor"><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/AppTheme"><activity android:name="com.qfy.getnotifiservice.MainActivity"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><serviceandroid:name="com.qfy.getnotifiservice.MyNotifiService"android:priority="1000"android:label="通知监控"android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE"><intent-filter><action      android:name="android.service.notification.NotificationListenerService" /></intent-filter></service></application></manifest>

如果是新手看不懂,可以下载我源码查看:

源码下载

感谢博主:https://www.cnblogs.com/gaigaige/p/7999337.html

Android开发之获取通知栏的内容相关推荐

  1. android获取版本号报错,Android开发:获取安卓App版本号的方法步骤

    在Android开发过程中,想要开发一个完整功能的App,各个地方的内容都要涉及到,比如获取App的系统版本号就是必须要有的功能.Android的App版本号相关内容比iOS的App版本号内容要多,而 ...

  2. android获取安卓版本,Android开发:获取安卓App版本号的方法步骤

    今天国庆节,在这举国欢庆的日子里,发一篇博文留念一下这个特殊的日子,国庆依然奋战在工作一线. 在Android开发过程中,想要开发一个完整功能的App,各个地方的内容都要涉及到,比如获取App的系统版 ...

  3. Android开发环境——模拟器AVD相关内容汇总

    Android开发环境将分为SDK相关内容.Eclipse ADT相关内容.模拟器AVD相关内容.调试器DDMS相关内容.日志LogCat相关内容.连接驱动ADB相关内容.内存泄露检测工具MAT相关内 ...

  4. Android开发之获取通话记录

    上一篇讲的是Android开发之获取手机通讯录,这一篇博客也将针对手机联系人这一块进行开发.下面是获取手机通话记录的详细步骤: 1. 首先,我们需要新建一个类CallLogInfo,用于通话记录的数据 ...

  5. Android开发之获取相册照片和获取拍照照片

    在Android的开发过程中,我们可能会读取手机里面的照片或者通过相机拍摄获取照片,这是两种常用的获取图片的方式,在做项目过程中也会经常遇到,下面来介绍一下这两种获取方式.. 1.从本地相册获取照片: ...

  6. android开发:获取键盘的高度(实测真实有效)

    android开发:获取键盘的高度(实测真实有效) 由于最近在做即时通讯,做类似于微信的点击键盘消失,弹出表情页面(表情页面的高度和键盘的高度一致),于是在网上看了好多android测键盘高度的代码, ...

  7. Android开发——后台获取用户点击位置坐标(可获取用户支付宝密码)

    1. getevent命令 我们首先是根据adb shell getevent命令获取到被点击位置的信息. 这里要说明的是,不同的手机手机获得的点击输出是不一样的.以我的真机为例,输出如下 本文原创, ...

  8. Android开发之获取当前展示的activity的包名,类名

    在进行Android开发学习过程中,有时候我们想实现这种功能: 从自己写的小应用里启动其它APP. 这听起来似乎很简单,使用intent的隐式启动就可以了. Intent intent = new I ...

  9. Android开发环境——Eclipse ADT相关内容汇总

     Android开发环境将分为SDK相关内容.Eclipse ADT相关内容.模拟器AVD相关内容.调试器DDMS相关内容.日志LogCat相关内容.连接驱动ADB相关内容.内存泄露检测工具MAT相关 ...

最新文章

  1. Caliburn.Micro 资源随时添加
  2. 抓取一个连续的网页_搞懂各大搜索引擎蜘蛛的抓取规则,快速获得排名!
  3. window.location获取url各项参数详解
  4. ubuntu-桌面版-常用设置
  5. bzoj4427【Nwerc2015】Cleaning Pipes清理管道
  6. OpenCASCADE绘制测试线束:拓扑命令之历史命令
  7. html触发js参数怎么用,js 绑定带参数的事件以及手动触发事件
  8. 【TensorFlow-windows】MobileNet理论概览与实现
  9. MySQL总结(二)——入门
  10. Linux 之 shell 比较运算符
  11. PHP - Redis实现入队出队
  12. SSM小项目(会议管理系统)二整合mybatis(图解超详细)
  13. 人脸识别(Face Recognition)简要综述
  14. linux查看jdk版本_linux环境查看jdk版本
  15. ECharts数据可视化饼状图(环形图-进度半圆形)
  16. pdf文件怎么编辑,如何修改pdf文字
  17. html阅读封面代码,HTML5/SVG 书本封面设计
  18. 关于最新版mumu模拟器(2.2.16)安装xposed框架
  19. linux删除文件夹或者文件
  20. 人工智能是怎样辅助安全自动化、分析处理和响应的?

热门文章

  1. 过程计算机控制综合课程设计,自动化10本 12升《计算机控制综合课程设计》任务书...
  2. tensorflow环境下的识别食物_在TensorFlow+Keras环境下使用RoI池化一步步实现注意力机制...
  3. 西门子上升沿指令_西门子SCL编程实例——霓虹灯顺序控制(DECO指令)
  4. Rplidar学习(五)—— rplidar使用cartographer_ros进行地图云生成
  5. mysql-ubuntu卸载安装mysql
  6. Angular16 Angular整合zTree、异步加载节点数据
  7. vue源码学习--vue源码学习入门
  8. [BZOJ 1048] [HAOI2007] 分割矩阵 【记忆化搜索】
  9. 使用完成端口监控文件目录的例子
  10. asp.net 导出Excel 设置格式