2015-11-06 8 views
6

में स्टेटसबार को ब्लॉक/अक्षम करें मैंने Kioware और SureLock अनुप्रयोगों को देखा है। वे बस टैबलेट में हर नियंत्रण को अवरुद्ध करते हैं। मैं बैक बटन ओवरराइड करने और घर और हाल ही के कार्य विकल्पों को संभालने के बारे में भी जानता हूं। लेकिन मुझे यकीन नहीं है कि वे सिस्टम बार पर सेटिंग विकल्प को नियंत्रित करने में कैसे कामयाब रहे। सेटिंग्स सेकंड के एक अंश के लिए दिखाई देते हैं और फिर गायब हो जाते हैं। उसी तरह स्वाइप करने पर दिखाई देने वाली मोबाइल की स्टेटसबार ब्लॉक होने की आवश्यकता है।एंड्रॉइड टैबलेट/मोबाइल

अगर किसी को इसके बारे में पता है तो कृपया इसे साझा करें। कोई मार्गदर्शन/सहायता की सराहना की जाती है।

See the attached image selected portion which I need to block/disable

+0

क्या आपको लॉलीपॉप में हालिया कार्य मिलते हैं? क्योंकि यह आपके लिए भी एक समस्या होगी, मैं पहले से ही इस तरह की स्थिति से गुजर चुका हूं। – Androider

+0

@Androider जो कोई समस्या नहीं है। मैं सेटिंग विकल्प की तलाश में हूं। यह निश्चित रूप से निश्चित ऐप में अक्षम है। क्या आपको इसके बारे में कोई जानकारी है? –

+0

सिस्टम बार – Androider

उत्तर

0

अंततः मुझे उपरोक्त समस्या का समाधान मिला। ऑनविंडो फोकस चेंज मैंने सिस्टम जेनरेट किए गए डायलॉग को बंद कर दिया और मेरी समस्या हल हो गई। नीचे नमूना कोड है।

@Override 
    public void onWindowFocusChanged(boolean hasFocus) { 
     super.onWindowFocusChanged(hasFocus); 

     if(!hasFocus) 
     {// Close every kind of system dialog 
      Intent closeDialog = new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS); 
      sendBroadcast(closeDialog); 

     } 

    } 

अद्यतन:

मोबाइल में स्थिति पट्टी जो रास्ता नीचे स्क्रीन उपयोग पर नीचे स्वाइप पर प्रकट ब्लॉक करने के लिए।

private Handler collapseNotificationHandler; 
      @Override 
      public void onWindowFocusChanged(boolean hasFocus) { 
       boolean currentFocus = hasFocus; 
       if (!hasFocus) { 
        collapseNow(true,currentFocus); 

       } 

      } 


    public void collapseNow(final boolean shouldCollapse, final boolean currentFocus) { 

       // Initialize 'collapseNotificationHandler' 
       if (collapseNotificationHandler == null) { 
        collapseNotificationHandler = new Handler(); 
       } 

       // If window focus has been lost && activity is not in a paused state 
       // Its a valid check because showing of notification panel 
       // steals the focus from current activity's window, but does not 
       // 'pause' the activity 
       if (!currentFocus && !isPaused) { 

        // Post a Runnable with some delay - currently set to 50 ms 
        collapseNotificationHandler.postDelayed(new Runnable() { 

         @Override 
         public void run() { 

          // Use reflection to trigger a method from 'StatusBarManager'     

          Object statusBarService = getSystemService("statusbar"); 
          Class<?> statusBarManager = null; 

          try { 
           statusBarManager = Class.forName("android.app.StatusBarManager"); 
          } catch (ClassNotFoundException e) { 
           e.printStackTrace(); 
          } 

          Method collapseStatusBar = null; 

          try { 

           // Prior to API 17, the method to call is 'collapse()' 
           // API 17 onwards, the method to call is `collapsePanels()` 

           if (Build.VERSION.SDK_INT > 16) { 
            collapseStatusBar = statusBarManager.getMethod("collapsePanels"); 
           } else { 
            collapseStatusBar = statusBarManager.getMethod("collapse"); 
           } 
          } catch (NoSuchMethodException e) { 
           e.printStackTrace(); 
          } 

          collapseStatusBar.setAccessible(shouldCollapse); 

          try { 
           collapseStatusBar.invoke(statusBarService); 
          } catch (IllegalArgumentException e) { 
           e.printStackTrace(); 
          } catch (IllegalAccessException e) { 
           e.printStackTrace(); 
          } catch (InvocationTargetException e) { 
           e.printStackTrace(); 
          } 

          // Check if the window focus has been returned 
          // If it hasn't been returned, post this Runnable again 
          // Currently, the delay is 50 ms. You can change this 
          // value to suit your needs. 
          if (!currentFocus && !isPaused) { 
           collapseNotificationHandler.postDelayed(this, 50); 
          } 

         } 
        }, 0); 
       } 
      } 

