【问题标题】:Is there a way to bring the current app that is running code to the foreground Xamarin Forms - Android有没有办法将正在运行代码的当前应用程序带到前台 Xamarin Forms - Android
【发布时间】:2020-07-28 14:54:59
【问题描述】:

我使用此代码为基础创建了一个适用于 Android 的自定义文档提供程序。

https://docs.microsoft.com/en-us/samples/xamarin/monodroid-samples/storageprovider/

这允许在浏览/保存文档时将新驱动器映射到文档文件夹。

如果由于密码超时而出现异常,我想弹出现有的应用程序,以便用户可以再次输入他们的凭据进行登录。

这可能吗?作为我正在寻找的示例,如果 QueryRoots 因特定异常而失败,我可以运行一些东西来在此处弹出应用程序界面吗?

public override ICursor QueryRoots(string[] projection)
{
    Log.Verbose(TAG, "queryRoots");

    var result = new MatrixCursor(ResolveRootProjection(projection));

    try
    {
        if (!IsUserLoggedIn())
        {
            return result;
        }

        MatrixCursor.RowBuilder row = result.NewRow();

        ... other init code here
    }
    catch (Exception ex)
    {
        if (ex.Message == "NoSessionException")
        {
            // LOGIC TO BRING BACK APP TO LOG IN AGAIN HERE...
        }
    }

    return result;
}

【问题讨论】:

  • 哪一行代码导致密码超时异常?你如何捕捉到这个异常?如果使用 try-catch 语句,是否可以尝试重新打开现有应用让用户重新登录?
  • 上面的代码只是例子,但是你能看到那里的try catch吗,它会被扔在这里然后被catch块捕获。我猜我正在寻找答案是如何启动应用程序的新实例,或者如何在这个 catch 块中将现有正在运行的应用程序带到前台?任何想法我如何做到这一点?

标签: android xamarin xamarin.forms xamarin.android


【解决方案1】:

我制作了一个关于如何再次启动应用程序的示例代码供您参考。您可以将Launch 方法放在catch 语句中。

在 Xamarin.Forms 中,您可以使用依赖服务以包名称启动应用程序。

创建接口:

 public interface IDpendencyService
{
    Task<bool> Launch(string stringUri);
}

Android的实现:

 public class DependencyImplementation : Activity, IDpendencyService
{
    public Task<bool> Launch(string stringUri)
    {

    Intent intent = Android.App.Application.Context.PackageManager.GetLaunchIntentForPackage(stringUri);
    if (intent != null)
    {
        intent.AddFlags(ActivityFlags.NewTask);
        Forms.Context.StartActivity(intent);
        return Task.FromResult(true);
    }
    else
    {
        return Task.FromResult(true);
    }

  }
}

在 MainActivity 中注册:

 DependencyService.Register<IDpendencyService, DependencyImplementation>();

我使用 Button 事件来调用。您可以尝试在 catch 中调用。

 DependencyService.Get<IDpendencyService>().Launch("com.companyname.xamarindemo");

屏幕截图:我在 Page21 上有一个按钮。当我点击按钮时,它会重新加载应用程序并弹出现有应用程序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-12
    • 2022-01-10
    • 1970-01-01
    • 1970-01-01
    • 2011-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多