隐藏Android活动

时间:2017-06-20 16:33:47

标签: android react-native firebase-cloud-messaging

我正在使用react-native-fcm开发一个电话呼叫应用程序,以便在来电时通知用户。这是我收到通知时的应用程序。

    Intent launchIntent = getPackageManager().getLaunchIntentForPackage("com.myApp");

    startActivity(launchIntent);

到目前为止一切都很好,但我希望我的活动在背景上开始,而不是显示任何关于它的视觉信息。我可以使用moveTaskToBack(true);在MainActivity中执行此操作,但它会闪烁1秒,无论如何都可以在没有闪烁的情况下执行此操作吗?

2 个答案:

答案 0 :(得分:0)

您为什么使用活动?如果要在后台运行,请使用服务。如果稍后需要显示UI,则启动活动。

答案 1 :(得分:0)

因为您只想显示来自firebase服务的通知。查看清单文件:

<service android:name=".YourFirebaseMessagingService" android:enabled="true" android:exported="true">
  <intent-filter>
     <action android:name="com.google.firebase.MESSAGING_EVENT"/>
  </intent-filter>
</service>

该服务有一个带有com.google.firebase.MESSAGING_EVENT操作的意图过滤器,您只需通过扩展FirebaseMessagingService并覆盖onMessageReceived方法来实施该服务。

请注意,大多数邮件类型都提供了onMessageReceived,但以下情况除外:

当您的应用在后台时,会发送

通知消息。在这种情况下,通知将传递到设备的系统托盘。用户点按通知会默认打开应用启动器。

包含通知和数据有效负载的消息,包括后台和前台。在这种情况下,通知将传递到设备的系统托盘,并且数据有效负载将在启动器活动的附加内容中传递。

enter image description here

服务在主线程上运行,除非另有明确说明。这意味着您可以显示您喜欢的任何通知,或者开始新的活动。

以上是上述例子:

public class YourFirebaseMessagingService extends FirebaseMessagingService {

    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        if (remoteMessage.getNotification().getBody() != null) {
            Log.e("FIREBASE", "Message Notification Body: " + remoteMessage.getNotification().getBody());
            //DO WHATEVER YOU NEED HERE TO DISPLAY YOUR MESSAGE OR ACTIVITY
        }
    }
}

请注意,如果您想要唤醒后台应用程序,则需要对以下URL执行POST:

POST https://fcm.googleapis.com/fcm/send

以下标题:

  

密钥:内容类型,价值: application / json

     

密钥:授权,价值:密钥= <your-server-key>

有关详细信息,请查看此link和此answer