Android: 如何隐藏或关闭最上面的activity?

Android: How to hide or close topmost activity?

在我的应用程序中,我需要使用 INTENT_ACTION_STILL_IMAGE_CAMERA. The reason of this action is that in this case, I can use the Pro camera mode, like manual ISO, exposure time, etc., while using the action ACTION_IMAGE_CAPTURE 操作启动内置相机应用程序,这是不可能的(至少对于我的三星 Galaxy S20+ 设备的内置相机应用程序而言)

使用广播接收器 Intent 过滤器ACTION_NEW_PICTURE我也能够捕捉到照片的 URI。

我需要的是在拍摄照片后从广播接收器的 OnReceive 方法中隐藏内置相机 Activity。到目前为止我尝试的是我通过指定意图操作标志 FLAG_ACTIVITY_REORDER_TO_FRONT 和 FLAG_ACTIVITY_SINGLE_TOP 从 OnReceive 调用我的 Activity 这种方式(C# 语言片段,但几乎与 Java):

public override void OnReceive(Context context, Intent intent) {
    Toast.MakeText(context, $"Data1: {intent.DataString}", ToastLength.Short).Show();

    var path = Path.Combine(context.CacheDir.AbsolutePath, $"Photo_{DateTime.Now.ToString("yyyyMMMdd_HHmmss")}.jpg");
    try {
        // copy the photo to app cache dir
        using (var outs = File.Create(path)) {
            using (var ins = context.ContentResolver.OpenInputStream(intent.Data)) {
                ins.Seek(0, SeekOrigin.Begin);
                ins.CopyTo(outs);
            }
        }
        
        var a = Xamarin.Essentials.Platform.CurrentActivity;
        var tvInfo = a.FindViewById<AppCompatTextView>(Resource.Id.tvInfo);
        tvInfo.Append("Picture was taken and saved to:");
        tvInfo.Append($"{path}{SysEnv.NewLine}{SysEnv.NewLine}");

        // hide the builtin camera's Activity by brining my Activity to top
        var i = new Intent(context, typeof(MainActivity)).SetFlags(ActivityFlags.ReorderToFront | ActivityFlags.SingleTop);
        a.StartActivity(i);
    }
    catch (Exception ex) {
        Toast.MakeText(context, $"Error: {ex.Message}", ToastLength.Short).Show();
    }
}

以下是我启动相机的方式:

var btnTake = FindViewById<AppCompatButton>(Resource.Id.btnTake);
btnTake.Click += (s, e) => {
    var i = new Intent(MediaStore.IntentActionStillImageCamera);
    var r = i.ResolveActivity(this.PackageManager);
    if (r != null) {
        StartActivity(i);
    }
};

上面的问题是它只在第一次尝试时有效,这意味着我点击我的应用程序按钮,内置摄像头启动。当我拍照时,照片被保存并复制到我的应用程序的缓存目录,内置相机的 Activity 消失,我的 Activity 出现。 但是在第二次尝试时,我的 activity 没有出现,内置摄像头的 Activity 保持在顶部。 知道如何隐藏或关闭内置摄像头的 Activity?

感谢@DavidWasser 终于成功了!!!

解决方案是添加一个新的 dummy activity 从其 OnCreate( ) 最后调用广播接收器的 OnReceive():

var i = new Intent(context, typeof(Dummy));
context.StartActivity(i);