Показать тост над 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
}