android手机冻屏问题,android 模拟冻屏 代码实现

这篇博客介绍了如何通过代码实现Android应用程序中屏蔽特定按键和状态栏,包括禁止Home键、音量键及状态栏,并探讨了通过'am'命令来挂起系统进程以阻止电源键操作的方法。此外,提供了完整的源码示例,涉及Activity管理和触摸事件处理。
摘要由CSDN通过智能技术生成

思路:

第一种方案:屏蔽除power外的其他按键,屏蔽状态栏下拉,屏蔽触屏。

代码如下:

需要系统签名:

添加权限:

package com.example.demo;

import android.app.Activity;

import android.os.Bundle;

import android.view.KeyEvent;

import android.view.Menu;

import android.util.Log;

import android.view.Window;

import android.view.WindowManager;

import android.app.StatusBarManager;

import android.view.MotionEvent;

public class MainActivity extends Activity {

public static final int FLAG_HOMEKEY_DISPATCHED = 0x80000000;

private StatusBarManager mStatusBarManager;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

requestWindowFeature(Window.FEATURE_NO_TITLE);

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

getWindow().addFlags(FLAG_HOMEKEY_DISPATCHED); //禁止home

disableStatusbar();// 禁止状态栏

setContentView(R.layout.activity_main);

}

@Override

public boolean onCreateOptionsMenu(Menu menu) {

// Inflate the menu; this adds items to the action bar if it is present.

// getMenuInflater().inflate(R.menu.main, menu);

return true;

}

@Override

public boolean onTouchEvent(MotionEvent event) {

// TODO Auto-generated method stub

return true;

}

private void disableStatusbar(){

// 第一句是否可以提出去

mStatusBarManager = (StatusBarManager) this.getSystemService(this.STATUS_BAR_SERVICE);

mStatusBarManager.disable(StatusBarManager.DISABLE_EXPAND);

}

@Override

public boolean onKeyDown(int keyCode, KeyEvent event) {

// TODO Auto-generated method stub

switch (keyCode) {

case KeyEvent.KEYCODE_VOLUME_DOWN:

case KeyEvent.KEYCODE_VOLUME_UP:

case KeyEvent.KEYCODE_HOME:

return true;

default:

break;

}

return super.onKeyDown(keyCode, event);

}

@Override

public boolean onKeyLongPress(int keyCode, KeyEvent event) {

// TODO Auto-generated method stub

switch (keyCode) {

case KeyEvent.KEYCODE_VOLUME_DOWN:

case KeyEvent.KEYCODE_VOLUME_UP:

case KeyEvent.KEYCODE_HOME:

return true;

default:

break;

}

return super.onKeyLongPress(keyCode, event);

}

@Override

public void onBackPressed() {

// TODO Auto-generated method stub

// super.onBackPressed();

}

}

如此下来,可以模拟除了power外的所有操作。

2:

以上行为,没法屏蔽power,下面方案实现屏蔽power

这里使用了am命令操作.

具体操作:进入cmd 输入adb shell进入终端

am hang 即可。

3:使用apk实现am命令方案:

runCommand("am hang");

private boolean runCommand(String command) {

java.lang.Process process = null;

try {

process = Runtime.getRuntime().exec(command);

Log.i("lxm", "Runtime");

process.waitFor();

} catch (Exception e) {

e.printStackTrace();

Log.i("lxm", "error");

return false;

} finally {

try {

process.destroy();

} catch (Exception e) {

}

}

Log.i("lxm", "finally");

return true;

}

需要添加权限:

具体代码可以查看activitymanagerserver.java 里面的hang函数。

4:完整apk源码为:

AndroidManifest.xml

package="com.example.demo"

android:versionCode="1"

android:versionName="1.0" >

android:minSdkVersion="8"

android:targetSdkVersion="18" />

android:allowBackup="true"

android:icon="@drawable/ic_launcher"

android:label="@string/hello_world"

android:screenOrientation="portrait"

android:theme="@style/AppTheme" >

android:name="com.example.demo.MainActivity"

android:label="@string/app_name" >

MainActivity.java

package com.example.demo;

import android.app.Activity;

import android.os.Bundle;

import android.view.KeyEvent;

import android.view.Menu;

import android.util.Log;

import android.view.Window;

import android.view.WindowManager;

import android.app.StatusBarManager;

import android.view.MotionEvent;

public class MainActivity extends Activity {

public static final int FLAG_HOMEKEY_DISPATCHED = 0x80000000;

private StatusBarManager mStatusBarManager;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

requestWindowFeature(Window.FEATURE_NO_TITLE);

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

getWindow().addFlags(FLAG_HOMEKEY_DISPATCHED);

disableStatusbar();

setContentView(R.layout.activity_main);

java.lang.Process process = null;

runCommand("am hang");

}

private boolean runCommand(String command) {

java.lang.Process process = null;

try {

process = Runtime.getRuntime().exec(command);

Log.i("lxm", "Runtime");

process.waitFor();

} catch (Exception e) {

e.printStackTrace();

Log.i("lxm", "error");

return false;

} finally {

try {

process.destroy();

} catch (Exception e) {

}

}

Log.i("lxm", "finally");

return true;

}

@Override

public boolean onCreateOptionsMenu(Menu menu) {

// Inflate the menu; this adds items to the action bar if it is present.

// getMenuInflater().inflate(R.menu.main, menu);

return true;

}

@Override

public boolean onTouchEvent(MotionEvent event) {

// TODO Auto-generated method stub

return true;

}

private void disableStatusbar(){

// 第一句是否可以提出去

mStatusBarManager = (StatusBarManager) this.getSystemService(this.STATUS_BAR_SERVICE);

mStatusBarManager.disable(StatusBarManager.DISABLE_EXPAND);

}

@Override

public boolean onKeyDown(int keyCode, KeyEvent event) {

// TODO Auto-generated method stub

switch (keyCode) {

case KeyEvent.KEYCODE_VOLUME_DOWN:

case KeyEvent.KEYCODE_VOLUME_UP:

case KeyEvent.KEYCODE_HOME:

return true;

default:

break;

}

return super.onKeyDown(keyCode, event);

}

@Override

public boolean onKeyLongPress(int keyCode, KeyEvent event) {

// TODO Auto-generated method stub

switch (keyCode) {

case KeyEvent.KEYCODE_VOLUME_DOWN:

case KeyEvent.KEYCODE_VOLUME_UP:

case KeyEvent.KEYCODE_HOME:

return true;

default:

break;

}

return super.onKeyLongPress(keyCode, event);

}

@Override

public void onBackPressed() {

// TODO Auto-generated method stub

// super.onBackPressed();

}

}

android.mk 为:

LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE_TAGS := optional

LOCAL_SRC_FILES := $(call all-java-files-under, src)

#LOCAL_STATIC_JAVA_LIBRARIES := com.android.phone.common

LOCAL_PACKAGE_NAME := Frozen

LOCAL_CERTIFICATE := platform

#LOCAL_PROGUARD_FLAG_FILES := proguard.flags

include $(BUILD_PACKAGE)

# Use the folloing include to make our test apk.

include $(call all-makefiles-under,$(LOCAL_PATH))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值