无法将上下文转换为活动Xamarin

时间:2017-12-05 12:43:53

标签: android xamarin

我在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

请帮我找出错误的地方。

谢谢

3 个答案:

答案 0 :(得分:0)

试试这个

var activity = (YourActivityName)Forms.Context;

例如:

Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                    if (takePictureIntent.resolveActivity(getActivity().getPackageManager()) != null) {
                        startActivityForResult(takePictureIntent, 0);
                    }

答案 1 :(得分:0)

如果你在活动中。

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

var context = Android.App.Application.Context; 

将其替换为下面的

var context = android.content.Context; 

如果您在服务中工作,那么您可以向您致电服务的地方寻求许可。

答案 2 :(得分:0)

我刚刚找到了解决方案。

我必须带上

的上下文

var context = Xamarin.Forms.Forms.Context;

而不是

var context = Android.App.Application.Context;

之后,演员表现得很好

谢谢大家