【问题标题】:How to close an Activity using push Notification in Firebase?如何在 Firebase 中使用推送通知关闭活动?
【发布时间】:2016-10-31 08:58:52
【问题描述】:

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

MainActivity.java

public class MainActivity extends FragmentActivity {

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

        new FirebaseMessagingService(MainActivity.this);
  }
}

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();
    }
}

【问题讨论】:

    标签: java android firebase firebase-cloud-messaging


    【解决方案1】:

    您可以在MainActivity 中定义一个BroadcastReceiver,在触发时调用finish()

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

    在适当的时候注册/取消注册:

    @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();
    }
    

    然后您只需从onMessageReceived() 发送本地广播:

    public static final String ACTION_FINISH = "yourpackagename.ACTION_FINISH";
    
    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        LocalBroadcastManager.getInstance(getApplicationContext())
            .sendBroadcast(new Intent(ACTION_FINISH));
    }
    

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

    【讨论】:

      猜你喜欢
      • 2018-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-27
      • 1970-01-01
      • 2023-02-22
      • 2013-04-04
      • 1970-01-01
      相关资源
      最近更新 更多