OnListenerCOnnected in NotificationListenerService not being called

↘锁芯ラ 提交于 2020-01-03 18:01:42

问题


My app only does not work on Huawei and on other phones it does. Why??? I have that code in my MainActivity: package pl.ct8.wieprzco.wieprzwatch;

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Intent intent=new Intent("android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS");
    startActivity(intent);
    startService(new Intent(this,NotificationGetService.class));
}

}

And that simple code in NotificationGetService class:

public class NotificationGetService extends NotificationListenerService{
SharedPreferences sharedPreferences;
SharedPreferences.Editor spEditor;

@Override
public void onCreate(){
    sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
    spEditor = sharedPreferences.edit();
    Log.e("jej","swiat powiadomien");
    super.onCreate();
}

@Override
public void onListenerConnected(){
    super.onListenerConnected();
    Log.e("startCommand","yeah");
}

@Override
public int onStartCommand(Intent intent,int flags, int startId){
    Log.e("startCommand","yes");
    return super.onStartCommand(intent, flags, startId);
}

@Override
public void onNotificationPosted(StatusBarNotification sbn){
    super.onNotificationPosted(sbn);
    spEditor.putInt("notificationCount",sharedPreferences.getInt("notificationCount",0)+1);
    spEditor.apply();
    Log.e("ADDED","YESSSSSS");

}

@Override
public void onNotificationRemoved(StatusBarNotification sbn){
    super.onNotificationRemoved(sbn);
    spEditor.putInt("notificationCount",sharedPreferences.getInt("notificationCount",1)-1);
    spEditor.apply();
    Log.e("REMOVED","YESSSSSS");
}

}

That is my manifest:

<?xml version="1.0" encoding="utf-8"?>

<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />

<uses-permission android:name="android.permission.READ_CALL_LOG" />
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<uses-permission android:name="android.permission.INTERNET"/>

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <service android:name=".UpdateTimeService"/>
    <service android:name=".NotificationGetService"
        android:label="@string/service_name"
        android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE">
    <intent-filter>
        <action android:name="android.service.notification.NotificationListenerService" />
    </intent-filter>
    </service>
    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>


</application>

And it logs onCreate and onStartCommand, but no onListenerConnected or other. Please help i try to do that so much time. Very thanks John!!


回答1:


With me, the first time the app is installed on the phone it didn't work. I had to go to setting --> notification access --> turn on the notificationListener.

After I did this, it worked.

When I made some changes, it stopped working. Turned out Android has a caching problem, as you can read here. What you should do is rename (refactor) the notificationListenerService and it should work.




回答2:


Maybe it's just because you typed in the wrong tag for loggin?

In your snippet:

@Override
public void onListenerConnected(){
    super.onListenerConnected();
    Log.e("startCommand","yeah");
}

@Override
public int onStartCommand(Intent intent,int flags, int startId){
    Log.e("startCommand","yes");
    return super.onStartCommand(intent, flags, startId);
}

These two Log.e() calls both have tag "startCommand"...

Just in case relevant: the NotificationListernerService.onBind() method shouldn't be overridden... Overridding it will prevent onListenerConnected() from being called...




回答3:


Have you declared the necessary permission and intent filter in your Manifest for the service as following?

<service android:name=".NotificationListener"
      android:label="@string/service_name"
      android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE">
 <intent-filter>
     <action android:name="android.service.notification.NotificationListenerService" />
 </intent-filter>




回答4:


In my experience, messing with onBind() will also prevent it from being called.




回答5:


Have you checked this bug in Android? https://issuetracker.google.com/issues/36984668

The issue report reads:

I'm not seeing this issue in development, but ever since android 4.4 came out I'm getting many reports from users that my app notification monitoring just stops when they update the app. It's as if the
NotificationListenerService just becomes totally inactive.

The notification listener is still showing as on in their phones and my check to see if the listener is still enabled also show that it is enabled.

I'm having to then get users to reboot before they start getting any notifications again. I didn't see this behaviour in android 4.3

I can't even think of any way to programatically do anything about that as I guess there's no way to stop and restart the notification.




回答6:


You might be debugging your application. There are some issues while using NotificationListenerService in debugging mode. You should run your app, give permission to the app to listen to notifications. IF YOU HAVE ALREADY GIVEN THE PERMISSION, THEN REVOKE IT AND GRANT IT AGAIN. (If required, reboot your phone) The debugger will then hit.



来源:https://stackoverflow.com/questions/40448505/onlistenerconnected-in-notificationlistenerservice-not-being-called

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!