android桌面壁纸以及快捷方式(上)
改变壁纸
Android使用wallpaperManager来改变壁纸,所调用的接口方法如下:
开发动态壁纸
Android界面是动态的,由程序实时控制的,开发步骤如下:
①开发一个子类继承WallpaperService基类
②继承基类后重写onCreateEngine方法,该方法返回WallpaperService.Engine子类对象
③实现WallpaperService.Engine的子类,重写其中的onVisibilityChanged()、onOffsetsChanged()等方法,通过SurfaceHolder进行动态的绘制图形。
运行动态壁纸,需要下面两项配置:
运行动态壁纸,需要下面两项配置:<serviceandroid:label="@string/app_name"android:name=".view.MyWallPaper"android:permission="android.permission.BIND_WALLPAPER"android:exported="true">
<!-- 为动态壁纸配置intent-filter--><intent-filter><action android:name="android.service.wallpaper.WallpaperService"/></intent-filter>
<!-- 为动态壁纸配置meta-data--><meta-data android:name="android.service.wallpaper"android:resource="@xml/livewallpaper"/></service>
快捷方式
在长按某个应用的时候就会出现这样的快捷方式,在使用APP某个常用功能时很方便
实现方式如下:
静态方式
通过AndroidManifest.xml方式进行添加
①在主Activity中添加:
<activityandroid:name=".view.MainActivity"android:exported="true"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter>
<!-- 指定快捷方式的资源文件--><meta-data android:name="android.app.shortcuts"android:resource="@xml/fk_shortcuts"/></activity>
②在xml中新建一个shortcuts,自定义其中内容
<?xml version="1.0" encoding="utf-8"?>
<shortcuts xmlns:android="http://schemas.android.com/apk/res/android"><shortcutandroid:enabled="true"android:icon="@drawable/ic_launcher_background"android:shortcutId="tsuky"android:shortcutDisabledMessage="@string/app_name"android:shortcutLongLabel="@string/app_name"android:shortcutShortLabel="@string/app_name"><intentandroid:action="android.intent.action.VIEW"android:targetClass="com.example.yueeasy.view.MainActivity"android:targetPackage="com.example.yueeasy"/><categories android:name="android:shortcuts,conversation"/></shortcut>
</shortcuts>
根元素是<shortcuts/>可以包含多个<shortcut/>子元素,<shortcut/>子元素的属性如下:
enabled:设置该快捷键项是否可用
icon:设置该快捷键的图标
shortcutDisabledMessage:设置禁用该快捷项时所显示的文本
shortcutLongLabel:设置该快捷项的长标题
shortcutShortLabel:设置该快捷项的短标题
intent 这里表示我们点击shortcut进行的操作,,targetPackage是指定一个目标应用的包名,targetClass是我们要跳转的目标类, android:action一定要配置, 否则会崩溃
Categories,这个东西目前位置官方只给提供了android.shortcut.conversation
动态方式
添加快捷方式:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) {try {if (true) {ShortcutManager mShortcutManager = getSystemService(ShortcutManager.class);List<ShortcutInfo> infoList = new ArrayList<>();infoList.add(createShortcutInfo("id1", 0, icon1, "name1"));infoList.add(createShortcutInfo("id2", 1, icon2, "name2"));if (mShortcutManager != null)mShortcutManager.setDynamicShortcuts(infoList);}} catch (Exception e) {e.printStackTrace();}
}
private ShortcutInfo createShortcutInfo(String id, int rank, int icon, String label) {if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) {return new ShortcutInfo.Builder(this, id).setShortLabel(label)// 快捷方式桌面名称.setLongLabel(label)// APP长按显示的标题.setRank(rank)// 显示顺序.setIcon(Icon.createWithResource(this, icon))// 快捷方式的图标.setIntent(new Intent(Intent.ACTION_MAIN, null, this, MainActivity.class).setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)//根据需求来设置Flag.putExtra("key", id))// 传递跳转参数.build();}return null;
}
Intent跳转页面的处理:
Intent intent = getIntent();
String data = intent.getStringExtra("key");
if(data != null){switch (data){case "id1":Intent intent1 = new Intent(this, test1Activity.class);startActivity(intent1);break;case "id2":Intent intent1 = new Intent(this, test2Activity.class);startActivity(intent2);break;}
}
桌面快捷方式
把一个程序的快捷方式添加到桌面的步骤:
①使用shortcutManager.isRequestPinShortcutSupported()判断当前版本是否支持Pinned快捷方式
②创建shortcutInfo,设置它的ID、图标、长标题、短标题等。
③使用shortcutManager的 requestPinShortcut()方法请求添加Pinned快捷方式
ShortcutManager shortcutManager=getSystemService(ShortcutManager.class);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {if (shortcutManager.isRequestPinShortcutSupported()){Intent intent=new Intent(MainActivity.this,TsukyActivity.class);intent.setAction("android.intent,action,VIEW");//如果ID是my_shortcut的快捷方式已经存在,就用已有的信息 不存在则设置ShortcutInfo shortcutInfo=new ShortcutInfo.Builder(MainActivity.this,"my_shortcut").setShortLabel("快捷方式").setIcon(Icon.createWithResource(this,R.drawable.heart)).setIntent(intent).build();//请求添加Pinned快捷方式shortcutManager.requestPinShortcut(shortcutInfo,null);}
}
设置了一个控件的点击事件,然后加入上述代码,运行后点击就会出现下面的添加快捷方式的按钮
桌面控件
桌面控件就是能直接显示在Android系统桌面上的小程序,时钟日历等
开发桌面控件的步骤
桌面控件是通过BroadcastReceiver的形式来进行控制的,因此每个桌面控件都对应一个BroadcastReceiver,为了更好的管理控件的开发,Android提供了AppWedgetProvider类,他是BroadcastReceiver的子类。
因此开发桌面控件,只要继承AppWedgetProvider,重写不同的生命周期方法即可。
onUpdate():负责更新桌面控件的方法
onDelete():桌面控件被删除时的回调方法
onEnabled():收到ACTION_APPWIDGET_ENABLED broadcast时回调该方法
onDisabled():收到ACTION_APPWIDGET_DISABLED broadcast时回调该方法
- 创建一个类继承AppWedgetProvider 重写onUpdate方法
- 创建一个RemoteViews对象,加载指定的布局文件
- 如果需要改变上一步 所加载的界面布局文件内容 可以通过RemoteViews进行修改,RemoteViews主要包含ImageView和TextView两种组件
- 创建一个ComponentName对象
- 调用AppWedgetManager更新桌面控件
public class Desktop extends AppWidgetProvider {@Overridepublic void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {super.onUpdate(context, appWidgetManager, appWidgetIds);//加载页面布局文件 创建RemoteView文件RemoteViews remoteViews=new RemoteViews(context.getPackageName(), R.drawable.heart);//为ImageView设置图片remoteViews.setImageViewResource(R.id.text,R.drawable.heart);//将AppWidgetProvider的子类伪装成ComponentName对象ComponentName componentName=new ComponentName(context,Desktop.class);//调用appWidgetManager将remoteViews添加到ComponName中appWidgetManager.updateAppWidget(componentName,remoteViews);} }
还需要在Manifest中进行配置,由于他的本质是broadcastReceiver,所以要注册:
android:exported="true"><intent-filter><action android:name="android.appwidget.action.APPWIDGET_UPDATE"/></intent-filter><meta-data android:name="android.appwidget.provider"android:resource="@xml/appwidget"/>
</receiver>
作为meta-data,还需要在目录中添加appwidget的xml文件。从上到下分别是初始显示布局、最小高度、最小宽度、更新频率
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"android:initialLayout="@layout/activity_main"android:minHeight="70dp"android:minWidth="150dp"android:updatePeriodMillis="1000">
</appwidget-provider>
android桌面壁纸以及快捷方式(上)相关推荐
- android桌面壁纸显示不全屏显示,手机壁纸怎么全屏 全屏显示手机壁纸方法
使用安卓手机的朋友都知道,安卓手机更换的壁纸是一个比较大的壁纸,对于一张背景壁纸图片我们手机界面看到的只有一部分,只有通过左右划屏才可以变换的看完整张桌面背面图片,那么如何在手机界面中看到一个完整的桌 ...
- 微软android桌面壁纸,微软桌面(com.microsoft.launcher) - 6.210402.0.960830 - 应用 - 酷安
权限信息 · com.microsoft.launcher.permission.SETTINGS_ACCESS · android.permission.FOREGROUND_SERVICE · c ...
- 高清青龙壁纸 桌面壁纸
高清青龙壁纸 桌面壁纸 资源已上传至☞https://download.csdn.net/download/weixin_43510203/12576683
- ubuntu16.04自动切换桌面壁纸
一.描述 让办公电脑桌面自动更换壁纸是一个很常见的需求,虽然不少这方面的小软件可以实现这个功能.事实上,在基于Gnome的桌面系统中,我们可以不需要借助任何第三方软件的帮助来让我们的桌面自动更换壁纸. ...
- mac桌面壁纸_在Mac上从命令行设置桌面墙纸
mac桌面壁纸 Whenever I need to accomplish a basic task that typically calls for interacting with a UI, I ...
- Android桌面长按图标快捷方式——Shortcuts
简介 当我们在长按Android应用的桌面图标时,一般回弹出一个列表,上面一般有应用信息.卸载应用等功能,并且部分应用在这里还添加了自己的快捷方式,今天主要介绍如何添加自定义的快捷方式. 长按桌面显示 ...
- 安卓桌面壁纸_Android上什么记事本软件更好用?这款安卓手机便签APP不错
随着国产手机的发展,现在使用国产安卓手机的用户越来越多了,因为我们在日常生活.工作和学习的过场中免不了要随手记录一些事情,以作备忘和提醒.于是就有人问,除了手机自带的记事本.便签或备忘录之外,安卓手机 ...
- Android桌面快捷方式兼容问题
原文来自http://blog.zanlabs.com/2015/03/14/android-shortcut-summary/ 将近二个多月没写博客了. 之前一段时间一直在搞红包助手,就没抽时间写博 ...
- Android桌面快捷方式那些事与那些坑
原文来自http://blog.zanlabs.com/2015/03/14/android-shortcut-summary/ 将近二个多月没写博客了. 之前一段时间一直在搞红包助手,就没抽时间写博 ...
最新文章
- 【每日一算法】有效的括号
- 项目管理指标_项目经理必须掌握的九大项目管理问题!
- android 之 ListView 里面嵌套 GridView 遇到的问题及其解决方法。
- Spring 注解AOP
- java方法中 thread,Java中的線程Thread方法之---join()
- python学习-数据类型(列表→创建、取值、大小、长度)
- python画图库matplotlib:初识
- 的clear会清空内存吗_Python内存分配时有哪些不为你知的小秘密?
- pku 2348 Euclid's Game
- 14. Magento路由分发过程解析(二):Standard路由对象
- 一位区域销售经理百条经验手记
- sqlmap详细使用教程
- HTML4到HTML5的新增内容,你知道吗?
- 计算力学——有限元编程实现
- 掌握Android图像显示原理(上)
- Góra urządzenia z dwoma zwiększyć moc może sprawić
- 一些数据采集卡使用过程中常见问题
- Java基础系列(三十):局部内部类
- CE下中文输入法编辑器(转)
- 2016-2017寒假社会实践报告