- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
应用程序第一次因为一些错误而崩溃后,再次创建并绑定(bind)了 NLService,但是在第 2 次或第 3 次之后......,不再创建和绑定(bind) NLService,即使是复选框
设置 > 安全 > 通知访问
勾选了,这种情况怎么办?
网络服务:
import android.content.Intent;
import android.os.IBinder;
import android.service.notification.NotificationListenerService;
import android.service.notification.StatusBarNotification;
import android.util.Log;
public class NLService extends NotificationListenerService {
private String TAG = this.getClass().getSimpleName();
@Override
public void onCreate() {
super.onCreate();
Log.d(TAG, "==onCreate==");
}
@Override
public void onDestroy() {
super.onDestroy();
Log.d(TAG, "==onDestroy==");
}
@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());
}
@Override public int onStartCommand(Intent intent, int flags, int startId){
Log.d(TAG, "==onStartCommand==");
return super.onStartCommand(intent, flags, startId);
}
@Override public IBinder onBind(Intent intent) {
Log.d(TAG, "==onBind==");
return super.onBind(intent);
}
@Override public void onRebind(Intent intent) {
super.onRebind(intent);
Log.d(TAG, "==onRebind==");
}
@Override public boolean onUnbind(Intent intent) {
Log.d(TAG, "==onUnbind==");
return super.onUnbind(intent);
}
}
并在manifest.xml中注册
<service android:name="com.kpbird.nlsexample.NLService"
android:label="@string/app_name"
android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE">
<intent-filter>
<action android:name="android.service.notification.NotificationListenerService" />
</intent-filter>
</service>
最佳答案
还有问题吗?
我处于同样的情况,这个 NLService 似乎不会协作......
作为一个“伪”解决方法,我注意到如果您在调试 session 期间选中和取消选中 Settings > Security > Notification access
并在 onCreate 中放置一个断点() 您可以在服务启动时进行拦截,但不太清楚为什么有时会停止...
另一种可能性是重启设备...
试试吧,也许你会找到解决的方法,我还在努力...
更新
也许服务中发生了一些变化。这是我在多个设备上运行的测试(我已经尝试了好几天)。
安装应用程序后,您可以在设置中启用通知访问权限,然后您可以尝试使用代码。
build.gradle 文件
apply plugin: 'com.android.application'
android {
compileSdkVersion 23
buildToolsVersion "23.0.2"
defaultConfig {
applicationId "your_application_id"
minSdkVersion 18
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.1.1'
compile 'com.android.support:design:23.1.1'
}
AndroidManifest.xml文件
这里我们声明并添加带有NotificationListener的服务(我们创建的类名)
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="insert_your_package">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".AMain"
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service
android:name=".NotificationListener"
android:label="@string/app_name"
android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE">
<intent-filter>
<action android:name="android.service.notification.NotificationListenerService" />
</intent-filter>
</service>
</application>
</manifest>
AMain.java文件
package insert_your_package;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;
public class AMain extends AppCompatActivity {
protected TextView textView;
protected NotificationReceiver notificationReceiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.a_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
textView = (TextView) findViewById(R.id.textview);
notificationReceiver = new NotificationReceiver();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("com.dev.name.test");
registerReceiver(notificationReceiver, intentFilter);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
class NotificationReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String temp = intent.getStringExtra("notification_event") + "\n" + textView.getText();
textView.setText(temp);
}
}
}
NotificationListener.java文件
package insert_your_package;
import android.content.Intent;
import android.service.notification.NotificationListenerService;
import android.service.notification.StatusBarNotification;
import android.util.Log;
public class NotificationListener extends NotificationListenerService {
private String TAG = this.getClass().getSimpleName();
@Override
public void onNotificationPosted(StatusBarNotification sbn) {
Log.i(TAG, "********** onNotificationPosted");
Log.i(TAG, "ID :" + sbn.getId() + "\t" + sbn.getNotification().tickerText + "\t" + sbn.getPackageName());
Intent i = new Intent("com.dev.name.test");
i.putExtra("notification_event", sbn.getPackageName() + " posted");
sendBroadcast(i);
}
@Override
public void onNotificationRemoved(StatusBarNotification sbn) {
Log.i(TAG, "********** onNotificationPosted");
Log.i(TAG, "ID :" + sbn.getId() + "\t" + sbn.getNotification().tickerText + "\t" + sbn.getPackageName());
Intent i = new Intent("com.dev.name.test");
i.putExtra("notification_event", sbn.getPackageName() + " removed");
sendBroadcast(i);
}
@Override
public void onDestroy() {
super.onDestroy();
}
}
如您所见,文本添加了发生的每个已发布或已删除的通知。现在服务可以正常工作了,我们可以做我们想要的了。
尝试并判断它是否有效。
关于Android:NotificationListenerService 未再次创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27778015/
我有一个 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 :
我是一名优秀的程序员,十分优秀!