Android
ओवरले (हमेशा-ऊपर-ऊपर) विंडोज बनाना
खोज…
पॉपअप ओवरले
प्रत्येक एप्लिकेशन के शीर्ष पर अपना विचार रखने के लिए, आपको अपने विचार को संबंधित विंडो मैनेजर पर असाइन करना होगा। उसके लिए आपको सिस्टम अलर्ट अनुमति की आवश्यकता होती है, जिसे आपकी घोषणा फ़ाइल में निम्न पंक्ति जोड़कर अनुरोध किया जा सकता है:
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
नोट: यदि आपका एप्लिकेशन नष्ट हो जाता है, तो आपका दृश्य विंडो मैनेजर से हटा दिया जाएगा। इसलिए, यह दृश्य बनाने और बेहतर बनाने के लिए एक अग्रभूमि सेवा द्वारा विंडो प्रबंधक को असाइन करना है।
WindowManager को एक दृश्य सौंपना
आप निम्नानुसार एक विंडो प्रबंधक उदाहरण प्राप्त कर सकते हैं:
WindowManager mWindowManager = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
अपने दृश्य की स्थिति को परिभाषित करने के लिए, आपको कुछ लेआउट पैरामीटर बनाने होंगे:
WindowManager.LayoutParams mLayoutParams = new WindowManager.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.TYPE_PHONE,
WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON,
PixelFormat.TRANSLUCENT);
mLayoutParams.gravity = Gravity.CENTER_HORIZONTAL | Gravity.CENTER_VERTICAL;
अब, आप विंडो प्रबंधक उदाहरण के लिए बनाए गए लेआउट मापदंडों के साथ अपने विचार को एक साथ निर्दिष्ट कर सकते हैं:
mWindowManager.addView(yourView, mLayoutParams);
देखा! आपके विचार को अन्य सभी अनुप्रयोगों में सफलतापूर्वक शीर्ष पर रखा गया है।
नोट: आप दृश्य को कीगार्ड के ऊपर नहीं रखा जाएगा।
Android 6.0 और इसके बाद के संस्करण पर SYSTEM_ALERT_WINDOW अनुमति देना
एंड्रॉइड 6.0 से इस अनुमति को गतिशील रूप से प्रदान करने की आवश्यकता है,
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
नीचे दी गई अनुमति को 6.0 पर त्रुटि से इनकार किया,
Caused by: android.view.WindowManager$BadTokenException: Unable to add window android.view.ViewRootImpl$W@86fb55b -- permission denied for this window type
समाधान :-
नीचे दिए गए अनुसार ओवरले की अनुमति का अनुरोध करना,
if(!Settings.canDrawOverlays(this)){
// ask for setting
Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
Uri.parse("package:" + getPackageName()));
startActivityForResult(intent, REQUEST_OVERLAY_PERMISSION);
}
परिणाम की जांच करें,
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_OVERLAY_PERMISSION) {
if (Settings.canDrawOverlays(this)) {
// permission granted...
}else{
// permission not granted...
}
}
}