समाधान के दो भाग हैं
- अधिसूचना पैनल पुल का पता लगाना
- किसी भी मीडिया प्लेइंग ऐप को रोकना
अधिसूचना पैनल पुल का पता लगाने के लिए आप आकाश द्वारा सुझाई गई विधि या ललित द्वारा यहां एक ही कोड को नियोजित कर सकते हैं ।
अपनी मैनिफ़ेस्ट फ़ाइल में
<uses-permission android:name="android.permission.EXPAND_STATUS_BAR" />
अपनी गतिविधि में onWindowFocusChanged () को ओवरराइड करें और नीचे दिया गया कोड लिखें।
@Override
public void onWindowFocusChanged(boolean hasFocus)
{
try
{
if(!hasFocus)
{
Object service = getSystemService("statusbar");
Class<?> statusbarManager = Class.forName("android.app.StatusBarManager");
Method collapse = statusbarManager.getMethod("collapse");
collapse .setAccessible(true);
collapse .invoke(service);
}
}
catch(Exception ex)
{
if(!hasFocus)
{
try {
Object service = getSystemService("statusbar");
Class<?> statusbarManager = Class.forName("android.app.StatusBarManager");
Method collapse = statusbarManager.getMethod("collapse");
collapse .setAccessible(true);
collapse .invoke(service);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
ex.printStackTrace();
}
}
}
दूसरे भाग के लिए सभी अच्छी तरह से डिज़ाइन किए गए मीडिया प्लेयर ऑडियो फोकस चेंज श्रोताओं को लागू करते हैं। इस प्रकार सभी मीडिया प्लेयर ऐप्स को रोकने के लिए आप अस्थायी या पूर्ण ऑडियो फ़ोकस का अनुरोध कर सकते हैं जो इस बात पर निर्भर करता है कि आप नोटिफिकेशन पैनल के गिरते ही ऐप्स को फिर से खेलना चाहते हैं या नहीं।
निम्नलिखित का उपयोग करें
AudioManager audioManager = (AudioManager) Context.getSystemService(Context.AUDIO_SERVICE);
playbackAttributes = new AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_GAME)
.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
.build();
focusRequest = new AudioFocusRequest.Builder(AudioManager.AUDIOFOCUS_GAIN)
// replace AUDIOFOCUS_GAIN with AUDIOFOCUS_GAIN_TRANSIENT if you want to pause and again resume when notification panel collapsed
.setAudioAttributes(playbackAttributes)
.setAcceptsDelayedFocusGain(true)
.setOnAudioFocusChangeListener(afChangeListener, handler)
.build();
// to requestAudioFocus and pause other media apps
audioManager.requestAudioFocus(focusRequest);
// to resume again in case you requested AUDIOFOCUS_GAIN_TRANSIENT
audioManager.abandonAudioFocus(afChangeListener);
AudioFocusChangeListener को लागू करने के लिए मत भूलना
AudioManager.OnAudioFocusChangeListener afChangeListener = new AudioManager.OnAudioFocusChangeListener() {
@Override
public void onAudioFocusChange(int focusChange) {
// leave this empty if you don't need to handle audio focus for your app
}
};
क्या कोई ऐसा तरीका है जिसे मैं सिस्टमयूआई प्रक्रिया से किसी भी अग्रभूमि ऐप के ऑनपोज़ फ़ंक्शन को कॉल कर सकता हूं?
जहां तक मैंने शोध प्रणाली यूआई प्रक्रिया सुलभ नहीं है। हालांकि, आप पारदर्शी विषय के साथ एक गतिविधि शुरू कर सकते हैं ।
आपके प्रकट में
<activity android:name=".your.activity" android:theme="@android:style/Theme.Translucent.NoTitleBar" />
इसे देखें और मैंने पारदर्शी गतिविधि बनाते हुए व्यक्तिगत रूप से परीक्षण किया है।
इसका मतलब है कि शीर्ष पर गतिविधि अब आपकी पारदर्शी गतिविधि है और अन्य गतिविधि का ऑनपॉज विधि स्वाभाविक रूप से कहा जाएगा। एक बार अधिसूचना पैनल ढह जाने पर आप इस गतिविधि को नष्ट कर सकते हैं। और सुरक्षित पक्ष पर रहने के लिए आप एक खाली दृश्य बनाकर ऑनटच श्रोता को सेट कर सकते हैं जो उस स्क्रीन को महसूस करता है जिसे गतिविधि को नष्ट करना चाहिए।