【问题标题】:Can not cast context into activity Xamarin无法将上下文转换为活动 Xamarin
【发布时间】:2018-05-19 03:11:47
【问题描述】:

我在xamarin 遇到问题,我需要一些帮助

来自xamarin 教程,感谢DependencyService,我希望拨打电话。

这是Android部分的服务实现:

 public bool Dial(string number)
    {
        var context = Android.App.Application.Context;

        if (context == null)
            return false;

        var intent = new Intent(Intent.ActionCall);
        intent.SetData(Uri.Parse("tel:" + number));
        try
        {
            var activity = (Activity)context;
            ActivityCompat.RequestPermissions(activity,
             new String[] { Android.Manifest.Permission.CallPhone }, 1);
        }
        catch (Exception e)
        {
            Console.WriteLine(e);
            throw;
        }

        if (IsIntentAvailable(context, intent))
        {
            try
            {
                context.StartActivity(intent);

            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                throw;
            }
            return true;
        }

        return false;
    }

主要问题是:我有一个被撤销的权限

android.permission.CALL_PHONE

。我确切地说我已经在manifest 中给予了许可。我已阅读我需要在运行时注册权限。这就是我正在尝试的

ActivityCompat.RequestPermissions(activity,
             new String[] { Android.Manifest.Permission.CallPhone }, 1);

但我需要当前的 Activity 作为参数,我无法将当前的 Context 转换为 Activity

请帮我找出我做错的地方。

谢谢

【问题讨论】:

    标签: android xamarin


    【解决方案1】:

    我刚刚找到了解决办法。

    我不得不考虑上下文

    var context = Xamarin.Forms.Forms.Context;

    而不是

    var context = Android.App.Application.Context;

    之后,演员效果很好

    谢谢大家

    【讨论】:

    • Forms.Context 现在已被 Xamarin.Forms 版本 2.5 废弃 stackoverflow.com/questions/47353986/…
    • 只有 Forms.Context 对我有用,而不是 Apllication.Context.. 但它已被弃用。这是一个错误吗?
    • 从 Android.App.Application.Context 投射到 Activity 不起作用。
    • 你现在是怎么解决的?我在任何地方都找不到解决方案
    【解决方案2】:

    试试这个

    (YourActivityName)Forms.Context;
    

    例如:

    var activity = (YourActivityName)Forms.Context;
    

    【讨论】:

      【解决方案3】:

      如果您处于活动状态。

      您正在投射应用程序上下文。

      var context = Android.App.Application.Context; 
      

      用下面的替换它

      var context = android.content.Context; 
      

      如果您在 Service 中工作,那么您可以从调用您的服务的地方请求许可。

      【讨论】:

        猜你喜欢
        • 2023-02-08
        • 2013-09-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-05
        • 2018-05-25
        相关资源
        最近更新 更多