android - 唤醒 Android 通话
问题描述
我正在制作一个 VOIP 通话应用程序。当来电时,它应该打开应用程序,即使应用程序已关闭或从未打开。我们还需要来自服务器的呼叫通知。
我知道 WhatsApp 和 Facebook Messenger 之类的应用程序可以做到这一点,但怎么做呢?
我们正在使用类似于以下的设计:构建一个呼叫应用程序
我们已尝试按照Android 文档的建议使用Firebase Cloud Messaging,虽然取得了一定的成功,但在应用程序关闭时它不起作用。
我们正在考虑下一步使用Sync Adapter或WorkManager,但原型化需要相当多的时间,我更想问是否有人成功或是否有现成的插件。
据我所知,Android 10也会受到限制。它说要使用时间敏感的通知,但这些仍然需要以某种方式从服务器触发。
解决方案
在您的调用活动中添加此代码。它会打开你的屏幕。
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);
}
推荐阅读
- dart - Flutter 将状态栏亮度更改为暗
- android - 设计视图上的 UI 在模拟器中的显示方式不同
- python-2.7 - Sorted 是按错误的方向排序数字吗?
- shell - Unix shell 脚本 - 如何在我的 shellscript 中使用 href 的输出
- c# - 我如何将 dateTimePickerValue 类型转换为 dateTime 类型
- flutter - 渐进式绘制到画布
- java - 在java中使用jackson反序列化日期字段时引发自定义异常
- php - PHP 和 Mysql 查询无法按预期工作
- android - Firebase setPersistenceEnabled(true) 下载的数据怎么样
- android - android things manifest.xml 中的 bindservice 选项 ACTION_BOOT_COMPLETED