Android 定制化自己的解锁界面

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

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

   在这里说一下怎么在源码下进行修改:

   首先,资源文件中的修改:

   arrays.xml 在framework/base/core/res/res/values中。

   文件中有两个数组 :

<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>
   这个数组是在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/  xml文件如下:

<?xml version="1.0" encoding="utf-8"?>
<!--
**
** Copyright 2012, The Android Open Source Project
**
** Licensed under the Apache License, Version 2.0 (the "License")
** you may not use this file except in compliance with the License.
** You may obtain a copy of the License at
**
**     http://www.apache.org/licenses/LICENSE-2.0
**
** Unless required by applicable law or agreed to in writing, software
** distributed under the License is distributed on an "AS IS" BASIS,
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
** See the License for the specific language governing permissions and
** limitations under the License.
*/
-->

<!-- 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:orientation="horizontal"
    android:gravity="@integer/kg_selector_gravity"
    android:contentDescription="@string/keyguard_accessibility_slide_area"

    prvandroid:targetDrawables="@array/lockscreen_targets_unlock_only"
    prvandroid:targetDescriptions="@array/lockscreen_target_descriptions_unlock_only"
    prvandroid:directionDescriptions="@*android:array/lockscreen_direction_descriptions"
    prvandroid:handleDrawable="@*android:drawable/ic_lockscreen_handle"
    prvandroid:outerRingDrawable="@*android:drawable/ic_lockscreen_outerring"
    prvandroid:outerRadius="@*android:dimen/glowpadview_target_placement_radius"
    prvandroid:innerRadius="@*android:dimen/glowpadview_inner_radius"
    prvandroid:snapMargin="@*android:dimen/glowpadview_snap_margin"
    prvandroid:firstItemOffset="@integer/kg_glowpad_rotation_offset"
    prvandroid:magneticTargets="true"
    prvandroid:feedbackCount="1"
    prvandroid:vibrationDuration="20"
    prvandroid:glowRadius="@*android:dimen/glowpadview_glow_radius"
    prvandroid:pointDrawable="@*android:drawable/ic_lockscreen_glowdot"
    prvandroid:allowScaling="true" />

由上面红色粗体标注的部分可以看到,该文件当前引用的是 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 这个监听里的不同方向就行了。

KeyguardSelectorView.java中代码如下:

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() {

        }

    };

红色粗体标注的地方便是我们需要修改或添加的地方

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/ 

重启Android设备

                adb reboot。

等待开机,那么就OK了。

以上是通过修改源码的方式来修改的,对于通过第三方的应用来修改,参考下面这篇文章:

http://blog.csdn.net/stevenhu_223/article/details/8831534



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值