Показать тост над PhoneScreen в LockState

Наша цель - показать тост при поступлении звонка. Это не будет работать, когда устройство заблокировано и происходит входящий звонок. Затем тост отображается за " заблокированным полноэкранным представлением входящих вызовов".

Мы пробовали разные подходы с одинаковым результатом:

  • PhoneCallListener / BroadCastReciver
  • Вместо тоста используйте новое намерение с некоторыми флагами (ShowOnLockScreen и т. Д.)

Разрешение:

<uses-permission android:name="android.permission.READ_PHONE_STATE" />

Настройка для PhoneCallListener:

public class PhoneCallDetector : PhoneStateListener
{
    public override void OnCallStateChanged(CallState state, string incomingNumber)
    {
        ShowToast(incomingNumber);
        base.OnCallStateChanged(state, incomingNumber);
    }


    private void ShowToast(string phonenumber)
    {
        Toast toast = Toast.MakeText(Application.Context, phonenumber, ToastLength.Long);
        toast.SetGravity(GravityFlags.Center, 0, 0);
        toast.Show();
    }
}

Мы знаем некоторые приложения, которые могут успешно отображать тосты через " заблокированный полноэкранный режим просмотра входящих звонков", но они написаны на языке Java... Они также не делают ничего особенного, кроме Toast.MakeText(....).

Редактировать: => PhoneStateListener живет в фоновом режиме. Начал с сервиса.

Как начать обслуживание?

Intent serviceStart = new Intent(context, typeof(PhoneCallService));
context.StartService(serviceStart);

Как вызывается PhoneCallDetector?

 var phoneCallDetector = m_scope.Resolve<PhoneCallDetector>();
 var tm = (TelephonyManager)GetSystemService(TelephonyService);
 tm.Listen(phoneCallDetector, PhoneStateListenerFlags.CallState);

Спасибо за помощь:-)

1 ответ

Вы должны прочитать это, а также сослаться на эту ссылку.

Settings.Secure.LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS = "lock_screen_allow_private_notifications"

Settings.Secure.LOCK_SCREEN_SHOW_NOTIFICATIONS = "lock_screen_show_notifications"


int ShowAll = Settings.Secure.getInt(getContentResolver(),"lock_screen_allow_private_notifications", -1); 
int NotificationEnable = Settings.Secure.getInt(getContentResolver(),"lock_screen_show_notifications", -1); 

if(ShowAll > 0 && NotificationEnable > 0){
//post notification
}

См. Также этот раздел:-Уведомления на экране блокировки

Другие вопросы по тегам