xamarin - 如何在 Xamarin Android 中实现本地推送通知
问题描述
我有 Xamarin.Forms 应用程序。我想为Android平台实现本地推送通知,当应用程序最小化或手机被锁定时,应用程序可以通过它接收通知。我还想在手机锁定时唤醒手机并在锁定屏幕上显示通知。
由于我是新手,请帮助我。
提前致谢。
维韦克
解决方案
我认为你应该考虑两件事。
1.监听锁屏:</p>
创建一个ScreenListener.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.创建本地通知:</p>
onScreenOff()
最后,您只需在方法中推送通知。
推荐阅读
- linux - 在 Linode 服务器上升级 openssl 但如何决定“ENGINESDIR”
- unit-testing - vue.js vuetify : test-utils w Jest 如何在使用图标时匹配文本
- metal - 剪刀矩形在金属中的极限是多少?
- ruby-on-rails - 如何避免在苗条视图中两次使用相同的条件
- php - 该代码仅输出第一行
- visual-studio - Servicenow 请求正文超出了允许的最大内容长度
- sql-server - 在 SQL Server CTE 中添加 where 子句
- java - 带有 java 和 kotlin Function 参数的 Kotlin 2 方法(无法从 java 访问)
- python - 在python中将字符串转换为mysql的日期时间
- sql - 如何从oracle中删除多边形中的孔