问题描述
我正在开发一个将 Parse SDK
与 back4app 以及 Jitsi Video Conferencing SDK
结合使用的应用程序。我让用户根据兴趣选择其他用户加入 Jitsi 视频会议,并通过在 back4app 服务器上运行的 Parse 处理后端。
这是我目前正在实施的:
- 在用户 1 被其他用户选择加入
Jitsi Video Call
后,我想向用户 1 发送推送通知 - 当用户 1 打开推送通知时,我想向他们展示一个特殊的
IncomingCallActivity
,它仅用于此特定事件,否则无法访问 - 此
IncomingCallActivity
基本上允许用户加入或不加入 Jitsi 会议
虽然我已经设法实现了所有这些,但我发现我的 IncomingCallActivity
有时会随机关闭(或 finish()
-es?)本身,或者更糟糕的是,启动 JitsiMeetActivity
但然后失去焦点,使用户加入会议但看不到视频通话屏幕。
我在 4 部不同的设备(1 部华为手机和 3 部 Android 手机)以及不同的 Android 版本(Android 7、9,主要是 Android 10)上测试了我的应用,但无法可靠地重现这种行为。我还尝试使用 WiFi 和移动数据接收/打开推送通知,但也无法推导出模式。
- 有时
IncomingCallActivity
会一直停留在屏幕上,直到 按钮被按下加入会议,JitsiMeetActivity
工作 - 其他时候
IncomingCallActivity
只对几个人可见 秒然后finish()
-ed (?) 本身 - 或者
IncomingCallActivity
一直停留在屏幕上,直到按钮被 按下,仅用于JitsiMeetActivity
开始拆分 第二个,IncomingCallActivity
结束自己,而JitsiMeetActivity
仍在后台某处运行
任何想法导致这种行为或如何摆脱这种行为? 非常感谢任何反馈!
可以在此处找到 IncomingCallActivity
的代码以及我的子类 ParsePushbroadcastReceiver
来处理通知事件:
IncomingCallActivity
:
internal val TAG = IncomingCallActivity::class.java.simpleName
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_incoming_call)
val incomingCallConfirmButton: Button = findViewById(R.id.incoming_call_confirmation_button)
incomingCallConfirmButton.setonClickListener {
var ownJitsiLink: String
// make sure that a user is logged in
val appUser = ParseUser.getCurrentUser()
if (appUser != null) {
// make a query for whole ParSEObject of additionalInfo of the current user
val queryAdditionalInfo = ParseQuery.getQuery<ParSEObject>("AppUserData")
// use the current users' objectId as a key to find the correct AppUserData object
// find companion object where userId is equal to objectId of the current ParseUser
queryAdditionalInfo.whereEqualTo("userId",appUser.objectId)
queryAdditionalInfo.fromLocalDatastore()
queryAdditionalInfo.ignoreACLs()
queryAdditionalInfo.getFirstInBackground { parSEObject,e ->
if (e == null) {
userJitsiLink = parSEObject.get("jitsiLink").toString()
// set isOnline to false and save in background
parSEObject.put("isOnline",false)
parSEObject.put("isTalking",true)
parSEObject.saveInBackground() {
if (it == null) {
Log.d(TAG,"User_AppUserInfo isOnline was set to false")
}
}
val appCallOptions = JitsiMeetConferenceOptions.Builder()
.setRoom(/ownJitsiLink)
.setAudioMuted(false)
.setVideoMuted(false)
.setAudioOnly(false)
.setFeatureFlag("call-integration.enabled",false)
.setFeatureFlag("overflow-menu.enabled",false)
.setFeatureFlag("close-captions.enabled",false)
.setFeatureFlag("filmstrip.enabled",false)
.setFeatureFlag("invite.enabled",false)
.setFeatureFlag("live-streaming.enabled",false)
.setFeatureFlag("meeting-name.enabled",false)
.setFeatureFlag("raise-hand.enabled",false)
.setFeatureFlag("recording.enabled",false)
.setFeatureFlag("server-url-change.enabled",false)
.setFeatureFlag("toolBox.enabled",false)
.setWelcomePageEnabled(false)
.build()
// starts a JitsiMeetActivity with specified options
JitsiMeetActivity.launch(this,appCallOptions)
// after JitsiMeetActivity is done
Log.d(TAG,"JitsiMeetActivity was ended")
// after JitsiMeetActivity finished,change variables back and save to server
parSEObject.put("isOnline",true)
parSEObject.put("isTalking",false)
parSEObject.save()
Log.d(TAG,"User_AppUserInfo isOnline was set back to true")
// then finish the Activity
finish()
} else {
// something went wrong,print error message e
Toast.makeText(this,e.toString(),Toast.LENGTH_SHORT).show()
}
}
}
}
}
子类 ParsePushbroadcastReceiver MyPushNotificationReceiver
override fun onPushOpen(context: Context,intent: Intent?) {
super.onPushOpen(context,intent)
val intentIncomingCallActivity = Intent(context,IncomingCallActivity::class.java).apply {
flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
}
intentIncomingCallActivity.putExtras(intent!!)
context.startActivity(intentIncomingCallActivity)
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)