"isPaused" बूलियन जो ऐप रोकता है जब ऐप रोकता है।

2

आप WindowManager (पालन this उदाहरण) का उपयोग कर desidered स्थान पर एक पारदर्शी View जोड़ने की कोशिश कर सकते हैं। इस तरह, आप उपयोगकर्ता से किसी भी टैप ईवेंट को रोक देंगे।

क्योंकि आप प्रणाली सलाखों ओवरले करने के लिए की जरूरत है उचित झंडे/प्रकार सेट करना सुनिश्चित करें, कि प्रणाली बार पर ओवरले पारदर्शी कस्टम दृश्य जोड़ने को

WindowManager.LayoutParams dismissParams = new WindowManager.LayoutParams(
         viewWidth, 
         viewHeight, 
         WindowManager.LayoutParams.TYPE_SYSTEM_ALERT, //you can also try with TYPE_SYSTEM_OVERLAY, TYPE_SYSTEM_ERROR 
         WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, 
         PixelFormat.TRANSPARENT); 
+0

इससे पहले मैंने आपके द्वारा वर्णित तरीके को देखने का प्रयास किया है, लेकिन यह सिस्टम सिस्टम बार पर नहीं आ रहा है। –

+0

@NareshSharma क्या आपने TYPE_SYSTEM_OVERLAY के साथ प्रयास किया था? – bonnyz

+0

उस ध्वज के साथ भी काम नहीं कर रहा है। –

3

चाल है, कि जिस तरह से सभी उपयोगकर्ता इंटरैक्शन स्पर्श की तरह, ड्रैग कस्टम व्यू से उपभोग किया जाएगा।

windowManager = (WindowManager) getSystemService(WINDOW_SERVICE); 

activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE); 

statusBarOverlay = new CustomViewGroup(this); 

final WindowManager.LayoutParams localLayoutParams = 
     new WindowManager.LayoutParams(); 

localLayoutParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ERROR; 
localLayoutParams.gravity = Gravity.TOP; 
localLayoutParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | 

     // this is to enable the notification to receive touch events 
     WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | 

     // Draws over status bar 
     WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN; 

localLayoutParams.width = WindowManager.LayoutParams.MATCH_PARENT; 
localLayoutParams.height = 
    (int) (50 * getResources().getDisplayMetrics().scaledDensity); 
localLayoutParams.format = PixelFormat.TRANSPARENT; 

windowManager.addView(statusBarOverlay, localLayoutParams); 

कस्टम ViewGroup:

public class CustomViewGroup extends ViewGroup { 

     public CustomViewGroup(Context context) { 
      super(context); 
     } 

     @Override 
     protected void onLayout(boolean changed, int l, int t, int r, int b) { 
     } 

     @Override 
     public boolean onInterceptTouchEvent(MotionEvent ev) { 
      return true; 
     } 
    } 

मैं अपने आप को मेरे ऐप पर सुविधा ताला लगा हालांकि मैं कई कारणों से किसी भिन्न ऐप में अवरोधित करने की सुविधा अलग किया है किया है

यहाँ एक काम कोड है । आप अधिक जानकारी के लिए पूछ सकते हैं और यदि आवश्यक हो तो मैं उन्हें यहां रखूंगा।