如何在Xamarin Android中实现本地推送通知

如何在Xamarin Android中实现本地推送通知,xamarin,xamarin.forms,xamarin.android,xamarin-studio,Xamarin,Xamarin.forms,Xamarin.android,Xamarin Studio,我正在申请Xamarin.表格。我想为Android平台实现本地推送通知,通过它,应用程序可以在应用程序最小化或手机锁定时接收通知。我还想唤醒手机,并在手机锁定时在锁定屏幕上显示通知 因为我是新来的,所以请帮助我 提前谢谢 Vivek您需要的是推送通知,而不是本地通知。本地通知仅在应用程序正在运行时有效。推送通知由操作系统(本例中为Android)处理。Xamarin建议使用Firebase服务来处理它。这个过程非常简单,你们所要做的就是遵循Xamarin官方网站的教程 我认为你应该考虑两件事。

我正在申请Xamarin.表格。我想为Android平台实现本地推送通知,通过它,应用程序可以在应用程序最小化或手机锁定时接收通知。我还想唤醒手机,并在手机锁定时在锁定屏幕上显示通知

因为我是新来的,所以请帮助我

提前谢谢


Vivek

您需要的是推送通知,而不是本地通知。本地通知仅在应用程序正在运行时有效。推送通知由操作系统(本例中为Android)处理。Xamarin建议使用Firebase服务来处理它。这个过程非常简单,你们所要做的就是遵循Xamarin官方网站的教程


我认为你应该考虑两件事。

1.收听屏幕锁定:

创建一个屏幕监听器.cs

public class ScreenListener
{
    private Context mContext;
    private ScreenBroadcastReceiver mScreenReceiver;
    private static ScreenStateListener mScreenStateListener;

    public ScreenListener(Context context)
    {
        mContext = context;
        mScreenReceiver = new ScreenBroadcastReceiver();
    }

    /**
     * screen BroadcastReceiver
     */
    private class ScreenBroadcastReceiver : BroadcastReceiver
    {
    private String action = null;

        public override void OnReceive(Context context, Intent intent)
        {
            action = intent.Action;
            if (Intent.ActionScreenOn == action)
            { // screen on
                mScreenStateListener.onScreenOn();
            }
            else if (Intent.ActionScreenOff == action)
            { // screen off
                mScreenStateListener.onScreenOff();
            }
            else if (Intent.ActionUserPresent == action)
            { // unlock
                mScreenStateListener.onUserPresent();
            }
        }
    }

/**
 * begin to listen screen state
 *
 * @param listener
 */
public void begin(ScreenStateListener listener)
{
    mScreenStateListener = listener;
    registerListener();
    getScreenState();
}

/**
 * get screen state
 */
private void getScreenState()
{
    PowerManager manager = (PowerManager)mContext
            .GetSystemService(Context.PowerService);
    if (manager.IsScreenOn)
    {
        if (mScreenStateListener != null)
        {
            mScreenStateListener.onScreenOn();
        }
    }
    else
    {
        if (mScreenStateListener != null)
        {
            mScreenStateListener.onScreenOff();
        }
    }
}

/**
 * stop listen screen state
 */
public void unregisterListener()
{
    mContext.UnregisterReceiver(mScreenReceiver);
}

/**
 * regist screen state broadcast
 */
private void registerListener()
{
    IntentFilter filter = new IntentFilter();
    filter.AddAction(Intent.ActionScreenOn);
    filter.AddAction(Intent.ActionScreenOff);
    filter.AddAction(Intent.ActionUserPresent);
    mContext.RegisterReceiver(mScreenReceiver, filter);
}

public interface ScreenStateListener
{// Returns screen status information to the caller
    void onScreenOn();

    void onScreenOff();

    void onUserPresent();
}
}
然后在MainActivity.cs中:

public class MainActivity : AppCompatActivity,ScreenStateListener
{
   ScreenListener mScreenListener;
   protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);
        SetContentView(Resource.Layout.activity_main);
        mScreenListener = new ScreenListener(this);
    }
   protected override void OnDestroy()
    {
        base.OnDestroy();
        mScreenListener.unregisterListener();
    }

   protected override void OnResume()
    {
        base.OnResume();
        mScreenListener.begin(this);

    }
   public void onScreenOn()
    {
        Console.WriteLine("onScreenOn");
    }

   public void onScreenOff()
    {
        Console.WriteLine("onScreenOff");
    }

   public void onUserPresent()
    {
        Console.WriteLine("onUserPresent");
    }


}
2.创建:


最后,您只需在screenoff()方法中推送通知。

谢谢您的建议。我只想在应用程序运行时显示通知。但“是”应用程序应该会收到通知,即使它处于最小化模式或手机已锁定。一旦收到推送,您将不得不强制执行本地通知。操作系统仅在应用程序关闭或最小化时显示通知。它确实会接收它们,并点击MessageReceived方法。通过该方法,您可以强制执行本地通知。教程如下: