Xamarin Android呼叫者屏幕显示名称

时间:2019-04-16 12:42:35

标签: android xamarin.android broadcastreceiver telephonymanager phone-state-listener

我想通过应用程序将一些联系信息从我们的后端同步到手机。 由于隐私原因,我们不允许将这些联系人保存在电话中。我们可以将数据保存在我们的应用程序中。但是这里的问题是,当有人打电话给我时,我看到的是电话号码,但看不到我的联系人姓名。

有没有一种方法可以告诉系统我知道数字“ 1234”依赖于名称“ Michael”(例如)。 如果我们将这些数据保存到手机或通过ContentProvider提供,其他应用程序可以获取数据并将其保存/发送到任何地方...

我创建了一个包含BroadcastReceiver的测试应用程序,该应用程序侦听电话状态事件/操作。 电话响起时,我可以获取电话号码,检查我的内部数据库,并在吐司/活动/通知中显示姓名。 我还知道自己创建完整的“呼叫屏幕”的选项,但这不是我想要的。

如果名称显示在默认的本机呼叫者屏幕上,而不是未知的号码上,将会更方便。

有没有办法做到这一点?

这是我的BroadcastReceiver

[BroadcastReceiver(Name= "myapp.PhoneStateReceiver", Enabled = true, Exported = true)]
[IntentFilter(new[] { "android.intent.action.PHONE_STATE" })]
public class PhoneStateBroadcastReceiver : BroadcastReceiver
{
    public override void OnReceive(Context context, Intent intent)
    {
        var state = intent.GetStringExtra(TelephonyManager.ExtraState);
        var incomingNumber = intent.GetStringExtra(TelephonyManager.ExtraIncomingNumber);

        if (state == TelephonyManager.ExtraStateRinging && !string.IsNullOrEmpty(incomingNumber))
        {
            ShowActivity(context, incomingNumber);
        }
        else if (state == TelephonyManager.ExtraStateIdle)
        {
            if (CrossCurrentActivity.Current.Activity is IncomingCallActivity)
            {
                CrossCurrentActivity.Current.Activity.Finish();
            }
        }
    }


    private static void ShowActivity(Context context, string number)
    {
        Task.Delay(200).ContinueWith(t =>
        {
            var i = new Intent(context, typeof(IncomingCallActivity));
            i.PutExtra("incomingnumber", number);
            i.AddFlags(ActivityFlags.NewTask);
            i.AddFlags(ActivityFlags.SingleTop);

            context.StartActivity(i);
        });
    }

}

0 个答案:

没有答案