android——禁止状态栏下拉

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android——禁止状态栏下拉相关的知识,希望对你有一定的参考价值。

参考技术A 使用的ionic工程,重点是3,4方法;
找到了几种方法:
1、

报错:无法引入StatusBarManager
参考: https://stackoverflow.com/questions/11323637/why-cant-i-find-a-reference-to-the-statusbarmanager-class-directly
2、

3、是1方法延伸,使用反射调用;

具体参考: https://blog.csdn.net/qq_26819733/article/details/52203783
这个方法缺陷:android5.0以上会报错:
Caused by: java.lang.SecurityException: StatusBarManagerService: Neither user 10290 nor current process has android.permission.STATUS_BAR
无法获取到权限;
办法:app运行时请求权限
参考: https://stackoverflow.com/questions/32742327/neither-user-10102-nor-current-process-has-android-permission-read-phone-state
4、使用这个插件: https://github.com/hkalina/cordova-plugin-kiosk

Android 系统锁屏实现固件升级动画

前言

在Android的开发过程中,有时候会有一些需求,实现一个类似锁屏的功能,我们经常会使用的一些悬浮窗效果或者弹出界面霸占整个手机屏幕,禁止用户交互,比如:手机的虚拟导航菜单屏蔽掉,状态栏禁止下拉或隐藏,原因就是用户可以借助下拉状态栏跳出程序回到桌面,如何屏蔽虚拟导航菜单栏和禁止下拉状态栏呢?Android 没有提供API 让我们来调用,只有查看源码, 利用Java 的反射机制来屏蔽,结果效果不怎么理想。后来就想有没有更好的办法来实现和优化呢,这就想到了WindowManger,例如Android本身就提供了Dialog等控件来实现,但是在很多情况下,我们需要更加灵活的使用方式,比如完全自定义浮出窗口中所需要显示的内容等,这个时候我们就会用到WindowManager.addView的方式来显示一个自定义的window,来遮挡住Activity里的布局,最终绕过了Activity。

正题

预览下要实现的效果:


首先我们添加权限:

  <!-- 系统弹框权限 -->
 <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>

把Activity的主题设置为Dialog 的样式:

<activity android:name=".UpdateFirmwareActivity"
          android:theme="@style/dialog_translucent">
     <intent-filter>
         <action android:name="android.intent.action.MAIN" />
          <category android:name="android.intent.category.LAUNCHER" />
     </intent-filter>
</activity>

MainActivity的主要代码:


        WindowManager wm=(WindowManager)getApplicationContext().getSystemService(Context.WINDOW_SERVICE);
        WindowManager.LayoutParams wmParams = new WindowManager.LayoutParams();
        wmParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ERROR;
        wmParams.format = PixelFormat.TRANSPARENT;
        wmParams.flags=WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
                | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN
                | WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR;
        wmParams.width= Adaptation.screenWidth;
        wmParams.height=Adaptation.screenHeight;
        wm.addView(mView, wmParams);
        //设置全屏
        getWindow().setLayout(ViewGroup.LayoutParams.FILL_PARENT,
                ViewGroup.LayoutParams.FILL_PARENT);

这是设置类似系统锁屏的主要代码在onCreate()方法中调用,加载自己的布局文件用LayoutInflater来加载:

 mView = LayoutInflater.from(this).inflate(R.layout.activity_update,null);

你可以在这个界面上设计成你想要的效果,就算按了锁屏功能,你还是无法交互,只能强制重启,直到打开这个再次打开这个界面。

上面的动画就是简单的属性动画啦!
代码如下:

rotate_right.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <rotate
        android:fromDegrees="0"
        android:toDegrees="-359"
        android:duration="1500"
        android:repeatCount="-1"
        android:pivotX="50%"
        android:pivotY="50%" />
</set>

这是是逆时针围着中心旋转的,顺时针旋转,把toDegrees 的值设置为正数就可以了。android:toDegrees=”-359” ,如果设置成360的话,每转一圈,在起始的地方就会出现卡顿现象。
在MainActivity调用:

 private Animation operatingAnimLeft;


 //逆时针旋转 
       //逆时针旋转
        operatingAnimLeft = AnimationUtils.loadAnimation(this, R.anim.rotate_left);
        LinearInterpolator lin = new LinearInterpolator();
        operatingAnimLeft.setInterpolator(lin);
        if(operatingAnimLeft!=null)
            mToLeftRotate.startAnimation(operatingAnimLeft);
        

最后为了防止我们调起界面退不回来,强制重启的麻烦,设置一个监听事件:

 /**
         * 防止为了退不出来,我设置一个点击事件移除view
         */
        mToLeftRotate.setOnClickListener(new View.OnClickListener() 
            @Override
            public void onClick(View v) 
                if (mView != null) 
                    wm.removeView(mView);
                    MainActivity.this.finish();
                
            
        );

以上就是实现Android 系统类似锁屏的效果的主要代码,禁止用户交互的方案,以上仅供参考!

源码放在 GitHub上:【UpgradeAndLockScreen】

希望大家能够指点或提出宝贵意见,共同学习,谢谢!
转载请注明出处:http://blog.csdn.net/u011974987/article/details/56845216
欢迎关注我的社交网站!
个人博客:http://xuhaoblog.com
Github:https://github.com/git-xuhao

以上是关于android——禁止状态栏下拉的主要内容,如果未能解决你的问题,请参考以下文章

android4.4上全屏界面实现禁止状态栏下拉

Android 系统锁屏实现固件升级动画

[Parse][Android] 如何在应用程序运行时禁止显示推送通知?

android 中禁止RatingBar选择 或 改变

安卓手机 被禁止截屏 怎么截屏

判断当前app是不是被禁止使用网络