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

实现屏幕休眠,类似于按下关机键

首先在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_adminxml文件,内容如下:

<?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>


然后当服务开启的时候,只要摇晃手机,屏幕就能自动锁屏


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值