客户功能需求:设置可以自定义的锁屏壁纸。

分析:首先分析系统壁纸设置过程,参考 上一期文章,Android5.1 设置壁纸流程简析。可以按照设置壁纸的方式,模仿实现设置锁屏壁纸的功能。

利用广播,实现设置锁屏壁纸功能。

具体实现:

①.packages/apps/Trebuchet/WallpaperPicker/res/layout/actionbar_set_wallpaper.xml

<!-- 增加Linerlayout布局 包裹两个控件-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="wrap_content"android:layout_height="match_parent"android:orientation="horizontal" ><com.android.launcher3.AlphaDisableableButtonxmlns:android="http://schemas.android.com/apk/res/android"style="@style/ActionBarSetWallpaperStyle"android:id="@+id/set_wallpaper_button"android:layout_width="0dip"android:layout_weight="1"android:layout_height="match_parent"android:paddingRight="20dp"android:drawableLeft="@drawable/ic_actionbar_accept"android:drawablePadding="8dp"android:gravity="start|center_vertical"android:text="@string/wallpaper_instructions">
</com.android.launcher3.AlphaDisableableButton><!-- 模仿上面写一个设置锁屏的button 加入weight =1 ,使两按钮平分-->
<com.android.launcher3.AlphaDisableableButtonxmlns:android="http://schemas.android.com/apk/res/android"style="@style/ActionBarSetWallpaperStyle"android:id="@+id/set_lockscreen_button"android:layout_width="0dip"android:layout_weight="1"android:layout_height="match_parent"android:paddingRight="20dp"android:drawableLeft="@drawable/ic_actionbar_accept"android:drawablePadding="8dp"android:gravity="start|center_vertical"android:text="@string/lock_screen_instructions">
</com.android.launcher3.AlphaDisableableButton>

②.packages/apps/Trebuchet/WallpaperPicker/src/com/android/launcher3/WallpaperPickerActivity.java

 protected void init() {setContentView(R.layout.wallpaper_picker);
……// Action bar// Show the custom action bar viewfinal ActionBar actionBar = getActionBar();actionBar.setCustomView(R.layout.actionbar_set_wallpaper);
//取消ActionBar点击事件,分别给两个按钮设置点击事件/*actionBar.getCustomView().setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {if (mSelectedTile != null) {WallpaperTileInfo info = (WallpaperTileInfo) mSelectedTile.getTag();info.onSave(WallpaperPickerActivity.this);} else {// no tile was selected, so we just finish the activity and go backsetResult(Activity.RESULT_OK);finish();}}});*/mSetWallpaperButton = findViewById(R.id.set_wallpaper_button);mSetLockScreenButton = findViewById(R.id.set_lockscreen_button);mSetWallpaperButton.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {if (mSelectedTile != null) {WallpaperTileInfo info = (WallpaperTileInfo) mSelectedTile.getTag();info.onSave(WallpaperPickerActivity.this);} else {// no tile was selected, so we just finish the activity and go backsetResult(Activity.RESULT_OK);finish();}}});mSetLockScreenButton.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {if (mSelectedTile != null) {WallpaperTileInfo info = (WallpaperTileInfo) mSelectedTile.getTag();info.onSave(WallpaperPickerActivity.this);} else {// no tile was selected, so we just finish the activity and go backsetResult(Activity.RESULT_OK);finish();}
Log.i("TAG","lockscreen button click");}});

③.packages/apps/Trebuchet/WallpaperPicker/src/com/android/launcher3/WallpaperCropActivity.java

在BitmapCropTask中实现

