2016-01-12 4 views
5

मैं स्क्रीन सेवर को ट्रिगर करने से रोकने में सक्षम होना चाहता हूं, जबकि मेरा ऐप डिस्प्लेआरक्वेट क्लास का उपयोग करके उपयोग में है, लेकिन मैं केवल सक्रिय ऐप के दौरान ऐसा करना चाहता हूं। यदि उपयोगकर्ता किसी अन्य विंडो/ऐप पर स्विच करता है तो मैं एक अच्छे नागरिक की तरह कार्य करना चाहता हूं और स्क्रीनसेवर को फिर से अनुमति देना चाहता हूं।यूडब्लूपी: ऐप प्राप्त करने/फोकस करने का पता लगाएं

मुझे पता लगाने के लिए एक स्पष्ट तरीका नहीं दिख रहा है कि जब कोई यूडब्ल्यूपी ऐप फोकस करता है (या सक्रिय/निष्क्रिय होता है) और आसपास की त्वरित खोज किसी भी अंतर्दृष्टि की पेशकश नहीं करती है। क्या कोई मुझे सही दिशा दिखा सकता है?

+0

उत्तरदाताओं दोनों के लिए धन्यवाद - मैंने वास्तव में देखा था कि खिड़की पर एक सक्रिय घटना थी, लेकिन यह नहीं माना गया था कि मैं यह भी जांच सकता हूं कि ऐप कब * डी * सक्रिय था ... जब आप जानते हैं ! –

+0

और दुर्भाग्यवश ऐसा लगता है कि एक बढ़िया मामला है जिसमें यह काम नहीं करता है। यदि उपयोगकर्ता खुले और सक्रिय होने पर अपने डिवाइस को सोने के लिए रखता है, यानी पावर बटन दबाकर, तो विंडो सिग्नल को निष्क्रिय कर दिया गया है, लेकिन * यह इंगित नहीं करता है कि डिवाइस फिर से शुरू होने पर इसे सक्रिय कर दिया गया है, भले ही यह वर्तमान में सक्रिय विंडो है :( –

उत्तर

2

आपको ऐप की सक्रियण स्थिति में बदलावों को संभालना नहीं चाहिए।

कृपया, How to prevent screen locks in your UWP apps देखें।

स्वत: अनुरोध,

से निपटने के लिए कोई अतिरिक्त कोडिंग के बिना भी, आपको अपने RequestActive() कॉल भी अपने ऐप नहीं रह गया है फोकस-दूसरे शब्दों में, जब आपका ऐप्लिकेशन किसी में चला जाता है नहीं कर दिया जाएगा निलंबित राज्य टैबलेट मोड में विंडोज फोन मोबाइल और विंडोज 10 पीसी या सर्फेस प्रो पर, "आपके ऐप पर अब फोकस नहीं है" का मतलब है कि जब भी आपका ऐप अग्रभूमि में नहीं होता है (स्नैप किए गए ऐप्स अभी भी अग्रभूमि में होने के रूप में गिना जाता है) । डेस्कटॉप मोड में विंडोज 10 पीसी पर, हालांकि, इसका मतलब यह होगा कि जब भी आपका ऐप कम हो जाए। डेस्कटॉप मोड में, ध्यान दें कि जब भी एक और ऐप विंडो आपकी ऐप विंडो को कवर करती है, तब भी आपके ऐप को यूडब्ल्यूपी ऐप लाइफसाइकिल द्वारा अग्रभूमि में चलने के लिए माना जाता है।

वास्तव में अच्छी बात यह है कि जब आपका ऐप अग्रभूमि में वापस आता है या कम-से-कम हो जाता है, तो RequestActive() कॉल स्वचालित रूप से पुनः सक्रिय हो जाएगी। आपको कुछ करने की ज़रूरत नहीं है!

इसका यह भी अर्थ है कि यदि कोई अन्य ऐप डिस्प्ले को सक्रिय रखने का अनुरोध करने के लिए होता है, तो यह उसी डिवाइस पर हर दूसरे ऐप के व्यवहार को हाइजैक नहीं कर सकता है। अनुरोध तब तक अच्छा है जब तक कि उपयोगकर्ता उस ऐप के साथ काम कर रहा हो। एक बार ऐप को खारिज या कम करने के बाद, विंडोज 10 अपनी नियमित बिजली संरक्षण आदतों पर वापस जाता है, भले ही ऐप RequestRelease() को कॉल करना भूल जाए।

अंत में, जब आपका ऐप समाप्त हो जाता है, तो शेष शेष डिस्प्ले सक्रिय अनुरोध स्वचालित रूप से आपके लिए साफ हो जाते हैं।

यह सब आपकी आवश्यकताओं के लिए बनाया गया है।

+0

शानदार - यह सही समझ में आता है; अगर केवल दस्तावेज ने उल्लेख किया था कि जब मैं इससे पहले देख रहा था! धन्यवाद! –

10

यह वास्तव में काफी सरल है:

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

हम CoreWindow.Activated event का उपयोग जब एक UWP एप्लिकेशन सक्रिय या निष्क्रिय है पता लगाने के लिए कर सकते हैं। जब विंडो सक्रियण या निष्क्रियता पूर्ण करती है तो यह विधि निकाल दी जाती है। और एक यूडब्ल्यूपी ऐप के लिए, आमतौर पर हमारे पास केवल एक खिड़की होती है। इसलिए हम Application.OnLaunched विधि में निम्नलिखित पता लगाने के लिए जैसे कुछ कोड जोड़ सकते हैं: इस के अलावा

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); 
    } 
}; 

, आप भी CoreApplication.GetCurrentView method या CoreWindow.GetForCurrentThread method का उपयोग CoreWindow प्राप्त करने के लिए कर सकते हैं।

1

मैं होम विंडो पर दृश्यता परिवर्तित घटना का उपयोग करता हूं। ऐप के भीतर एक नई विंडो खोलने या बंद करने पर ईवेंट को निकाल दिया नहीं जाता है।

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 
    } 
} 
संबंधित मुद्दे