android - 有人来电时收到通知
问题描述
我对移动开发和 Xamarin 非常陌生。
我创建了一个新的 Xamarin.Forms 解决方案“AndroidApp1”,它默认包含两个项目,“AndroidApp1.Android”和“AndroidApp1”。
如果我理解正确的话,第一个包含特定于 Android 的代码,第二个包含可用于 Android、iOS 或 Windows Phone 的代码。
我的解决方案在调试模式下在 Android 仿真中运行,现在我想在有来电时收到通知,我想获取呼叫我的电话号码。
谷歌告诉我,我需要创建一个继承BroadcastReceiver
并覆盖该OnReceive
函数的类。
我假设这个类需要驻留在Android特定项目(AndroidApp1.Android)中,所以我在这里创建了这个类,但是现在呢?我找不到任何关于如何处理这门课的信息?我在哪里实例化它?如何在我的“AndroidApp1”项目中获取通知和电话号码以做出反应?
这是我的源代码BroadcastReceiver
(从互联网复制):
[BroadcastReceiver(Enabled = true, Exported = false)]
[IntentFilter(new[] { "android.intent.action.PHONE_STATE" })]
public class IncomingCallReceiver : BroadcastReceiver
{
public override void OnReceive(Context context, Intent intent)
{
// ensure there is information
if (intent.Extras != null)
{
// get the incoming call state
string state = intent.GetStringExtra(TelephonyManager.ExtraState);
// check the current state
if (state == TelephonyManager.ExtraStateRinging)
{
// read the incoming call telephone number...
string telephone = intent.GetStringExtra(TelephonyManager.ExtraIncomingNumber);
// check the reade telephone
if (string.IsNullOrEmpty(telephone))
telephone = string.Empty;
}
else if (state == TelephonyManager.ExtraStateOffhook)
{
// incoming call answer
}
else if (state == TelephonyManager.ExtraStateIdle)
{
// incoming call end
}
}
}
}
解决方案
您需要为通话状态注册广播接收器。
<action android:name="android.intent.action.PHONE_STATE" />
<action android:name="android.intent.action.NEW_OUTGOING_CALL" />
并在您获得广播事件后创建通知。
确保您已定义权限。
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
推荐阅读
- scala - 在 scala spark 中绘制单行时间序列数据
- flutter - 如何在颤动的可编辑表中添加搜索和排序?
- python - 循环遍历数据框中的数组并按组绘制
- jfrog - 如何从 Jfrog 管道部署到 aws lambda
- django - Klaviyo - 从图像中删除了下载按钮,如何删除鼠标悬停事件?
- java - MockServer静态导入文档中描述的方法还是我应该传递我自己的方法?
- angular - Angular Universal 从 8 升级到 11 时无法读取属性“种类”的未定义错误
- database - 如何防止 DataGrip 显示来自另一个查询控制台的结果?
- android - 如何链接复数
- hibernate - 检查两个实体之间是否存在关系休眠