5分钟创建一个android监听通知服务
1、打开android studio,新建项目,选择一个基础的Activity
2、设置启动Activity名称
3、新建一个class,基类为android.service.notification.NotificationListenerService,勾选show select overrides dialog
4、选择需要重写的方法
5、在onNotificationPosted中记录通知的消息文字
Log.v("BFW", sbn.getNotification().tickerText.toString());
在AndroidManifest.xml加入
<service android:name="wiki.bfw.readnoticle.NotifyService" android:priority="1000" android:label="通知监控" android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE"> <intent-filter> <action android:name="android.service.notification.NotificationListenerService"> </action></intent-filter> </service>
6、在启动的activity中启动service
7、加入设置通知权限的方法
8、编译运行后的效果,先点击右下角图标,调到授权页面,授权app使用通知监听
9、模拟器中发布一条短信
10、我们可以看到日志中打印出刚才的短信内容,监听成功了
主要代码如下
NotifyActivity.java
package wiki.bfw.readnoticle; import android.content.Intent; import android.os.Bundle; import com.google.android.material.floatingactionbutton.FloatingActionButton; import com.google.android.material.snackbar.Snackbar; import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.widget.Toolbar; import android.provider.Settings; import android.view.View; public class NotifyActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_notify); Toolbar toolbar = findViewById(R.id.toolbar); setSupportActionBar(toolbar); Intent intent = new Intent(NotifyActivity.this, NotifyService.class);//启动服务 startService(intent);//启动服务 FloatingActionButton fab = findViewById(R.id.fab); fab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent_s = new Intent(Settings.ACTION_NOTIFICATION_LISTENER_SETTINGS); startActivity(intent_s); Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) .setAction("Action", null).show(); } }); } }NotifyService.java
package wiki.bfw.readnoticle; import android.content.Intent; import android.os.IBinder; import android.service.notification.NotificationListenerService; import android.service.notification.StatusBarNotification; import android.util.Log; public class NotifyService extends NotificationListenerService { @Override public void onNotificationPosted(StatusBarNotification sbn, RankingMap rankingMap) { Log.v("BFW", sbn.getNotification().tickerText.toString()); super.onNotificationPosted(sbn, rankingMap); } @Override public void onNotificationRemoved(StatusBarNotification sbn) { super.onNotificationRemoved(sbn); } @Override public IBinder onBind(Intent intent) { return super.onBind(intent); } @Override public boolean onUnbind(Intent intent) { return super.onUnbind(intent); } @Override public void onCreate() { super.onCreate(); } @Override public int onStartCommand(Intent intent, int flags, int startId) { return super.onStartCommand(intent, flags, startId); } @Override public void onDestroy() { super.onDestroy(); } }
AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="wiki.bfw.readnoticle"> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"> <uses-permission android:name="android.permission.INTERNET"> <application android: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" android:usescleartexttraffic="true"> <activity android:name=".NotifyActivity" android:label="@string/title_activity_notify" android:theme="@style/AppTheme.NoActionBar"> <intent-filter> <action android:name="android.intent.action.MAIN"> <category android:name="android.intent.category.LAUNCHER"> </category></action></intent-filter> </activity> <service android:name=".NotifyService" android:label="通知监控" android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE" android:priority="1000"> <intent-filter> <action android:name="android.service.notification.NotificationListenerService"> </action></intent-filter> </service> </application> </uses-permission></uses-permission></uses-permission></manifest>
网友评论0