代码之家  ›  专栏  ›  技术社区  ›  Amjad Omari

startActivity inside service并非在所有android设备上都能正常工作

  •  0
  • Amjad Omari  · 技术社区  · 4 年前

    我必须从FirebaseMessagingService启动一个活动,在收到通知时调用以下代码

    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        // some code here...
    
        Intent intent = new Intent(this, MyActivity.class);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(intent);
    }
    

    当应用程序在后台时,我收到一个通知,结果是

    小米a2: MyActivity已成功启动。

    小米红米注7: 我的活动没有启动,即使没有崩溃也没有发生任何事情。

    0 回复  |  直到 4 年前
        1
  •  0
  •   Amin    4 年前

    因此,你希望用户在应用程序被关闭后仍能收到消息——你可以尝试使用后台服务,但由于Android 10禁止了Commonware提到的后台服务,而8&9版都会在一段时间后终止后台服务,你不应该依赖 onMessageReceived 当应用程序被终止时。相反,看看Firebase的 NotificationMessage docs

    通知消息 发送给用户并接收,无论设备是否处于打瞌睡模式或应用程序已被终止。这可能就是你要寻找的解决方案——让后台服务在Android 8+上运行将是困难的,在更新的版本中是不可能的。