【问题标题】:Hide android activity隐藏安卓活动
【发布时间】:2017-06-20 16:33:47
【问题描述】:

我正在使用 react-native-fcm 开发一个电话应用程序,以在有来电时通知用户。这就是我收到通知后应用程序的方式。

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

    startActivity(launchIntent);

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

【问题讨论】:

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


【解决方案1】:

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

【讨论】:

  • 你可以在服务中做任何你可以在活动中做的事情,除了显示一个用户界面(甚至可以解决这个问题)。
【解决方案2】:

因为您只想显示来自 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,但以下情况除外:

通知消息在您的应用处于后台时发送。在这种情况下,通知将传送到设备的系统托盘。默认情况下,用户点击通知会打开应用启动器。

带有通知和数据负载的消息,包括后台和前台。在这种情况下,通知会传递到设备的系统托盘,而数据负载会在启动器 Activity 的 Intent 的附加部分中传递。

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

这是上面的一个例子:

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

以及以下标题:

Key: Content-Type,Value: application/json

Key:授权,Value: key=&lt;your-server-key&gt;

如需了解更多信息,请查看linkanswer

【讨论】:

  • 唯一的问题是触发我的应用程序打开的事件是在一个 npm 包 react-native-fcm 我该如何处理这是 android 文件?
  • @NicholasMendes 您的清单中有 Firebase 服务吗?像这样&lt;service android:name="com.evollu.react.fcm.MessagingService" android:enabled="true" android:exported="true"&gt;
  • 更新了我的回答,希望对你有帮助。
猜你喜欢
  • 2017-05-21
  • 2012-12-21
  • 1970-01-01
  • 2018-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多