您的位置:首页 > 移动开发 > Android开发

Android(2) 实现摇晃锁屏,类似与点击关机按钮

2014-06-16 20:15 429 查看
实现屏幕休眠,类似于按下关机键

首先在AndroidManifest.xml文件中声明一个广播接受者

<pre name="code" class="java"> <receiver
android:name="cn.usst.LockScreen"
android:permission="android.permission.BIND_DEVICE_ADMIN" >
<meta-data
android:name="android.app.device_admin"
android:resource="@xml/device_admin" />

<intent-filter>
<action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
</intent-filter>
</receiver>



在<meta-data>标签里定义了一个xml文件用来说明权限.

在/res目录下新建xml文件夹,新建名为device_admin的xml文件,内容如下:

<?xml version="1.0" encoding="utf-8"?>
<device-admin
xmlns:android="http://schemas.android.com/apk/res/android">
<uses-policies>
<force-lock /><!--这里说明了锁屏的权限-->
</uses-policies>
</device-admin>


其他权限有 <wipe-data /> <!-- 清除所有数据(恢复出厂设置)-->

<reset-password /> <!-- 重置密码 -->

<limit-password /><!-- 限制密码选择-->

<watch-login /><!-- 监控登录尝试 -->

好了 配置到这就结束了,下面开始正片代码环节。

根据上面定义的一个广播接受者,我们先要创建一个名为LockScreen的类并且继承DeviceAdminReceiver(这是BroadReceiver的子类)

为了方便说明,我直接在LockScreen中创建了一个Activity类,并在AndroidManifest.xml中声明

<activity
android:name="cn.usst.LockScreen$Main"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>


好,下面来看LockScreen中的代码:

public class LockScreen extends DeviceAdminReceiver {

public static class Main extends Activity {// 这里声明了一个Activity类

private Intent service;// 用于启动服务
private DevicePolicyManager dpm;// 定义设备管理器
private ComponentName componentName;// 组建名称用来打开Activity或服务的
private Intent intent;

Button start, stop;// 定义两个按钮用于开启和关闭服务

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 初始化
componentName = new ComponentName(this, LockScreen.class);
// 新建intent对象启动service服务
service = new Intent(this, ShackeLockService.class);
start = (Button) findViewById(R.id.open);
start.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Toast.makeText(Main.this, "开启", Toast.LENGTH_SHORT).show();
// 启动服务
startService(service);
}
});
stop = (Button) findViewById(R.id.close);
stop.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Toast.makeText(Main.this, "关闭", Toast.LENGTH_SHORT).show();
// 关闭服务
stopService(service);
}
});
<strong>// !!!!!!重点!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
// 首先获得设备管理器
dpm = (DevicePolicyManager) getSystemService("device_policy");
while (true) {
// 当当前服务没有被激活的时候
if (!dpm.isAdminActive(componentName)) {
getAdmin();
}
return;
}</strong>
}

<strong>private void getAdmin() {
// 添加锁屏权限,一定要添加不然会报错!!!!!
intent = new Intent("android.app.action.ADD_DEVICE_ADMIN");
intent.putExtra("android.app.extra.DEVICE_ADMIN", componentName);
intent.putExtra("android.app.extra.ADD_EXPLANATION",
"Additional text explaining why this needs to be added");
startActivity(intent);
}</strong>

}
}


在启动服务之后,我们注册了一个晃动监听器

@Override
public void onCreate() {
// TODO Auto-generated method stub
sensorManagerHelper = new SensorManagerHelper(getApplicationContext());
sensorManagerHelper.start();
}


在onSensorChanged()方法中,当检测到摇晃的时候添加锁屏代码:

<strong>// 得到设备管理器
DevicePolicyManager manager = (DevicePolicyManager) context.getSystemService("device_policy");
// 锁屏
manager.lockNow();</strong>


然后当服务开启的时候,只要摇晃手机,屏幕就能自动锁屏
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: