当前位置: 首页 > 知识库问答 >
问题:

NotificationListenerService在设备BOOT_COMPLETE之后不工作

孙震博
2023-03-14

我正在使用notificationlistnerservice它工作得很好,过了一段时间后它就不能工作了,特别是在设备启动后它不能启动了。我已经给出了listner所需的所有权限,这里是我的代码。

public class Whatsapp_listner extends NotificationListenerService
{
 private static final String TAG = "NotificationListener";
 private static final String WA_PACKAGE = "com.whatsapp";

@Override
public void onListenerConnected() {
    super.onListenerConnected();
    Log.i("tag","Listner conneted");
}

@Override
public void onCreate() {
    super.onCreate();
}
@RequiresApi(api = Build.VERSION_CODES.Q)
@Override
public void onNotificationPosted(StatusBarNotification sbn) {
    if (!sbn.getPackageName().equals(WA_PACKAGE)) return;


    long yourmilliseconds = sbn.getPostTime();
    SimpleDateFormat sdf = new SimpleDateFormat("dd MMM yyyy");
    Date resultdate = new Date(yourmilliseconds);
    String date = sdf.format(resultdate);

    SimpleDateFormat my_time=new SimpleDateFormat("hh:mm aa");
    Date timer=new Date(yourmilliseconds);
    String time=my_time.format(timer);




    String modifiyedUniq = sbn.getUid() + sbn.getId() + sbn.getTag();


    Log.e(TAG, "Notification Key :: " + sbn.getKey());
    Log.e(TAG, "Notification Id :: " + sbn.getId());
    Log.e(TAG, "Notification postTime :: " + time);
    Log.e(TAG, "Notification From :: " + sbn.getPackageName());
    Log.e(TAG, "Notification TikerText :: " + sbn.getNotification().tickerText);
    Log.e(TAG, "Notification Title :: " + from);
    Log.e(TAG, "Notification Text :: " + message);


 

}

@RequiresApi(api = Build.VERSION_CODES.P)
@Override
public void onNotificationRemoved(StatusBarNotification sbn) {

    if (sbn.getPackageName().equals(WA_PACKAGE)){

        Log.i("notifyier", String.valueOf(sbn.getNotification().getSmallIcon().getResId()));
        Log.i("notifyier", String.valueOf(sbn.getNotification().extras.get("android.text")));
        int id=sbn.getNotification().getSmallIcon().getResId();
      

    }

}

这是正常工作的,但经过一段时间和引导完成后,is不工作,我使用广播接收器启动列表服务,但它仍然不工作

共有1个答案

桓瀚
2023-03-14

我已经通过添加几行代码找到了解决方案

 @Override
public void onListenerConnected() {
    super.onListenerConnected();
    Log.i("tag","Listner conneted");
    tryReconnectService();
}


 public void tryReconnectService() {
    toggleNotificationListenerService();
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
        ComponentName componentName =
                new ComponentName(getApplicationContext(), Whatsapp_recorder.class);

        //It say to Notification Manager RE-BIND your service to listen notifications again inmediatelly!
        requestRebind(componentName);
    }
}

/**
 * Try deactivate/activate your component service
 */
private void toggleNotificationListenerService() {
    PackageManager pm = getPackageManager();
    pm.setComponentEnabledSetting(new ComponentName(this, Whatsapp_recorder.class),
            PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
    pm.setComponentEnabledSetting(new ComponentName(this, Whatsapp_recorder.class),
            PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
}
 类似资料:
  • 我正在尝试将GCM用于IOS和Android客户端。当应用程序位于前台时,它似乎可以与IOS配合使用,但是,当应用程序位于后台时,通知中心不会收到消息,并且不会调用带有completionHandler的DidReceiveEmotentification。 我发现一个问题是从GCM到APN的消息格式错误。也就是说,它看起来就是这样: {“aps”:{“内容可用”:1},“数据id”:345} 顺

  • 我试图扫描BLE设备与 (我知道它在新版本中已经过时了,但我只是想看看它是否能与我的手机配合使用[4.4],我正在使用它)。因此,它开始扫描,然后继续,没有给出错误,但没有检测到设备。也会触发OnLEScan事件,但其中的设备参数为null。我的LE设备就在那里并已连接。 在Google上,我发现如果BluetoothAdapter没有UUID,就会发生这种情况。如何设置UUID?何时调用/启动O

  • 我一直在努力克服Boot_complete接收器不能在某些设备中工作的问题。 比如Vivo设备,它们有iManager应用程序和自动启动管理器。用户可以在设备启动时从自动启动切换应用程序。 我应该使用什么连同下面的意图过滤器重新启动我的服务后,设备重新启动。

  • 问题内容: 我有一个使用AngularJS的phonegap应用程序。 在我的应用程序上,我正在使用NetworkStatus插件来确认手机正在使用的连接类型。 在我的根路由上,我正在解析对服务的调用,该调用调用DeviceService,它负责访问navigator.network.connection.type并确定连接是打开还是关闭。解决方案(通过路由解析功能)将一个connectionSt

  • 这两种流类型的代码如下所示:

  • 我有一个网站,必须响应移动电话。我用我的桌面创建了它。当我调整浏览器窗口时,它在手机上工作得很好,但当我在我真正的手机上检查它:三星Galaxy S2时,它对手机视图没有反应。 会有什么问题吗?