- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我在对抗 NotificationListenerService 时运气不佳。我尝试了很多在这里和那里找到的食谱,尤其是关于……但它的效果很不一致。
先看代码:
list :
<service
android:name=".services.NLService"
android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE" >
<intent-filter>
<action android:name="android.service.notification.NotificationListenerService" />
</intent-filter>
</service>
然后是服务本身:
public class NLService extends NotificationListenerService {
private String TAG = "NLService";
// bind and unbind seems to make it work with Android 6...
// but is never called with Android 4.4...
@Override
public IBinder onBind(Intent mIntent) {
IBinder mIBinder = super.onBind(mIntent);
Log.i(TAG, "onBind");
return mIBinder;
}
@Override
public boolean onUnbind(Intent mIntent) {
boolean mOnUnbind = super.onUnbind(mIntent);
Log.i(TAG, "onUnbind");
isNotificationAccessEnabled = false;
try {
} catch (Exception e) {
Log.e(TAG, "Error during unbind", e);
}
return mOnUnbind;
}
// onCreate is called with Android 4.4
// because the service is explicitly started from the MainActivity.
// Not on Android 6 where the system binds this service itself...
@Override
public void onCreate() {
super.onCreate();
Log.i(TAG, "********** onCreate");
@Override
public void onNotificationPosted(StatusBarNotification sbn) {
Log.i(TAG, "********** onNotificationPosted");
Log.i(TAG, "ID :" + sbn.getId() + "\t" + sbn.getNotification().tickerText + "\t" + sbn.getPackageName());
}
@Override
public void onNotificationRemoved(StatusBarNotification sbn) {
Log.i(TAG, "********** onNOtificationRemoved");
Log.i(TAG, "ID :" + sbn.getId() + "\t" + sbn.getNotification().tickerText + "\t" + sbn.getPackageName());
}
}
并且在主 Activity 中启动服务,或者我们要求用户在需要时启用设置:
if (!Utilities.hasNotificationAccess(this))
{
Intent intent = new Intent("android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS");
startActivity(intent);
Log.i(TAG,"hasNotificationAccess NO");
}
else
{
Log.i(TAG,"hasNotificationAccess YES");
// without this startService, it never works with Android 4.4...
// but this is not needed in Android 6...
Intent mServiceIntent = new Intent(this, NLService.class);
startService(mServiceIntent);
}
显然,通知的安全设置访问已启用...
在安卓 6 上:
在 NLService 本身,添加 onBind 和 onUnbind 方法使其工作,我可以看到 onBind 日志,并且很好地触发了 onNotificationPosted。但它一直持续到应用程序的下一次启动,然后不再有绑定(bind),不再有 onNotificationPosted,只是没有发生,直到我返回安全设置以取消选中-重新检查通知访问:每次重复此操作应用程序启动在生产环境中是不可能的。
在 Android 4.4 上:
与 Android 6 相比,在 MainActivity 中我需要显式启动 NLService 否则它永远不会自行统计。但是它再次适用于第一次启动并且在取消选中 - 重新检查安全设置之前永远不会再次运行......
我错过了一些明显的东西吗?
最佳答案
Android 缓存存在问题。当您在设备上上传应用程序时,操作系统会将您的服务连接到通知管理器。如果您之前运行过您的应用,Android 会在缓存中找到此服务,因此它不会重新连接。
解决方法:在您的设备上推送应用之前,重命名您的服务(Android Studio 中的重构选项运行良好)- Android 会将此服务识别为新服务并连接到通知管理器。
https://developer.android.com/reference/android/service/notification/NotificationListenerService.html#onListenerConnected() - 此方法将在连接到通知管理器后调用,因此您可以检查您的服务是否已连接。
关于android - 为什么这个 NotificationListenerService 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33530807/
我有一个 NotificationListenerService 和一个: @Override public void onNotificationPosted(StatusBarNotificati
NotificationListenerService可以用在android wear上吗? orb 是否有某种监听器可以监听可穿戴设备中的调用或通知? 最佳答案 通常我会做的是有一个电话和一个可穿戴
在扩展新的(SDK18,JB-4.3)NotificationListenerService 的服务中,我想获取通知的状态栏图标。 mStatusBarNotification.getNotifica
我在创建扩展 android.service.notification.NotificationListenerService 的服务时遇到问题 根据 https://developer.androi
在 android 4.4 中,我发现一些用户使用我实现的 notificationListenerService 将停止工作。我自己也亲眼见过。 我从来没有设法在它发生时捕捉到任何 logcat,但
我希望这不会违反任何规则,因为我已尝试遵循如何提问指南。 我正在尝试使用 NotificationListenerService 读取传入的通知,它对我有用,但只是部分有用。 它的第一个通知类型,比方
应用程序第一次因为一些错误而崩溃后,再次创建并绑定(bind)了 NLService,但是在第 2 次或第 3 次之后......,不再创建和绑定(bind) NLService,即使是复选框 设置
我正在尝试实现在 android 4.3 中添加的 NotificationListnerService,但我无法获取通知详细信息。 我的代码如下 public class MainActivity
随着 Android M 中 Doze 的引入,Android 在 Doze 期间对后台执行的限制越来越多。有人可以详细说明在扩展 Android 自己的服务时是否同样适用。比如Notificatio
我有一个派生自 NotificationListenerService 的类,它会在应用程序启动时自动为我创建和启动。但是,我想稍后从 Activity 中懒惰地启动该服务,而不是在应用程序启动时自动
我在我的 android 应用程序中从 Intentservice 启动前台服务,服务开始通知。这就是我开始服务的方式: Intent intent = new Intent(this, Naviga
我现在已经尝试了 10 多个小时,但我似乎无法考虑任何其他事情。我尝试了互联网上所有可能的示例,但没有成功。 我有扩展NotificationListenerService的NotificationM
我有一个 app还有一个 NotificationListenerService。当我在该 NotificationListenerService 中添加断点时,断点似乎停止了执行,但调试器无法识别它
我已经实现了 NotificationListenerService,但它不工作。这是服务: public class NotificationListener extends Notificatio
是否可以阅读在用户移动时定期显示的 Google map 导航通知? 例如,距离下一回合的剩余距离会定期更新。为此,我尝试使用 NotificationListenerService,但当我尝试使用
我会收听 WhatsApp 消息等通知。 但每次通知进入 NotificationListenerService 时都会触发两次。 有人知道这个问题吗?? 这是 AndroidManifest.xml
我在写 NotificationListenerService , 我想在其中获取发送到状态栏的通知的详细信息。 但我们唯一得到的是 Ticket text ,在某些情况下它是 null。 最佳答案
下面是我捕获通知的代码。我不明白为什么 onNotificationPosted 没有被解雇。 我正在通过“设置”>“安全”授予我的应用通知访问权限,MyNotifService 中的 onCreat
我有一个简单的 NotificationListenerService 实现来测试新的 4.3 API。该服务本身曾经工作过。之后,我添加了在添加特定包的通知时发送广播。现在,只要我启动该服务,它就会
我在对抗 NotificationListenerService 时运气不佳。我尝试了很多在这里和那里找到的食谱,尤其是关于……但它的效果很不一致。 先看代码: list :
我是一名优秀的程序员,十分优秀!