如何在 Firebase 中使用推送通知关闭活动?

Zee*_*riq 2 java android firebase firebase-cloud-messaging

我正在处理 Firebase 推送通知,我想关闭MainActivity. 应用程序应在onMessageReceived()调用时完成。我也通过了,Context但它不起作用。在这种情况下,我会在应用程序打开时发送通知。我的代码:

主活动.java

public class MainActivity extends FragmentActivity {

  @Override
  protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        new FirebaseMessagingService(MainActivity.this);
  }
}
Run Code Online (Sandbox Code Playgroud)

FirebaseMessagingService.java

public class FirebaseMessagingService extends
             com.google.firebase.messaging.FirebaseMessagingService {

    Context context;
    public FirebaseMessagingService(Context ctx) {
        this.context = ctx;
    }

    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        context.finish();
    }
}
Run Code Online (Sandbox Code Playgroud)

ear*_*jim 6

您可以定义一个BroadcastReceiverin MainActivityfinish()在触发时调用:

private final BroadcastReceiver finishReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        finish();
    }
};
Run Code Online (Sandbox Code Playgroud)

在适当的时候注册/注销它:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // ...

    LocalBroadcastManager.getInstance(getApplicationContext())
        .registerReceiver(finishReceiver,
            new IntentFilter(FirebaseMessagingService.ACTION_FINISH));
}

@Override
protected void onDestroy() {
    LocalBroadcastManager.getInstance(getApplicationContext())
        .unregisterReceiver(finishReceiver);
    super.onDestroy();
}
Run Code Online (Sandbox Code Playgroud)

然后您只需要从onMessageReceived()以下位置发送本地广播:

public static final String ACTION_FINISH = "yourpackagename.ACTION_FINISH";

@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
    LocalBroadcastManager.getInstance(getApplicationContext())
        .sendBroadcast(new Intent(ACTION_FINISH));
}
Run Code Online (Sandbox Code Playgroud)

FirebaseMessagingService是一个Context子类,不需要传递另一个Context实例给它)