if (mSetWallpaper && mNoCrop) { try {InputStream is = regenerateInputStream();if (is != null) {
              //增加判断是否是点击设置锁屏壁纸按钮if(isLockWallpaper==true){byte[] outByteArray = toByteArray(is);//流转byte数字,用于发送广播Intent intent = new Intent("android.yue.lockscreen.action");//自定义广播intent.putExtra("outByteArray",outByteArray);mContext.sendBroadcast(intent);}else{wallpaperManager.setStream(is);Utils.closeSilently(is);} }} catch (IOException e) {Log.w(LOGTAG, "cannot write stream to wallpaper", e);failure = true;}return !failure;
} else {
……
//else中同样有设置壁纸的方法
wallpaperManager.setStream(new ByteArrayInputStream(outByteArray));
//在这里同样需要做如上判读,具体实现同上。
}

④./frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java

(2)PhoneStatusBar.java中:
 //begin 添加下面一行PanelHolder   mHolder;//成员变量//end
...protected PhoneStatusBarView makeStatusBarView() {...//begin 将下面第一行替换为第二行PanelHolder   holder = (PanelHolder) mStatusBarWindow.findViewById(R.id.panel_holder);           mHolder = (PanelHolder) mStatusBarWindow.findViewById(R.id.panel_holder);//end...
}private void updateKeyguardState(boolean goingToFullShade, boolean fromShadeLocked) {...if (mState == StatusBarState.KEYGUARD || mState == StatusBarState.SHADE_LOCKED) {//begin 添加下面一段final Drawable drawable =new android.graphics.drawable.BitmapDrawable(bitmap);//广播中接收的bitmap,转换为Drawable,并设置mHolder.post(new Runnable(){public void run(){mholder.setBackgroundResource(R.drawable.keyguard_wallpaper);}});//endmScrimController.setKeyguardShowing(true);} else {//begin 添加下面一行mHolder.setBackgroundResource(0);//end  mScrimController.setKeyguardShowing(false);}...
}//加入广播,记得注册广播
private final BroadcastReceiver mTestReceiver = new BroadcastReceiver() {@Overridepublic void onReceive(Context context, Intent intent) {if ("android.yue.lockscreen.action".equals(intent.getAction())) {outByteArray= intent.getExtras().getByteArray("outByteArray");Log.i("TAG","outByteArray=====------ "+outByteArray);InputStream is = new ByteArrayInputStream(outByteArray);bitmap = BitmapFactory.decodeStream(is);}}};
大体是这样,代码细节没有贴全。仅此记录。

android 设置锁屏壁纸相关推荐

  1. Android代码设置锁屏壁纸

    设置锁屏时壁纸(不包括桌面壁纸) private void setLockWallPaper() {WallpaperManager wallpaperManager = WallpaperManag ...

  2. 被组织管理电脑,无法设置锁屏壁纸

    背景 之前在公司实习的时候用了自己的电脑,加入到了公司的域,导致之前可以随意设置的锁屏壁纸无法设置,出现如下图的问题: 上网搜索方法基本都是退出工作组或者其他方式,均失败了,后来发现只需要将注册表这一 ...

  3. android全屏保存壁纸,android设置全屏壁纸代码

    设置全屏壁纸代码: WallpaperManager instance = WallpaperManager.getInstance(mContext); WindowManager wm = (Wi ...

  4. android 设置锁屏密码,密码锁屏是什么?怎么设置密码锁屏

    密码锁屏是什么 安卓手机键盘锁(密码锁屏)分为数字字符键盘锁.图案图形键盘锁以及混合密码三种.而<密码锁屏>软件是一款简单实用的锁屏工具应用,采用iphone样式的控件,使用户的安卓手机更 ...

  5. Android 设置锁屏时间,屏幕常亮效果

    添加权限. <uses-permissionandroid:name="android.permission.WRITE_SETTINGS"tools:ignore=&quo ...

  6. 编程android控制休眠时间,Android设置锁屏/休眠时长

    这个有两个方式: 一种是直接使用api修改: 另一种是修改系统数据库: 调用api需要添加权限,而修改数据库不用. 1.api设置 Settings.System.putInt(getContentR ...

  7. Android设置锁屏/休眠时长

    这个有两个方式: 一种是直接使用api修改: 另一种是修改系统数据库: 调用api需要添加权限,而修改数据库不用. 1.api设置 Settings.System.putInt(getContentR ...

  8. android 锁屏壁纸和桌面壁纸的设置实现

    在flyme系统下面,有个类是可以用来设置桌面壁纸的,叫做WallpaperManager,调用该类的setBitmap(),即可.但是锁屏壁纸的设置却无法直接调用这个类的某些方法. 需要用到反射调用 ...

  9. anndroid6.0锁屏壁纸

    锁屏壁纸 的保存位置在/data/system/users/0 root@**:/data/system/users/0 # ls -la -rw-rw---- system system 73728 ...

  10. w7怎么把计算机放桌面壁纸,W7电脑系统怎么更改锁屏壁纸

    w7电脑系统怎么更改锁屏壁纸?很多第三方软件都可以做到,但我们该如何手动设置锁屏壁纸呢?本文将配合使用注册表修改w7电脑系统的锁屏壁纸的步骤进行一个详细的讲解,具体步骤请看下文. w7电脑系统更改锁屏 ...

最新文章

  1. 可视化调试工具gdb-dashboard
  2. Android实现文字一个一个显示出来
  3. java中VO、PO、DTO 、DO、POJO、BO、TO
  4. iOS当中的设计模式
  5. 手工卡纸做机器人_亲子手工,带孩子用彩色卡纸做一朵可爱的小花,有教程
  6. 【Java从0到架构师】项目实战 - 驾考(旧)- Freemarker、MyBatis-Plus
  7. c226打印机驱动安装_打印机驱动怎么安装?
  8. [MSSQL] 数据库置疑怎么处理?
  9. Linux Command diff 文件比较
  10. 多个数求最小公倍数详解!
  11. SpringBoot使用Quartz定时器实现Email信息轰炸
  12. 香农编码、费诺编码、哈弗曼编码
  13. 【EDM邮件营销】独立站卖家如何通过用户标签提高EDM邮件打开率
  14. Civil3D2018-01使用配置
  15. 一个高中生的编程自学经历
  16. 如何在输入特殊符号,例如角度“∠”
  17. 阿里云天池大赛赛题(深度学习)——视频增强(完整代码)
  18. 沟通的艺术II:看入人里 之知觉
  19. ubuntu18.04 alt+ctrl+t 无响应解决方法
  20. 1011: 圆柱体表面积 Java

热门文章

  1. 【数据分析与挖掘实战】航空公司客户价值分析
  2. 电路分析(电路原理)
  3. android发现u盘自动安装apk,安卓自动识别U盘中APK文件并进行安装操作
  4. 面试之springboot是什么?
  5. 厦门大学2019年数学分析考研试题参考解答
  6. 电脑只能上微信不能打开网页_怎么回事?我的电脑浏览器打不开网页,但微信、QQ却又能用?...
  7. 微信公共号开发简单入门
  8. 天宫管理系统_天宫职位
  9. python求解一元二次方程
  10. 移动硬盘计算机无法打开硬盘,移动硬盘打不开怎么办 硬盘打不开解决方法【详解】...