Показать тост через PhoneScreen в LockState

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

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

  • PhoneCallListener/BroadCastReciver
  • Вместо тоста используйте новый Intent с некоторыми флагами (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
}

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