android 4.0后不允许屏蔽掉home键
屏蔽home键的方法
|
// 屏蔽掉Home键 public void onAttachedToWindow() { this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG); super.onAttachedToWindow(); } |
下面是实例demo
|
android4.0以上版本运行之后就会报错 java.lang.IllegalArgumentException: Window type can not be changed after the window is added. android4.0以下就没有问题 代码 package com.happylock; import java.sql.Date; import java.text.SimpleDateFormat; import android.app.Activity; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.drawable.AnimationDrawable; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.util.Log; import android.view.KeyEvent; import android.view.Window; import android.view.WindowManager; import android.widget.ImageView; import android.widget.TextView; import com.happylock.R; import com.happylock.service.ZdLockService; import com.happylock.util.DateUtil; import com.happylock.util.ImageUtil; public class LockActivity extends Activity { private static String TAG = "QINZDLOCK"; private SliderRelativeLayout sliderLayout = null; private WindowManager manager; private ImageView dot_left; private ImageView dot_right; private AnimationDrawable animArrowDrawable = null; private AnimationDrawable animArrowDrawable1 = null; private TextView tv_date = null; private TextView tv_date1 = null; private TextView tv_time = null; private static final int msgKey1 = 1; public static int MSG_LOCK_SUCESS = 1; public static final int FLAG_HOMEKEY_DISPATCHED = 0x80000000;//android 4.0版本以上的屏蔽home键 /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN); this.getWindow().setFlags(FLAG_HOMEKEY_DISPATCHED, FLAG_HOMEKEY_DISPATCHED);//android 4.0版本以上的屏蔽home键 关键代码 super.onCreate(savedInstanceState); setContentView(R.layout.lockactivity_main); manager = (WindowManager) getSystemService(WINDOW_SERVICE); tv_date = (TextView) findViewById(R.id.tv_date); tv_date1 = (TextView) findViewById(R.id.tv_date1); tv_time = (TextView) findViewById(R.id.tv_time); new TimeThread().start(); // 设置图片 Bitmap bitmap = ImageUtil.scaleImage(manager, getResources(), R.drawable.dot_line_left, 50, 50); Bitmap bitmap1 = ImageUtil.scaleImage(manager, getResources(), R.drawable.dot_line_right, 50, 50); dot_left = (ImageView) findViewById(R.id.dot_left); dot_right = (ImageView) findViewById(R.id.dot_right); dot_left.setImageBitmap(bitmap); dot_right.setImageBitmap(bitmap1); initViews(); startService(new Intent(LockActivity.this, ZdLockService.class)); sliderLayout.setMainHandler(mHandler); } private void initViews() { sliderLayout = (SliderRelativeLayout) findViewById(R.id.slider_layout); // 获得动画,并开始转动 animArrowDrawable = new AnimationDrawable(); animArrowDrawable1 = new AnimationDrawable(); } @Override protected void onResume() { super.onResume(); // 设置动画 mHandler.postDelayed(AnimationDrawableTask, 300); // 开始绘制动画 } @Override protected void onPause() { super.onPause(); animArrowDrawable.stop(); animArrowDrawable1.stop(); } protected void onDestory() { super.onDestroy(); } // 通过延时控制当前绘制bitmap的位置坐标 private Runnable AnimationDrawableTask = new Runnable() { public void run() { animArrowDrawable.start(); animArrowDrawable1.start(); mHandler.postDelayed(AnimationDrawableTask, 300); } }; private Handler mHandler = new Handler() { public void handleMessage(Message msg) { Log.i(TAG, "handleMessage : #### "); if (MSG_LOCK_SUCESS == msg.what) finish(); // 锁屏成功时,结束我们的Activity界面 } }; // 屏蔽掉Home键 public void onAttachedToWindow() { this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG); super.onAttachedToWindow(); } // 屏蔽掉Back键 public boolean onKeyDown(int keyCode, KeyEvent event) { if (event.getKeyCode() == KeyEvent.KEYCODE_BACK){ return true; }else{ return super.onKeyDown(keyCode, event); } } // 开启一个线程,动态显示时间 public class TimeThread extends Thread { @Override public void run() { do { try { Thread.sleep(1000); Message msg = new Message(); msg.what = msgKey1; timeHandler.sendMessage(msg); } catch (InterruptedException e) { e.printStackTrace(); } } while (true); } } private Handler timeHandler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what) { case msgKey1: Date curDate = new Date(System.currentTimeMillis());// 获取当前时间 // 设置年-月-日 String str = new SimpleDateFormat("yyyy-MM-dd").format(curDate); // 设置周几 String str1 = DateUtil.DateToWeek(curDate); // 设置时:分 String str2 = new SimpleDateFormat("HH:mm").format(curDate); tv_date.setText(str); tv_date1.setText(str1); tv_time.setText(str2); break; default: break; } } }; } 解决方法http://blog.csdn.net/com360/article/details/6663586 |
android 4.0后不允许屏蔽掉home键的更多相关文章
- 大约Android 3.0后AsyncTask默认的单线程分析
在Android下了很大的后台操作在需要的情况下.通常用于AsyncTask这个类.比方说,网络负载形象.访问server接口.一般的情况是使用一个的一例AsyncTask对象mTask,复制Asyn ...
- 转 Android 4.0后,自定义Title报错 You cannot combine custom titles with other title feature
自定义Titlebar时为了避免冲突 需要修改:AndroidManifest.xml android:theme="@style/mystyle" styles.xml文件中 ...
- 屏蔽掉返回键,menu键,Home键
public class LockActivity extends Activity{ private static final int FLAG_HOMEKEY_DISPATCHED = 0x800 ...
- Android 5.0之后屏幕截图的方法
截图的几种方法 Android获取屏幕截图主要有以下三种方法 1.通过view.getDrawingCache()获取指定View的绘制缓存来实现截屏. 这种方式Android 5.0之前也可以,且不 ...
- Android 5.0之前屏幕截图的方法
截图的几种方法 Android获取屏幕截图主要有以下三种方法 1.通过view.getDrawingCache()获取指定View的绘制缓存来实现截屏. 这种方式Android 5.0之前也可以,且不 ...
- Android 7.0 通过FileProvider共享文件
一.概述 Android 7.0后,提供了很多新特性,其中最主要的是禁止了通过file://URI直接在文件操作共享文件(该操作会触发FileUriExposedException),而是通过cont ...
- Android 7.0 FileProvider 使用说明
FileProvider FileProvider 这个组件在Android 22.0.0 (也就是 Android 5.0 ) 版本下加入进Android系统,该组件是ContentProvider ...
- android 5.0新特性学习总结之下拉刷新(一)
android 5.0 后google最终在 support v4 包下 添加了下拉刷新的控件 项目地址: https://github.com/stormzhang/SwipeRefreshLayo ...
- android studio从1.5更新到2.0后terminal无法运行gradle命令,提示无法找到gradle命令
android studio从1.5更新到2.0后terminal无法运行gradle命令,提示无法找到gradle命令. 'gradle' 不是内部或外部命令,也不是可运行的程序 或批处理文件. 设 ...
随机推荐
- java多线程之yield()方法详解
yiled()方法的作用是放弃当前CPU的资源,将资源让给其它线程,但放弃的时间不确定,有可能刚刚放弃,又马上获得了CPU时间片.下面看一个小例子,看一下具体效果. public stati ...
- photoshop使用注意事项
CMYK 与 RGB 任何网络图片都会以RGB模式显示图片: 数码图片以RGB模式被捕捉,因此应在RGB模式下编辑: 大部分工具和滤镜只能在RGB模式下使用: RGB模式和CMYK模式之间不能实现无损 ...
- java之内存可见型
1.可见性的概念 一个线程对于共享变量的修改,能够及时被其他的线程看到. 2.什么是共享变量 一个变量在多个线程中的工作内存中都存在变量副本,那么这个变量在这几个线程之间共享. 3.Java线程的工作 ...
- BZOJ 1612: [Usaco2008 Jan]Cow Contest奶牛的比赛( floyd )
对于第 i 头牛 , 假如排名比它高和低的数位 n - 1 , 那么他的 rank 便可以确定 . floyd -------------------------------------------- ...
- Android 开发笔记 “SQLite”
SQLite 入门与分析 1.SQLite介绍 自几十年前出现的商业应用程序以来,数据库就成为软件应用程序的主要组成部分.正与数据库管理系统非常关键一样,它们也变得非常庞大,并占用了相当多的系统资源, ...
- Python Extension Packages下载链接
一.http://www.lfd.uci.edu/~gohlke/pythonlibs/ 下载后可使用pip包管理器进行安装,在命令行中输入: pip install 安装包的路径
- judge loop in undirected graph
一 深度优先遍历,参考前面DFS(white and gray and black) 二 根据定点以及边数目进行判断 如果m(edge)大于n(vertex),那么肯定存在环 算法如下: 1 删除所有 ...
- 使用 Async 和 Await 的异步编程 #Reprinted#
异步方法容易编写 string urlContents = await client.GetStringAsync(); 以下特征总结了使上面一个异步方法. 方法签名包含一个 Async 或async ...
- [转]lftp的致命错误:证书验证:不信任
原文:http://rajaseelan.com/2011/12/18/lftp-fatal-error-certificate-verification-not-trusted/如果您使用lftp的 ...
- 高级UNIX环境编程
常规文件 只有索引节号(i-number,是一批i-node的索引),i-node不含文件名及数据字节,包括文件类型,链接数量,uid,gid,访问权限,字节数,最后访问时间,最后修改时间,信息节点最 ...