我正在制作VOIP通话应用程序。来电时,即使该应用程序关闭或从未打开,它也应会打开该应用程序。我们还需要从服务器收到呼叫通知。
我知道WhatsApp和Facebook Messenger这样的应用程序可以做到这一点,但是怎么办?
我们使用的设计类似于以下内容:Build a Calling App
我们尝试将Firebase Cloud Messaging用作recommended by Android documentation,虽然获得了一定程度的成功,但在关闭应用程序后却无法正常工作。
我们正在考虑接下来使用Sync Adapter或WorkManager,但是要花很多时间进行原型设计,我想问问是否有人成功或是否有现成的插件为此。
据我所知,Android 10也将受到限制。它说使用时间敏感的通知,但是仍然需要以某种方式从服务器触发这些通知。
答案 0 :(得分:1)
在您的通话活动中添加此代码。它将打开您的屏幕。
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);
}
在您的活动清单中,将intent-filter定义为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);
}