Android定制化自己的开锁界面

  android 在4.0以前,解锁界面是采用横滑的方式,在4.0之后,就采用了中心圆环的解锁方式,4.0和4.1都是有三个图标的,分别是:向上的google搜索应用,向左的拍照应用以及向右的正常解锁功能。但有时候,客户会要求改成他们自己所需要的解锁应用。下面我们来看一下,该如何修改系统给定的锁屏界面。

  首先来说,要定制自己的锁屏界面,会有两种方式:

  第一,基于源码来修改

  第二,定制自己的第三方应用开发

  在源码下修改,是相对要简单很多的,但是需要准备的也是更多的,首先是需要有源码,再者需要有搭建好的源码编译环境。基于第三方的应用开发,要做的东西就相对较多一下,比如电量、时间、天气等只要在锁屏界面能看到的一切东西都需要自己去做,同时,在将应用嵌入到设备时,你要将系统原声的锁屏界面干掉。

  这里介绍修改系统源码的方式

  首先,来看资源文件arrays.xml,该文件在目录:framework/base/core/res/res/values下。先看代码

<span style="font-size: 18px;">  </span><span style="font-size:12px;">  <array name="lockscreen_targets_with_camera">
                <item>@drawable/ic_lockscreen_unlock</item>
                <item>@drawable/ic_action_assist_generic</item>
                <item>@drawable/ic_lockscreen_camera</item>
                <item>@null</item>
    </array></span>
   这个数组是在4.0 和4.1中引用的,也就是分别对应的向上的google应用(当然,实际代码中是对应到搜索应用的,在Android 设备中google是默认的搜索应用),向左的拍照以及向右的正常解锁。

    <array name="lockscreen_targets_unlock_only">
        <item>@android:drawable/ic_lockscreen_unlock</item>
    </array>
  这个就是4.2之后的单一向右解锁界面所使用的数组。

  使用这两个数组的布局则是:keyguard_glow_pad_view.xml,在framework/base/core/res/res/layout/文件夹下

<!-- This is the selector widget that allows the user to select an action. -->
<com.android.internal.widget.multiwaveview.GlowPadView 
    xmlns:prvandroid="http://schemas.android.com/apk/prv/res/android"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/glow_pad_view"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:contentDescription="@string/keyguard_accessibility_slide_area"
    android:gravity="@integer/kg_selector_gravity"
    android:orientation="horizontal"
    prvandroid:allowScaling="true"
    prvandroid:directionDescriptions="@*android:array/lockscreen_direction_descriptions"
    prvandroid:feedbackCount="1"
    prvandroid:firstItemOffset="@integer/kg_glowpad_rotation_offset"
    prvandroid:glowRadius="@*android:dimen/glowpadview_glow_radius"
    prvandroid:handleDrawable="@*android:drawable/ic_lockscreen_handle"
    prvandroid:innerRadius="@*android:dimen/glowpadview_inner_radius"
    prvandroid:magneticTargets="true"
    prvandroid:outerRadius="@*android:dimen/glowpadview_target_placement_radius"
    prvandroid:outerRingDrawable="@*android:drawable/ic_lockscreen_outerring"
    prvandroid:pointDrawable="@*android:drawable/ic_lockscreen_glowdot"
    prvandroid:snapMargin="@*android:dimen/glowpadview_snap_margin"
    prvandroid:targetDescriptions="@array/lockscreen_target_descriptions_unlock_only"
    prvandroid:targetDrawables="@array/lockscreen_targets_unlock_only"
    prvandroid:vibrationDuration="20" />
  由prvandroid:targetDrawables="@array/lockscreen_targets_unlock_only" 这行代码我们知道, 该文件当前引用的是 lockscreen_targets_unlock_only ,也就是4.2之后的。而我们需要改修改的则仅仅只是lockscreen_targets_unlock_only 或者 lockscreen_targets_with_camera 中的一个。 比如,在4.0的基础上,我要把向下也加上一个应用,在只需要在drawable对应的包下加入一张图片,然后在 lockscreen_targets_with_camera 的末尾加上一行图片资源引用就行了。
   在这个地方有两个需要注意的地方,第一个是res包下各种资源都有很多个相应的包,比如values就有多达几十个包,所有一定要放对相应的包,或者你为了稳妥,可以在每个包下都加入。 第二个要注意的地方是:在4.2以后,你加入图片资源以后,不会在/values/public.xml中自动形成资源的ID,这个时候,就需要你自己加入进去。

  公共资源的加入方法:例如,你加了一张图片,那么你找到drawable这部分,在最后加入一行<public type="drawable" name="mypic" id="xxxxxxxxx"/>

