屏蔽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键的更多相关文章

  1. 大约Android 3.0后AsyncTask默认的单线程分析

    在Android下了很大的后台操作在需要的情况下.通常用于AsyncTask这个类.比方说,网络负载形象.访问server接口.一般的情况是使用一个的一例AsyncTask对象mTask,复制Asyn ...

  2. 转 Android 4.0后,自定义Title报错 You cannot combine custom titles with other title feature

      自定义Titlebar时为了避免冲突 需要修改:AndroidManifest.xml android:theme="@style/mystyle" styles.xml文件中 ...

  3. 屏蔽掉返回键,menu键,Home键

    public class LockActivity extends Activity{ private static final int FLAG_HOMEKEY_DISPATCHED = 0x800 ...

  4. Android 5.0之后屏幕截图的方法

    截图的几种方法 Android获取屏幕截图主要有以下三种方法 1.通过view.getDrawingCache()获取指定View的绘制缓存来实现截屏. 这种方式Android 5.0之前也可以,且不 ...

  5. Android 5.0之前屏幕截图的方法

    截图的几种方法 Android获取屏幕截图主要有以下三种方法 1.通过view.getDrawingCache()获取指定View的绘制缓存来实现截屏. 这种方式Android 5.0之前也可以,且不 ...

  6. Android 7.0 通过FileProvider共享文件

    一.概述 Android 7.0后,提供了很多新特性,其中最主要的是禁止了通过file://URI直接在文件操作共享文件(该操作会触发FileUriExposedException),而是通过cont ...

  7. Android 7.0 FileProvider 使用说明

    FileProvider FileProvider 这个组件在Android 22.0.0 (也就是 Android 5.0 ) 版本下加入进Android系统,该组件是ContentProvider ...

  8. android 5.0新特性学习总结之下拉刷新(一)

    android 5.0 后google最终在 support v4 包下 添加了下拉刷新的控件 项目地址: https://github.com/stormzhang/SwipeRefreshLayo ...

  9. android studio从1.5更新到2.0后terminal无法运行gradle命令,提示无法找到gradle命令

    android studio从1.5更新到2.0后terminal无法运行gradle命令,提示无法找到gradle命令. 'gradle' 不是内部或外部命令,也不是可运行的程序 或批处理文件. 设 ...

随机推荐

  1. ie条件注释还能这样写

    通过条件注释给html开始标签定义不同的class, 来区分不同版本的IE,可以在样式表中避免 样式属性hack (如 _margin-top, *float:none ) 注意: IE10+不支持条 ...

  2. QT图片旋转

    目前发现有两种方法,如下: 1.使用QPixmap的transformed函数旋转,这个函数默认是以图片中心为旋转点,不能随意设置旋转点,使用如下: QMatrix leftmatrix; leftm ...

  3. Windows Phone 8初学者开发—第1部分:系列介绍

    原文 Windows Phone 8初学者开发—第1部分:系列介绍 您好,欢迎来到这个包含35课为Window Phone 8平台创建应用程序的系列教程.我叫Bob Tabor,在过去的11年中我一直 ...

  4. perl学习(2) 基本数据类型等

    1.1.数字 所有数字格式内部一致,全部是double 7.25e45   == 7.25 * 1045 5.25 6.00 5.1-2.4          #5.1-2.4,2.7 10/3    ...

  5. ios7状态栏属性的设置

    /* 状态栏的管理: 1> iOS7之前:UIApplication进行管理 2> iOS7开始:交给对应的控制器去管理 */ // 设置状态栏的样式 - (UIStatusBarStyl ...

  6. BZOJ 1756: Vijos1083 小白逛公园

    题目 1756: Vijos1083 小白逛公园 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 856  Solved: 264[Submit][Sta ...

  7. BZOJ 1604: [Usaco2008 Open]Cow Neighborhoods 奶牛的邻居

    题目 1604: [Usaco2008 Open]Cow Neighborhoods 奶牛的邻居 Time Limit: 5 Sec  Memory Limit: 64 MB Description ...

  8. VS2010/MFC对话框一:创建对话框模板和修改对话框属性

    创建对话框主要分两大步: 第一,创建对话框资源,主要包括创建新的对话框模板.设置对话框属性和为对话框添加各种控件: 第二,生成对话框类,主要包括新建对话框类.添加控件变量和控件的消息处理函数等. 创建 ...

  9. JavaScript语言基础知识6

    在前面的章节中,我们知道JavaScript代码,字符和数字值当添加,将计值转换成字符,即用户输入的数目值它们被转换为字符. 如今我们要做这种样例,我想将1和2相加: <HTML> < ...

  10. 自己动手为PHP7添加新的语法特性

    好文章! nikic介绍了如何向PHP添加新的语法特性,原文写的非常精彩,具体是添加in语法功能,使最终实现: <?php $words = ['hello', 'world', 'foo', ...