android - 如何为 Agora 1 对 1 视频通话应用显示来电通知
问题描述
由于 Agora 通过创建一个频道来工作,如何向其他用户显示有呼叫。我认为的一种方法是创建一个服务,该服务将使用改造来监听服务器,如果调用状态发生变化,我会将其显示给他,但在 android 后台服务受到限制。我认为的另一种方法是使用调度程序创建广播接收器。任何人都可以在这方面提供帮助。
class CallReciever : BroadcastReceiver() {
val REQUEST_CODE : Int= 12345
val ACTION :String= "com.codepath.example.servicesdemo.alarm"
override fun onReceive(context: Context, intent: Intent) {
val i = Intent(context, MyTestService::class.java)
startWakefulService(context, i)
}
}
class MyTestService : IntentService("MyTestService") {
override fun onHandleIntent(intent: Intent?) {
// Do the task here
getBanner()
}
private fun getBanner() {
val service = RetrofitCall.provideRetrofit().create(callrecieveAPI::class.java)
val call = service.banner()
call.enqueue(object : Callback<CallReceivePOJO> {
override fun onResponse(call: Call<CallReceivePOJO>, response: Response<CallReceivePOJO>) {
//showFailureDialog(GuestCheckoutActivity.this, response.body().getMessage());
CommonObjects.channelid =response.body()!!.data.toString()
}
override fun onFailure(call: Call<CallReceivePOJO>, t: Throwable) {
// handle execution failures like no internet connectivity
}
})
}
}
class SplashActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_splash)
scheduleAlarm()
object : CountDownTimer(5000, 1000) {
override fun onFinish() {
intent = Intent(applicationContext, VideoChatViewActivity::class.java)
startActivity(intent)
}
override fun onTick(p0: Long) {}
}.start()
}
fun scheduleAlarm() {
// Construct an intent that will execute the AlarmReceiver
val intent = Intent(applicationContext, CallReciever::class.java)
// Create a PendingIntent to be triggered when the alarm goes off
val pIntent = PendingIntent.getBroadcast(
this, REQUEST_CODE,
intent, PendingIntent.FLAG_UPDATE_CURRENT
)
// Setup periodic alarm every every half hour from this point onwards
val firstMillis = System.currentTimeMillis() // alarm is set right away
val alarm = this.getSystemService(Context.ALARM_SERVICE) as AlarmManager
// First parameter is the type: ELAPSED_REALTIME, ELAPSED_REALTIME_WAKEUP, RTC_WAKEUP
// Interval can be INTERVAL_FIFTEEN_MINUTES, INTERVAL_HALF_HOUR, INTERVAL_HOUR, INTERVAL_DAY
alarm.setInexactRepeating(
AlarmManager.RTC_WAKEUP, firstMillis,
10000, pIntent
)
}
解决方案
Agora 有一些示例应用程序展示了如何使用 Agora 的视频和实时消息 SDK 以及原生 API (Android 的 ConnectionService 和 iOS 的 CallKit)来实现“呼叫”功能。
安卓:https ://github.com/AgoraIO-Usecase/Video-Calling/tree/master/OpenDuo-Android
IOS:https ://github.com/AgoraIO-Usecase/Video-Calling/tree/master/OpenDuo-iOS
推荐阅读
- ssis - Hubspot(CRM)数据仓库
- delphi - 如何获取 Powerpoint 文件的总持续时间
- java - 如何获取拦截器中操作 url 中定义的参数
- c# - 我收到警告:您正在尝试使用“新”关键字创建 MonoBehaviour
- excel - 从表单返回到模块
- node.js - 使用 HTTP 模块的 AWS Lambda 函数未发出任何请求
- spring - 如何获取 Spring 应用程序中所有属性的映射?
- python - 无法将字符串转换为浮点数(熊猫)
- javascript - How to use innerHTML or innerText to insert into the Evernote editor which is the rich text editor?
- reactjs - Firebase 未使用新数据更新