zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    关系型数据库——主键&外键的
    JSON运用——PHP中使用json数据格式定义字面量对象的方法
    JSON.parse与eval的区别
    css中那些属性可以被继承
    js笔记 -- toString() 和String()
    MYSQL IFNULL函数的使用
    mysql临时表产生的执行效率问题改进(转)
    mysql中concat 和 group_concat()的用法
    转载mysql数据库配置优化
    浅谈MySql的存储引擎(转)
  • 原文地址:https://www.cnblogs.com/yaya-Android/p/4506344.html
Copyright © 2011-2022 走看看