首页 > 解决方案 > 有人来电时收到通知

问题描述

我对移动开发和 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
            }
        }
    }
}

标签: androidxamarin.formsxamarin.android

解决方案


您需要为通话状态注册广播接收器。

  <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"/>

推荐阅读