【拯救电源键】最详尽的android开发一键锁屏实例 提供免费源码+apk

现在的手机屏幕越来越大,单手操控起来颇为不便,比如锁屏。电源键一般为实体键,经常按难免损耗。所以一键锁屏软件应运而生,既能方便地锁屏,还能减少电源键损耗。甚至许多手机厂商在自家的rom里集成了这个功能,如MIUI。然而也有没有集成锁屏功能的,比如我的手机,只好自己去网上下载。应用市场里五花八门的锁屏软件,有的下载下来还有广告,或者其他一堆的功能。但是我只需要单纯的锁屏功能。所以索性我自己来写一个,自己用得才踏实。自己还起了个好玩的名字“拯救电源键”。大笑

经过网上查阅资料,并一步步实现了这个小应用。在前辈们的基础上,我将讲解得更加详尽,以供初学者交流学习。还将提供安装包优化的方法(最后我的安装包只有16KB大)。好了,进入项目讲解。

一、项目结构。需要自己写的地方都展开了,如图:


一目了然吧。


二、代码。讲解请看注释。

1、MyLockActivity.java

package app.lockscreen;

import xw.onekeylockscreen.R;
import android.app.Activity;
import android.app.admin.DevicePolicyManager;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;

public class MyLockActivity extends Activity {
	
	//设备管理器
	DevicePolicyManager mPolicyManager;
	//ComponentName(组件名称)是用来打开其他应用程序中的Activity或服务的
	ComponentName componentName;
	//requestCode
	public static final int MY_REQUEST_CODE = 10086;
	 
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		
		//获得设备管理器服务
		mPolicyManager = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
		
		//这里的MyReceiver是DeviceAdminReceiver的子类
		componentName = new ComponentName(this, MyReceiver.class);
		
		//先判断是否具备锁屏权限,如果具有,则执行lockNow()方法锁屏并finish()当前Activity
		//安装后第一次运行都要去获得权限
		if (mPolicyManager.isAdminActive(componentName)){
			mPolicyManager.lockNow();
			finish();
		} else {
			getAdminActive();//获取权限
		}
		
		//有人说将setContentView()方法放在后面可以避免锁屏后闪一下。
		//但我试过放在前后都看不出什么区别,估计是手机处理太快了吧
		setContentView(R.layout.main_layout);
		
		//锁屏后关闭自己的进程,节约资源
		android.os.Process.killProcess(android.os.Process.myPid()); 
	}

	/**
	 * 获取锁屏权限
	 */
	private void getAdminActive() {
		
		// 启动设备管理(隐式Intent) - 在AndroidManifest.xml中设定相应过滤器
		Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
		//权限列表
		intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, componentName);
		//添加描述,在第一次启动需要权限激活时,可以看到自定义的描述
		intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, "点击“激活”后才能使用锁屏功能哦^^");
		
		startActivityForResult(intent, MY_REQUEST_CODE);
	}
	
	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		
		 //获取权限成功,锁屏并finish(),否则继续获取权限
		if (requestCode == MY_REQUEST_CODE && requestCode == Activity.RESULT_OK){
			mPolicyManager.lockNow();
			finish();
		} else {
			getAdminActive();//继续获取权限
		}
		
		super.onActivityResult(requestCode, resultCode, data);
	}
}

2、MyReceiver.java

package app.lockscreen;

import android.app.admin.DeviceAdminReceiver;

public class MyReceiver extends DeviceAdminReceiver {
	//这个类里可以啥也不写
}

3、在AndroidManifest.xml里注册 MyLockActivity和MyReceiver,看名字就知道前面是Activity,后面是Receiver。请记得给MyLockActivity加上属性:

android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"
或 
android:theme="@android:style/Theme.NoDisplay"

这样可以确保锁屏后屏幕不会闪一下。



三、XML文件。

1.main_layout。很简单,因为不需要界面显示,所以设一个空的线性布局或相对布局都没问题。


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

</LinearLayout>

2、my_lock_screen.xml。这里设置锁屏的权限,所以不可或缺。这里先提一句,这个文件名要在manifest里导入。需要注意的是这里面的字段不能Alt+/自动提示,需要手动敲。

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

3、AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="xw.onekeylockscreen"
    android:versionCode="1"
    android:versionName="1.01" >

    <uses-sdk
        android:minSdkVersion="10"
        android:targetSdkVersion="10" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        
         <!--注册MyLockActivity的内容 -->
        <activity
            android:name="app.lockscreen.MyLockActivity" android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

         <!--注册MyReceiver的内容 -->
        <receiver
            android:name="app.lockscreen.MyReceiver"
            android:description="@string/app_name"
            android:label="@string/app_name"
            android:permission="android.permission.BIND_DEVICE_ADMIN" >
            <meta-data
                android:name="android.app.device_admin"
                android:resource="@layout/my_lock_screen"/> <!--刚才说的需要导入的文件名 -->

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

</manifest>

至此,项目中所有的代码部分结束了。不出意外,可以在手机上运行了。

下面介绍如何给apk安装包瘦身。

五、优化安装包。

当我写完导出apk后发现安装包有几百KB,然后我又把drawable下的logo图删得只剩一张,还是与网上其他小的一键锁屏软件安装包容量相距甚远。然后我又查了如何给apk瘦身的资料,发现了如下方法:

选中当前项,右键选择“properties”,选择“Java Build Path”,选择“Order and Export”,只勾选中最后那一项(前两项是必选的,会发现点击没有反应),如图:


这样你的安装包就可以变瘦啦。可以与优化前对比效果。

六、源码和apk下载。

源码: http://download.youkuaiyun.com/detail/u013724061/7684565

apk:http://download.youkuaiyun.com/detail/u013724061/7684569

logo图也贴出来吧,我自己找图P的,感觉还不错。手里没有现成的图的话将就用啦,但记得自己调整分辨率哈。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值