xamarin 从消息处理程序启动活动

mspsb9vt  于 2023-01-03  发布在  其他
关注(0)|答案(1)|浏览(136)

我正在尝试实现类似于调用活动行为的东西。
我有一个如下所示的MessageHandler:

public class EventMessagesHandler : Handler
{
        private readonly Context _applicationContext;
        public EventMessagesHandler (Context applicationContext)
        {
            this._applicationContext = applicationContext; // not sure if this is necessary 
        }
        public override void HandleMessage(Message msg)
        {
            base.HandleMessage(msg);
            if (msg.What == Constants.DISPLAY_OUTGOING_CALL_ACTIVITY)
            {
                Intent outgoingCallIntent = new Intent(Application.Context, typeof(OutgoingAudioCallActivity));
                outgoingCallIntent.AddFlags(ActivityFlags.NewTask | ActivityFlags.ClearTask | ActivityFlags.ReorderToFront | ActivityFlags.SingleTop | ActivityFlags.ClearTop | ActivityFlags.NoHistory);
                Application.Context.StartActivity(outgoingCallIntent);
            }
            if (msg.What == Constants.DISPLAY_INCOMING_CALL_ACTIVITY)
            {
                Intent incomingCallIntent = new Intent(Application.Context, typeof(IncomingCallActivity));
                incomingCallIntent.AddFlags(ActivityFlags.NewTask | ActivityFlags.ReorderToFront);
                Application.Context.StartActivity(incomingCallIntent);
            }
        }
}

而在我的来电活动中,我在OnClick按钮中有以下代码,以打开呼出活动:

Intent outgoingCallIntent = new Intent(ApplicationContext, typeof(OutgoingAudioCallActivity));
outgoingCallIntent.AddFlags(ActivityFlags.ClearTask | ActivityFlags.ClearTop | ActivityFlags.NoHistory);
ApplicationContext.StartActivity(outgoingCallIntent);
Finish();

所需的行为如下:
让呼叫呼入活动-"活动A"和呼出活动-"活动B"。
要求如下:
1.当用户点击拒绝按钮时-"A"活动应从活动堆栈中删除并消失,这样我就无法从最近的应用程序中打开它。
1.当用户单击回答按钮时-从活动"A"打开活动"B",并从堆栈中删除活动"A",这样我就无法从"B"返回到活动"A",在最近的应用程序中,我将看到活动"B",而不是"A"。
1.当呼叫完成时(通过单击丢弃呼叫或远程端点丢弃呼叫),活动"B"应该完成-这意味着它在最近的应用程序中不可见。
1.当收到DISPLAY_OUTGOING_CALL_ACTIVITY消息时-"B"将在用户返回活动时打开,而无需重新初始化(通过点击主页按钮并从最近的应用程序打开或仅通过打开最近的应用程序并返回活动)
我相信它的大部分可以使用ActivityFlags实现,但是我没有找到正确的方法来获得想要的结果。
任何帮助都很好!
谢谢。

scyqe7ek

scyqe7ek1#

我能够通过执行以下操作来实现这些要求:
从处理程序启动传出活动时,我有以下活动标志:

ActivityFlags.NewTask | ActivityFlags.SingleTop | ActivityFlags.ClearTop | ActivityFlags.ClearTask

从呼入活动打开呼出活动具有与上述相同的标志。
来电活动包括以下内容:

ActivityFlags.NewTask

当我不得不关闭来电活动或外拨活动时,我拨打了:

FinishAndRemoveTask();

相关问题