• 锁屏管理的简单实现


    如前面所说,我在方案公司工作,日常负责锁屏的开发。由于设计过很多锁屏,为了能够像小米手机中的主题切换中,实现百变锁屏功能。
    再次我简单说下锁屏管理的思路,由于涉及到公司代码机密问题。有的地方我只会简单点到为止,估计细节如果读者有一定的功力的话,也能猜的出来时怎么实现的。

    下面贴现锁屏管理的效果图片。

    锁屏管理中,出现了锁屏预览界面和锁屏的名称,这个类似于Launcher中的图标。我们就可以利用这样的思路来实现相同的功能。

    首先在锁屏管理中,要能查询这个手机上面一共安装了多少个锁屏apk。类似于Launcher一样,需要查询出多少应用有图标。

    Launcher中识别的条件如下所示。

    <application
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name" >
            <activity
                android:name=".TestlightActivity"
                android:label="@string/app_name" >
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
        </application>

    主要的标签是<category android:name="android.intent.category.LAUNCHER" />


    那么我们的锁屏界面如何能查询呢?一般的Apk锁屏,都是在屏幕熄灭的时候,监听广播,然后把系统锁屏给禁止掉,最后显示我们的锁屏Activity,这样就完成了一个最简单锁屏了。

    利用上面锁屏的思路,我们可以查询所有锁屏Apk。然后再接受到系统广播后,就选择性的指定某一个apk作为显示的锁屏。

    void queryAllLockScreen() {
    		Context context = this;
    		PackageManager pm = context.getPackageManager();
    
    		Intent it = new Intent("com.locktest.LOCK_SCREEN");
    		it.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    		List<ResolveInfo> all = pm.queryIntentActivities(lockIntent, 0);
    
    		for (ResolveInfo info : all) {
    			System.out.println(info.activityInfo.packageName);
    			System.out.println(info.activityInfo.name);
    		}
    	}

    	/**
    	 * 开启activity
    	 */
    	private void initIntent() {
    		lockIntent = new Intent("com.fx.locktest.LOCK_SCREEN");
    		String packageName = null; // 数据库中得到,没有具体实现
    		String className = null; // 数据库中得到,没有具体实现
    		lockIntent.setClassName(packageName, className);
    		lockIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    	}

    /**
     * 屏幕变亮的广播
     */
    private BroadcastReceiver screenReceiver = new BroadcastReceiver() {
    
    
    	public void onReceive(Context context, Intent intent) {
    		if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF) || intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
    			startActivity(lockIntent);
    		}
    	}
    };



    最后涉及到锁屏指定以及锁屏数据保存问题。根据上面代码可以看出,所有的锁屏最主要的需要保存的数据有package以及activity的路径。这样我们就实现代码了。


    由于保存的数据比较少,且是键值对的形式,个人在实现的时候,刚刚开始使用的是cottentprovider,但是这样保存比较麻烦,同时获取数据也是比较麻烦的,最后就使用了Android内置的sharepreference来保存,简单而且使用。

    好了,就简单介绍到这边,由于机密问题(当然这个也不是什么大秘密),说的比较简单。

    如有疑问,欢迎前来讨教。


  • 相关阅读:
    吴军博士:物联网和人工智能将再造一个英特尔和微软 | 万物互联
    速来膜拜!20位活跃在Github上的国内技术大牛
    创建带Mipmap的osg::Image
    C#文件系统管理【转】
    C#文本文件(.txt)读写 [转]
    C#连接SQL Server数据库进行简单操作[转]
    shell脚本把一些请求量非常高的ip给拒绝掉
    linux获取精准进程PID之pgrep命令
    Kubernetes的Cron Job
    StatefulSet和Deployment的区别
  • 原文地址:https://www.cnblogs.com/liushuibufu/p/4140925.html
Copyright © 2020-2023  润新知