我收到一条消息,说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);
}
}
}
有人可以建议我如何解决此问题吗?
答案 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
变量进行访问。