我想通过应用程序将一些联系信息从我们的后端同步到手机。 由于隐私原因,我们不允许将这些联系人保存在电话中。我们可以将数据保存在我们的应用程序中。但是这里的问题是,当有人打电话给我时,我看到的是电话号码,但看不到我的联系人姓名。
有没有一种方法可以告诉系统我知道数字“ 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);
});
}
}