2016-01-12 22 views
5

Tôi muốn có thể ngăn trình bảo vệ màn hình kích hoạt khi ứng dụng của tôi đang được sử dụng bằng cách sử dụng lớp DisplayRequest, nhưng tôi chỉ muốn làm điều này trong khi đó là ứng dụng đang hoạt động. Nếu người dùng chuyển sang một cửa sổ/ứng dụng khác thì tôi muốn hành động như một công dân tốt và cho phép trình bảo vệ màn hình một lần nữa.UWP: Phát hiện ứng dụng đạt được/mất tiêu điểm

Tôi không thể nhìn thấy một cách rõ ràng để phát hiện khi ứng dụng UWP bị mất tiêu điểm (hoặc được kích hoạt/hủy kích hoạt) và tìm kiếm nhanh không cung cấp bất kỳ thông tin chi tiết nào. ai đó có thể chỉ cho tôi phương hướng đúng không?

+0

Nhờ cả hai người trả lời - tôi thực sự nhận thấy rằng có một sự kiện được kích hoạt trên cửa sổ, nhưng không nghĩ rằng tôi cũng có thể sử dụng nó để kiểm tra khi nào ứng dụng được * de * kích hoạt ... dễ dàng khi bạn biết ! –

+0

Và tiếc là nó có vẻ như có một trường hợp cạnh mà nó không hoạt động. Nếu người dùng đặt thiết bị của họ vào chế độ ngủ trong khi ứng dụng đang mở và đang hoạt động, tức là bằng cách nhấn nút nguồn, thì cửa sổ báo hiệu nó đã bị tắt, nhưng * không * cho biết nó đã được kích hoạt lại khi thiết bị khởi động lại, mặc dù nó hiện là cửa sổ hoạt động: ( –

Trả lời

2

Bạn không nên xử lý các thay đổi trạng thái kích hoạt của ứng dụng.

Vui lòng tham khảo How to prevent screen locks in your UWP apps.

xử lý

Nếu không có bất kỳ mã hóa bổ sung, mặc dù tự động yêu cầu, RequestActive của bạn() gọi cũng sẽ bị ngừng hoạt động khi ứng dụng của bạn không còn có trọng tâm-nói cách khác, khi ứng dụng của bạn đi vào một trạng thái treo. Trên Windows Phone di động và trên PC Windows 10 hoặc Surface Pro ở chế độ Máy tính bảng, “ứng dụng của bạn không còn tập trung” nghĩa là bất cứ khi nào ứng dụng của bạn không còn ở nền trước nữa (các ứng dụng được chụp vẫn được tính là tiền cảnh) . Tuy nhiên, trên PC Windows 10 ở chế độ dành cho máy tính, điều đó có nghĩa là bất cứ khi nào ứng dụng của bạn được thu nhỏ. Trong chế độ màn hình, lưu ý rằng ngay cả khi cửa sổ ứng dụng khác che phủ cửa sổ ứng dụng của bạn, ứng dụng của bạn vẫn được chu kỳ của ứng dụng UWP xem xét đang chạy ở nền trước.

Điều thực sự thú vị là khi ứng dụng của bạn quay trở lại nền trước hoặc bị giảm thiểu, cuộc gọi RequestActive() sẽ tự động được kích hoạt lại. Bạn không phải làm gì cả! Điều này cũng có nghĩa là nếu một ứng dụng khác xảy ra để yêu cầu giữ cho màn hình hoạt động, nó không thể chiếm đoạt hành vi của mọi ứng dụng khác trên cùng một thiết bị. Yêu cầu chỉ tốt miễn là người dùng đang làm việc với ứng dụng đó. Khi ứng dụng bị loại bỏ hoặc giảm thiểu, Windows 10 sẽ quay trở lại thói quen bảo tồn năng lượng thường xuyên của nó, ngay cả khi ứng dụng quên gọi RequestRelease().

Cuối cùng, khi ứng dụng của bạn bị chấm dứt, tất cả các yêu cầu hoạt động hiển thị còn lại sẽ tự động được dọn dẹp cho bạn.

Tất cả đều được thực hiện theo nhu cầu của bạn.

+0

Brilliant - điều này làm cho cảm giác hoàn hảo, nếu chỉ có tài liệu đã đề cập rằng khi tôi đã nhìn vào nó trước! Cảm ơn! –

10

Nó thực sự khá đơn giản:

Window.Current.Activated += Current_Activated; 

private void Current_Activated(object sender, Windows.UI.Core.WindowActivatedEventArgs e) 
{ 
    if (e.WindowActivationState == CoreWindowActivationState.Deactivated) 
    { 
     // do stuff 
    } 
    else 
    { 
     // do different stuff 
    } 
} 
6

Chúng ta có thể sử dụng CoreWindow.Activated event để phát hiện khi một ứng dụng UWP được kích hoạt hoặc ngừng hoạt động. Phương pháp này được kích hoạt khi cửa sổ hoàn thành kích hoạt hoặc hủy kích hoạt. Và đối với ứng dụng UWP, chúng tôi thường chỉ có một cửa sổ. Vì vậy, chúng ta có thể thêm một số mã như sau trong Application.OnLaunched phương pháp để phát hiện:

Window.Current.CoreWindow.Activated += (sender, args) => 
{ 
    if (args.WindowActivationState == Windows.UI.Core.CoreWindowActivationState.Deactivated) 
    { 
     System.Diagnostics.Debug.WriteLine("Deactivated " + DateTime.Now); 
    } 
    else 
    { 
     System.Diagnostics.Debug.WriteLine("Activated " + DateTime.Now); 
    } 
}; 

Bên cạnh đó, bạn cũng có thể sử dụng CoreApplication.GetCurrentView method hoặc CoreWindow.GetForCurrentThread method để có được những CoreWindow.

1

Tôi sử dụng sự kiện thay đổi hiển thị trên cửa sổ chính. Sự kiện không được kích hoạt khi mở hoặc đóng cửa sổ mới trong ứng dụng.

Window.Current.VisibilityChanged += OnVisibilityChanged; 

/// <summary> 
/// When the window visibility changes, the stuff happens 
/// </summary> 
/// <param name="sender">object sender</param> 
/// <param name="e">VisibilityChangedEventArgs e</param> 
private void OnVisibilityChanged(object sender, VisibilityChangedEventArgs e) 
{ 

    if (!e.Visible) 
    { 
     // do stuff 
    } 
    else 
    { 
     // do other stuff 
    } 
} 
Các vấn đề liên quan