首页 > 解决方案 > 唤醒 Android 通话

问题描述

我正在制作一个 VOIP 通话应用程序。当来电时,它应该打开应用程序,即使应用程序已关闭或从未打开。我们还需要来自服务器的呼叫通知。

我知道 WhatsApp 和 Facebook Messenger 之类的应用程序可以做到这一点,但怎么做呢?

我们正在使用类似于以下的设计:构建一个呼叫应用程序

我们已尝试按照Android 文档的建议使用Firebase Cloud Messaging,虽然取得了一定的成功,但在应用程序关闭时它不起作用。

我们正在考虑下一步使用Sync AdapterWorkManager,但原型化需要相当多的时间,我更想问是否有人成功或是否有现成的插件。

据我所知,Android 10也会受到限制。它说要使用时间敏感的通知,但这些仍然需要以某种方式从服务器触发。

标签: androidvoipwakeup

解决方案


在您的调用活动中添加此代码。它会打开你的屏幕。

    getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) {
        this.setTurnScreenOn(true);
    } else {
        final Window window = getWindow();
        window.addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
    }

并在您的活动清单中,将意图过滤器定义为 CALL

    <activity
        android:name=".activities.CallActivity"
        android:label="@string/app_name"
        android:launchMode="singleTop"
        android:screenOrientation="portrait"
        android:windowSoftInputMode="adjustPan|stateHidden">
        <intent-filter>
            <action android:name="android.intent.action.CALL" />
        </intent-filter>
    </activity>

当您在 onMessageReceived(RemoteMessage remoteMessage) 中收到来自 Firebase 的通知时,打开您的活动

openActivity(CallActivity.class);

public void openActivity(Class<?> tClass) {
    Intent i = new Intent(this, tClass);
    i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(i);
}

推荐阅读