Xamarin Android Forms.Context已过时-如何在依赖方法中修复它?

时间:2019-06-06 12:57:20

标签: xamarin xamarin.forms

我收到一条消息,说FormsContext已过时。我看到了很多有关如何解决它的建议,但以下均不适用于我的情况:

[assembly: Xamarin.Forms.Dependency(typeof(SoundMethods))]
namespace J.Droid
{
    public class SoundMethods : ISoundMethods
    {
        public void IsDeviceSilent()
        {
            AudioManager am = (AudioManager)Forms.Context.GetSystemService(Context.AudioService);
        }
    }
}

有人可以建议我如何解决此问题吗?

3 个答案:

答案 0 :(得分:2)

我通常使用James Montemagno的Plugin.CurrentActivity。

Nuget:https://www.nuget.org/packages/Plugin.CurrentActivity

Github:https://github.com/jamesmontemagno/CurrentActivityPlugin

您必须在AppDelegate OnCreate中初始化插件:

CrossCurrentActivity.Current.Init(this, bundle);

然后在您的服务(或Android Project中的任何类)中,您可以通过以下方式获取当前上下文:

var context = CrossCurrentActivity.Current.AppContext

答案 1 :(得分:0)

您可以添加一个方法来初始化并通过MainActivity传递上下文:

        let realm = try! Realm(configuration: try configuration(url: realmURL))
        let results: Results<Object> = realm!.objects(Object.self)
        let subscription = results.subscribe(named: "objects")


        subscription.observe(\.state, options: .initial) { state in
        print("Sync State Objects: \(state)")}

然后,在 static Context _context; public static void Init(Context context) { _context = context; } public void IsDeviceSilent() { AudioManager am = (AudioManager)_context.GetSystemService(Context.AudioService); }

MainActivity

您可以在here

中了解更多信息。

答案 2 :(得分:0)

您可以像这样在构造函数中获取上下文:

private Context _context;

public ContentPageRenderer(Context context) : base(context)
{
    _context = context;
}

然后使用_context变量进行访问。