Я хочу синхронизировать некоторые контактные данные из нашего бэкэнда с телефоном с помощью приложения.Нам не разрешается сохранять эти контакты на телефоне (из-за конфиденциальности).Мы можем сохранить данные внутри нашего приложения.Но проблема здесь в том, что когда кто-то звонит мне, я вижу номер, но не имя моего контакта.
Есть ли способ сообщить системе, что я знаю, что число "1234" зависит от имени«Майкл» (например).Если мы сохраним эти данные на телефоне или предоставим их через ContentProvider
, другие приложения смогут получать данные и сохранять / отправлять их куда угодно ...
Я создал тестовое приложение, которое включает BroadcastReceiver
, которыйпрослушивает событие / действие Phone-State.Когда звонит телефон, я могу получить номер, проверить свою внутреннюю базу данных и показать имя в тосте / активности / уведомлении.Я также знаю о возможности создания полного "экрана вызова" самостоятельно, но это не то, что я хочу.
Было бы более удобно, если имя появляется на стандартном родном экране вызывающего абонента вместонеизвестное число.
Есть ли способ добиться этого?
Вот мой 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);
});
}
}