我们正在使用App Center推送通知,根据下面的文章https://docs.microsoft.com/en-us/appcenter/sdk/push/xamarin-forms,可以通过使用Push.PushNotificationReceived在App.xaml.cs中处理推送通知。
这实际上是在运行的ATM,并且实际上是为后台和前台通知触发的方法。
我们需要能够区分它们。每当用户点击通知时,我们都会将其导航到应用程序的特定部分(背景),如果已打开应用程序(前景),我们将无法进行同样的操作。
我已经看到了一些实现方法,但是它们都是特定于平台(在这种情况下为iOS)的。有没有办法在PCL中做同样的事情?
答案 0 :(得分:1)
我认为Xamarin Forms并没有为我们提供获取应用程序状态的API。
您可以通过在Xamarin.Forms中使用DependencyService
来实现:
首先在您的PCL项目中定义一个接口:
public interface IGetAppState
{
bool appIsInBackground();
}
在iOS中:
[assembly: Dependency(typeof(GETAppState_iOS))]
namespace App129.iOS
{
public class GETAppState_iOS : IGetAppState
{
public bool appIsInBackground()
{
UIApplicationState state = UIApplication.SharedApplication.ApplicationState;
bool result = (state == UIApplicationState.Background);
return result;
}
}
}
在Android中:
[assembly: Dependency(typeof(GETAppState_Android))]
namespace App129.Droid
{
public class GETAppState_Android : IGetAppState
{
public bool appIsInBackground()
{
bool isInBackground;
RunningAppProcessInfo myProcess = new RunningAppProcessInfo();
GetMyMemoryState(myProcess);
isInBackground = myProcess.Importance != Importance.Foreground;
return isInBackground;
}
}
}
在任何您想知道您的应用是后台还是前台的地方,都可以使用:
bool isInBackground = DependencyService.Get<IGetAppState>().appIsInBackground();