id一定要是上面所没有的,为了保险,你可以直接在系统原有的最后一个drawable资源的ID上加1就行,私有资源的加入方法:<java-symbol type="drawable" name="mypic" /> 私有资源是不用加 ID,系统会自己生成。

  上面这块是资源的更改,资源更改完了之后,是代码里的修改,代码修改在以下文件

  KeyguardSelectorView.java(4.2+)   路径是:frameworks/base/policy/src/com/android/internal/policy/impl/keyguard/

  MultiWareView.java (4.0 /4.1) 路径是:frameworks/base/core/java/com/android/internal/widget/multiwaveview/

  4.0/4.1 和4.2之后所修改的Java文件是不相同的,上面已经有明确的标注了。在程序中只需要修改OnTriggerListener 这个监听里的不同方向就行了。

OnTriggerListener mOnTriggerListener = new OnTriggerListener() {

		public void onTrigger(View v, int target) {
			final int resId = mGlowPadView.getResourceIdForTarget(target);
			switch (resId) {
			case com.android.internal.R.drawable.ic_action_assist_generic:
				Intent assistIntent = ((SearchManager) mContext
						.getSystemService(Context.SEARCH_SERVICE))
						.getAssistIntent(mContext, UserHandle.USER_CURRENT);
				if (assistIntent != null) {
					mActivityLauncher.launchActivity(assistIntent, false, true,
							null, null);
				} else {
					Log.w(TAG, "Failed to get intent for assist activity");
				}
				mCallback.userActivity(0);
				break;

			case com.android.internal.R.drawable.ic_lockscreen_camera:
				mActivityLauncher.launchCamera(null, null);
				mCallback.userActivity(0);
				break;

			case com.android.internal.R.drawable.ic_lockscreen_unlock_phantom:
			case com.android.internal.R.drawable.ic_lockscreen_unlock:
				mCallback.userActivity(0);
				mCallback.dismiss(false);
				break;
			}
		}

		public void onReleased(View v, int handle) {
			if (!mIsBouncing) {
				doTransition(mFadeView, 1.0f);
			}
		}

		public void onGrabbed(View v, int handle) {
			mCallback.userActivity(0);
			doTransition(mFadeView, 0.0f);
		}

		public void onGrabbedStateChange(View v, int handle) {

		}

		public void onFinishFinalAnimation() {

		}

	};
  onTrigger()的switch(resId)就是我们需要修改的地方。

  4.0 /4.1的代码修改在MultiWareView.java类中,也是同样的方法。

  资源和代码都修改完了之后,就可以进行编译了,在终端分别定位到两个目录下,即 /framework/core/res 和 /framework/policy/src 下进行编译 ,执行命令mm,

注意要先编译资源,再编译代码。编译完成后,会生成framework.apk文件和policy.jar文件。把这两个文件拷贝出来,通过adb push的方式,把这两个文件push到你的设备当中,命令:adb push xxx/xxx/xxx/framework.apk(apk全路径) /system/framework/  和 adb push xxx/xxx/xxx/polilcy.jar(.jar全路径) /system/framework/ 

重启设备: adb reboot。 等待开机,那么就OK了。

  以上就是通过修改系统源码的方式修改开锁界面的全过程。

  对于通过第三方的应用来修改,参考下面这篇文章:http://blog.csdn.net/stevenhu_223/article/details/8831534

  另:账号dancing_with_wolf 有一篇一模一样的文章,两个都是我的号大笑






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值